18.04.2 загрузить initrd в ramdisk

Я пытаюсь создать загрузочное ядро ​​PXE для CloneDeploy . У меня есть сетевой адаптер, которому нужны некоторые драйверы, которые не работают из коробки, но работают нормально при установке Ubuntu, поэтому я подумал, что я просто загрузлю PXE, используя ядро ​​и initrd, с которых я загружаю свою Ubuntu (будучи не очень Linux) Я не могу придумать лучшего способа сделать что-то, попытки собрать собственное ядро ​​не дали работающего сетевого адаптера.

У меня установлена ​​последняя версия 18.04.2. Поэтому я скопировал файлы: vmlinuz-4.18.0-20-generic и initrd.img-4.18.0-20-generic в нужные места моей системы PXE и ​​попытался загрузиться с них.

Это (ipxe) командная строка загрузки (с местами изображений, сокращенными для удобства чтения):

kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000  web=http://.../ USER_TOKEN= task=debug consoleblank=0 
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot

При загрузке инициализируется группа соответствующих устройств (включая мой сетевой адаптер!), Но затем я сталкиваюсь со следующей ошибкой:

gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!

Я нашел этот вопрос , который предполагает, что мне нужно сделать дополнительный шаг во время загрузки где-нибудь, чтобы загрузить модуль brd и получить initrd, который нужно превратить в реальный оперативный диск. Было предложено add "brd rd_size=16777216" to /etc/initramfs/modules, но когда я распаковываю общий файл initrd.img-4.18.0-20 (используя unmkinitramfs), нет файла / etc / initramfs. (Я также отмечаю, что, вероятно, следует использовать rd_nr=1 rd_size=1048576, чтобы создать только ram0 вместо ram0 через ram15).

Как мне избежать ошибки загрузки. И если это связано с загрузкой BRD, как мне это сделать для этой версии ядра?

1
задан 23 May 2019 в 19:33

1 ответ

Первоначальный виртуальный диск (в вашем случае это initrd.img-4.18.0-20-generic) генерируется инструментом update-initramfs автоматически при установке ядра в вашу систему.

update-initramfs проверяет вашу систему и добавляет необходимые модули в initrd для загрузки ее во время загрузки.

Есть два места, где вы можете поместить свои сценарии для initial ramdisk:

/usr/share/initramfs-tools

и

/etc/initramfs-tools 

В вашем случае вы должны вставить эту строку в /etc/initramfs-tools/modules и запустите

update-initramfs -u

для вашего текущего ядра.

Затем проверьте результат:

mkdir myinitramfs

cd myinitramfs

zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract

cat conf/modules

проверьте, есть ли ваш модуль в списке

0
ответ дан 23 May 2019 в 19:33

Другие вопросы по тегам:

Похожие вопросы: