Как использовать STLPort в моем ядре?

Я занимаюсь разработкой ядра на C++. Но я не хочу писать stdlib; для этого я скачал STLport http://www.stlport.org/, но я не знаю, как установить и использовать его.

Я использую Linux для сборки своего ядра.

Как я могу использовать стандартные библиотеки C++ в моем ядре?

И я не хочу портировать все библиотеки из STLport. Как я могу исключить выбор libs? подобно std::string, std::vector и т.п.

3 ответа

Решение

Чтобы STL работал, вы должны портировать несколько вещей, таких как статическая инициализация (например, std::cin и std::cout) и разматывание стека...

вам придется портировать то есть: libsupC++ и иметь это в вашем ядре. По сути, все это не должно быть в ядре. НЕ используйте Векторы, используйте статические массивы, потому что векторы могут перераспределять ваши данные!

также все эти вещи будут раздувать ваше ядро ​​даром!

Вы можете посмотреть, что L4 позволяет использовать в ядре. они не занимаются распределением памяти, не делают исключений (непредсказуемо) и, особенно, не делают STL.

Последние ссылки должны дать вам представление о том, что вам нужно портировать, чтобы получить поддержку операционной системы C++. LibsupC++ является частью gcc. его цель - инкапсулировать все части, где необходим код времени выполнения.

Полезная информация о libsupC++

Полезная информация о поддержке операционной системы C++

Я бы, вероятно, посоветовал не использовать STL в разработке ядра. STL примет некоторую форму поддержки стандартной библиотеки, которой нет в вашем ядре. Кроме того, большинство операций выделения памяти не имеют ограничений по времени, которое они могут занять, и поэтому не подходят для использования в обработчиках прерываний. Исключения - это еще одна вещь, которая может вызвать сильную головную боль в ядре.

Я не уверен, насколько хорош STL в ядре, но если вы действительно хотите попробовать, это очень весело. Я написал свою собственную ОС, и когда у меня было выделение памяти в ядре, первое, что я сделал, было портирование STLport (5.2.1). До сих пор это работало хорошо, хотя само ядро ​​все еще слишком предварительное.

В любом случае, я могу поделиться некоторым опытом по его портированию.

  1. Портирование STLport не требует сборки и очень небольшого количества предварительных условий, просто включите заголовки и сообщите компилятору свой путь (опция -I для gcc). Классы шаблонов будут скомпилированы с вашими исходными файлами cpp.

  2. STLport настраивается, вы можете отключить то, что вы не можете себе позволить, и выбрать то, что вы хотите, такие как iostream, отладка, исключение, RTTI и многопоточность. Просто ознакомьтесь с документацией и затем перейдите к заголовкам конфигурации, это очень приятно прокомментировано (например, stlport/stl/config/user_config.h)

  3. Как самое основное, что вам нужно malloc а также free, или, может быть new, delete и варианты. Этого достаточно для переноса строки std, контейнеров и алгоритмов IIRC. Но это не является ни потокобезопасным, ни оптимизированным распределением памяти, вы должны быть очень осторожны, когда полагаетесь на него.

  4. Вы можете сделать свой собственный iostream, это просто шаблоны классов и глобальные объекты (кстати, я взломал секции ELF и вручную инициализировал свои глобальные объекты, вызвав функции), но это требует дополнительной работы.

Эта ссылка на github моего проекта ОС, я надеюсь, что это может дать вам вдохновение.

Другие вопросы по тегам