Estoy intentando crear un kernel de arranque PXE paraClonarImplementar. Tengo una NIC que necesita algunos controladores que no funcionan de fábrica, pero funcionan bien en una instalación de Ubuntu, así que pensé en simplemente arrancar PXE usando el kernel y el initrd desde el que inicio mi Ubuntu (no es muy Linux). -savvy No puedo pensar en una manera mucho mejor de hacer las cosas, los intentos de construir mi propio kernel no han logrado producir una NIC que funcione).
Estoy ejecutando una instalación actualizada 18.04.2. Así que copié los archivos:
vmlinuz-4.18.0-20-generic
y initrd.img-4.18.0-20-generic
en los lugares correctos de mi sistema PXE e intenté arrancar desde ellos.
Esta es la línea de comando de arranque (ipxe) (con las ubicaciones de las imágenes acortadas para mantener las cosas legibles):
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
Al arrancar, se inicializan un montón de dispositivos relevantes (¡incluida mi NIC!), pero luego aparece el siguiente error:
gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!
he encontradoesta pregunta, lo que sugiere que necesito realizar un paso adicional durante el arranque en algún lugar para que se cargue el módulo brd y convertir el initrd en un disco RAM utilizable real. Se sugirió hacerlo add "brd rd_size=16777216" to /etc/initramfs/modules
, pero cuando descomprimo el archivo initrd.img-4.18.0-20-generic (usando unmkinitramfs
), no hay /etc/initramfs. (También observo que probablemente debería usar rd_nr=1 rd_size=1048576
solo tener ram0 creado en lugar de ram0 a ram15).
¿Cómo puedo superar el error de arranque? Y si eso implica cargar brd, ¿cómo lo hago para esta versión del kernel?
Respuesta1
El disco ram inicial (en su caso lo es initrd.img-4.18.0-20-generic
) lo genera la update-initramfs
herramienta automáticamente durante la instalación del kernel en su sistema.
update-initramfs
revisa su sistema y agrega los módulos necesarios initrd
para cargarlo durante el arranque.
Hay dos ubicaciones donde puede colocar sus scripts initial ramdisk
:
/usr/share/initramfs-tools
y
/etc/initramfs-tools
En tu caso debes insertar esa línea /etc/initramfs-tools/modules
y ejecutar
update-initramfs -u
para su kernel actual.
Entonces mira el resultado:
mkdir myinitramfs
cd myinitramfs
zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract
cat conf/modules
compruebe si su módulo está en la lista