Ejecutar bzImage en QEMU: no se puede montar la raíz fs en el bloque desconocido (0.0)

8

Compilé el núcleo haciendo make menuconfigy make. Intenté ejecutar bzImage en qemu, qemu -kernel bzImagepero no funcionó con el mensaje de error:

Unable to mount root fs on unknown-block(0.0)

Error del kernel de Linux

¿Cómo puedo arreglarlo? ¿Cómo puedo ejecutar bzImage en qemu?

Codificador404
fuente
55
El núcleo arrancó bien, pero no puede encontrar el sistema de archivos raíz. ¿Qué discos has montado en la VM? ¿Qué tipo de sistema de archivos es el sistema de archivos raíz, qué tipo de disco? ¿Están todos los controladores necesarios compilados en el kernel (olvidar un controlador es un error común)?
Gilles 'SO- deja de ser malvado'
@Gilles No monté un sistema de archivos. Después de compilar, fui directamente al archivo donde se encuentra bzImage (../arch/x86/boot) e hice el comando "qemu -kernel bzImage". ahí es cuando recibí el error.
Coder404

Respuestas:

11

Funcionó. El grano arrancó bien. El error es:

No se puede montar la raíz fs en el bloque desconocido (0.0)

El núcleo está buscando un sistema de archivos raíz. Necesitas proporcionar uno. No puede interactuar con un kernel sin ejecutar procesos en él, y el proceso inicial debe cargarse desde algún lugar: cuando se inicia el kernel, monta un sistema de archivos (el sistema de archivos raíz) en el directorio /, luego ejecuta el programa /sbin/init. El programa init normalmente se encarga de ejecutar scripts de arranque e iniciar servicios, incluidos los programas que permiten a los usuarios iniciar sesión.

Debe asegurarse de que el núcleo pueda montar el sistema de archivos raíz. Debe tener controladores para el tipo de sistema de archivos y para todas las capas involucradas en el dispositivo de bloque (controlador de disco (adaptador SCSI / SATA / IDE / USB / ...), tipo de partición, etc.).

Linux ofrece una posibilidad adicional, que es cargar un sistema de archivos inicial en la RAM que se usa durante el proceso de arranque para localizar y montar el sistema de archivos raíz. Este sistema de archivos inicial puede contener módulos que manejan el dispositivo y el tipo de sistema de archivos del sistema de archivos raíz. Hay dos mecanismos ligeramente diferentes: initrd e initramfs.

Gilles 'SO- deja de ser malvado'
fuente
¡Gracias por la respuesta! ¿Puedo crear un sistema de archivos virtual para arrancar? Si es así, ¿cómo voy a hacer eso?
Coder404
@ Coder404 ¿Se refiere a un sistema de archivos virtual para usar como sistema de archivos raíz? Conviértalo en una unidad de memoria ram.
Gilles 'SO- deja de ser malvado'
Quiero utilizar un sistema de archivos virtual como sistema de archivos raíz para el núcleo que estoy construyendo en QEMU. ¿Cómo haría el sistema de archivos virtual?
Coder404
1

Aunque los sistemas de archivos se compilarán solo en el núcleo, se debe crear un sistema de archivos inicial que estará presente en la RAM para ejecutar el núcleo. Para hacer este sistema de archivos RAM inicial, se usa mkinitrd. En ubuntu se usa mkinitramfs en lugar de eso

cd ~ / linux / linux-2.6.32.59 / arch / i386 / boot

mkinitramfs -o initrd.img-2.6.32.59

después de eso ejecuta el kernel en qemu

qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd representa el sistema de archivos RAM inicial

puede encontrar el sistema de archivos ram en /boot/initramfs-linux.img

gerrard2461
fuente