Как использовать STLPort в моем ядре? - PullRequest
3 голосов
/ 19 сентября 2011

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 19 сентября 2011

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

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

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

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

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

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

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

3 голосов
/ 19 сентября 2011

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

2 голосов
/ 08 октября 2012

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

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

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

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

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

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

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

...