Загрузочный загрузчик Grub с поддержкой общей библиотеки

Я хочу загрузить общую библиотеку (двоичную библиотеку пользовательского пространства с закрытым исходным кодом) на этапе загрузки с загрузчиком загрузки grub. Есть ли какие-либо шансы на это, или я должен написать для него пользовательский эльф-загрузчик (модуль grub)?


  • 29/08/2014: для более подробной информации это проблема программирования, в которой я хотите настроить или добавить некоторые новые функции загрузчику Grub проект. Спасибо вам за поддержку!

Ответ 1

Итак, вы не делаете это совершенно ясно, что вы пытаетесь сделать, но:

Загрузка пользовательского пространства (при условии, что тип Linux SysV ELF) разделяемая библиотека прямо в GRUB невозможна. Модули GRUB действительно находятся в формате ELF, но содержат дополнительные заголовки. Среди информации, содержащейся в этом заголовке, есть явный оператор лицензии - GRUB откажется загружать любые модули, которые явно не являются GPLv2 +, GPLv3 или GPLv3 +.

Должно быть возможно написать загрузчик ELF, но проще всего написать инструмент для преобразования библиотеки пользовательского пространства в модуль GRUB. Разумеется, здесь должно быть несколько ограничений:

  • Вам нужно будет убедиться, что в библиотеке пользовательского пространства не было никаких системных вызовов - у GRUB не было бы никакого места для их обработки.
  • Вам необходимо будет соблюдать правила лицензирования (поэтому допустимы только три лицензии).
  • Вам нужно будет убедиться, что эти библиотеки не зависят от глобальной таблицы смещений, создаваемой с помощью glibc для них.

Если перекомпиляция является опцией, GRUB также предоставляет уровень эмуляции POSIX - добавьте CPPFLAGS_POSIX в свои CPPFLAGS и используйте основные стандартные заголовочные файлы POSIX. Посмотрите на поддержку gcrypt для примера.