Как использовать 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. его цель - инкапсулировать все части, где необходим код времени выполнения.
Я бы, вероятно, посоветовал не использовать STL в разработке ядра. STL примет некоторую форму поддержки стандартной библиотеки, которой нет в вашем ядре. Кроме того, большинство операций выделения памяти не имеют ограничений по времени, которое они могут занять, и поэтому не подходят для использования в обработчиках прерываний. Исключения - это еще одна вещь, которая может вызвать сильную головную боль в ядре.
Я не уверен, насколько хорош STL в ядре, но если вы действительно хотите попробовать, это очень весело. Я написал свою собственную ОС, и когда у меня было выделение памяти в ядре, первое, что я сделал, было портирование STLport (5.2.1). До сих пор это работало хорошо, хотя само ядро все еще слишком предварительное.
В любом случае, я могу поделиться некоторым опытом по его портированию.
Портирование STLport не требует сборки и очень небольшого количества предварительных условий, просто включите заголовки и сообщите компилятору свой путь (опция -I для gcc). Классы шаблонов будут скомпилированы с вашими исходными файлами cpp.
STLport настраивается, вы можете отключить то, что вы не можете себе позволить, и выбрать то, что вы хотите, такие как iostream, отладка, исключение, RTTI и многопоточность. Просто ознакомьтесь с документацией и затем перейдите к заголовкам конфигурации, это очень приятно прокомментировано (например, stlport/stl/config/user_config.h)
Как самое основное, что вам нужно
malloc
а такжеfree
, или, может бытьnew
,delete
и варианты. Этого достаточно для переноса строки std, контейнеров и алгоритмов IIRC. Но это не является ни потокобезопасным, ни оптимизированным распределением памяти, вы должны быть очень осторожны, когда полагаетесь на него.Вы можете сделать свой собственный iostream, это просто шаблоны классов и глобальные объекты (кстати, я взломал секции ELF и вручную инициализировал свои глобальные объекты, вызвав функции), но это требует дополнительной работы.
Эта ссылка на github моего проекта ОС, я надеюсь, что это может дать вам вдохновение.