LINUX.ORG.RU

Запуск initrd и EFISTUB

 , ,


1

2

Привет ребята/девчата, помогите пожалуйста решить проблему. Есть дистрибутив Gentoo на внешнем накопителе, который нужно загрузить без добавления записей в UEFI и вообще, использования каких-либо загрузчиков. Казалось бы - EFISTUB тебе в помощь, достаточно собрать ядро с нужными опциями, положить в /EFI/Boot/bootx64.efi и будет счастье, при загрузке все само подхватится. Все так, но есть нюанс - для полноценной загрузки также нужен initrd и тут вся заковыка:

  • если впихнуть его в само ядро загрузка успешна;
  • если положить его рядом с ядром и затем руками запуститься через какой-нибудь UEFIShell, указав пути к ядру и образу, загрузка успешна;
  • если задать параметр initrd и путь в «Built-in kernel command line», то при загрузке образ не подхватывается, ядро паникует. При этом последний вариант загрузки самый предпочтительный, может кто-нибудь знает как его починить?

З.Ы. В Talks-ах гентушной вики есть упоминание, что подобный способ у кого-то тоже не заработал, но никаких обсуждений причин/способов обхода не нашел(( https://wiki.gentoo.org/wiki/Talk:EFI_stub_kernel

Все так, но есть нюанс - для полноценной загрузки также нужен initrd

Смотря как ядро собрал и как система развёрнута (LVM, шифрование, etc). В большинстве случаев никакой нужды в нём нет

XMs ★★★★★ ()
Ответ на: комментарий от anonymous

Я этот образ сам собирал и знаю что там внутри) Проблема не в том, что initrd неправильно работает, а в том, что не запускается (если все подготовить, как в третьем варианте из топ сообщения).

Гугл (кроме talk-s) молчит, поэтому и решил спросить здесь, вдруг кто-то из местных встречался с подобным.

QLantum ()

если задать параметр initrd и путь в «Built-in kernel command line», то при загрузке образ не подхватывается, ядро паникует.

efistub - это отдельная от ядра сущность, и он не читает захардкоженную внутрь образа ядра cmdline, а читает EFI-параметры (которые в записаны в биосе, так сказать).

При этом последний вариант загрузки самый предпочтительный, может кто-нибудь знает как его починить?

Патчить. Надо как-то приписать к cmdline, передаваемому efi свой «initrd=», или прямо указать свой.

Думаю, надо смотреть, начиная drivers/firmware/efi/libstub/efi-stub-helper.c: efi_load_initrd_cmdline.

Кстати

EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER 
This method is deprecated.
anonymous ()