Как правильно загружать своё ядро?

При попытке начать кодировать на голом железе (x86_64) встал вопрос о загрузчике. Напрашиваются следующие варианты:



1. Самописный BIOS-загрузчик



Плюс: Всё просто и понятно.

Минусы: Гемморой ручной загрузки ядра, переключения real mode -> long mode. Устаревшая технология



2. Использование multiboot specification + GRUB2



Плюс: Вся работа загрузки снимается с плеч.

Минусы: Не могу оценить трудозатраты на поддержку этой спецификации. Один и тот же образ ядра может загружаться как через BIOS, так и через (U)EFI?



3. Оформить образ ядра как UEFI-application, так чтобы он напрямую загружался железом.



Плюс: Не нужен специальный загрузчик.

Минусы: Нельзя отделить сборку ядра от сборки UEFI-образа, что повлечёт проблемы переносимостью сборки (сложные Makefiles, требование наличия правильных компиляторов и инструментов).



4. Реализовать самописный UEFI-загрузчик для своего ядра



Плюс: нет геммороя сборки загрузчика, может распространяться в бинарном виде

Минусы: необходимость глубоко разбираться с UEFI API, что не сильно мне улыбается.



Какой из методов кажется вам более правильным, менее трудоёмким и более перспективным? И почему? Спасибо.
  • Вопрос задан
  • 6104 просмотра
Решения вопроса 1
Ariman
@Ariman
Готовый загрузчик, конечно. Иначе так на нем и остановитесь, проверенно много раз многими людьми)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Мой голос — за multiboot. Кстати, он поддерживается как grub2 так и grub1. И в исходном коде grub есть пример минимального multiboot-ядра, на основе которого очень удобно писать дальше.
Ответ написан
Комментировать
@agmt
Гемморой ручной загрузки ядра, переключения real mode -> long mode

Это ж не так сложно, да и вроде(?) всё равно придётся самому потом расписывать таблицы страниц.

Но всё равно, куда красивее, правильнее, универсальнее прикинуться ядром линукса.
P.S. а grub2 передаёт управление ядру x86_64 в protected mode или long mode?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы