18.04.2 cargar initrd en ramdisk

18.04.2 cargar initrd en ramdisk

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-genericy 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=1048576solo 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-initramfsherramienta automáticamente durante la instalación del kernel en su sistema.

update-initramfsrevisa su sistema y agrega los módulos necesarios initrdpara 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/modulesy 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

información relacionada