He descargado la imagen de Raspbian en esta página . Estoy tratando de compilar un kernel que pueda usarse para arrancar la imagen dentro de qemu.
Descargué la fuente del kernel de Linux desde kernel.org y ejecuté:
make versatile_defconfig
make menuconfig
Luego agregué las siguientes características al núcleo:
- Soporte PCI (CONFIG_PCI)
- Soporte de dispositivo SCSI (CONFIG_SCSI)
- Soporte de disco SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX Versión 2 Soporte SCSI (CONFIG_SCSI_SYM53C8XX_2)
- El sistema de archivos extendido 3 (ext3) (CONFIG_EXT3_FS)
- El sistema de archivos extendido 4 (ext4) (CONFIG_EXT4_FS)
También monté en bucle la imagen del disco y:
- Comentado
/etc/ld.so.preload
- ajustado
/etc/fstab
para usar/dev/sda1
y/dev/sda2
Luego desmonté la imagen e intenté iniciar la máquina con:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
El kernel pudo montar el sistema de archivos pero inmediatamente tuvo algunos problemas:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: init Not tainted 4.3.0 #1
Hardware name: ARM-Versatile PB
[<c001b5c0>] (unwind_backtrace) from [<c0017e18>] (show_stack+0x10/0x14)
[<c0017e18>] (show_stack) from [<c0069860>] (panic+0x84/0x1ec)
[<c0069860>] (panic) from [<c0025b98>] (do_exit+0x81c/0x850)
[<c0025b98>] (do_exit) from [<c0025c5c>] (do_group_exit+0x3c/0xb8)
[<c0025c5c>] (do_group_exit) from [<c002dfcc>] (get_signal+0x14c/0x59c)
[<c002dfcc>] (get_signal) from [<c001bf28>] (do_signal+0x84/0x3a0)
[<c001bf28>] (do_signal) from [<c0017a94>] (do_work_pending+0xb8/0xc8)
[<c0017a94>] (do_work_pending) from [<c0014f30>] (slow_work_pending+0xc/0x20)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Al principio, me preguntaba si esto no estaba relacionado con SELinux. Intenté arrancar el núcleo con:
selinux=0 enforcing=0
... pero no hizo absolutamente ninguna diferencia.
¿Qué estoy haciendo mal? ¿Y qué significa este error?
Actualizaciones
También he intentado lo siguiente, sin suerte:
- Traté de compilar con y sin
CONFIG_VFP
habilitar - Agregué
CONFIG_DEVTMPFS
yCONFIG_DEVTMPFS_MOUNT
- La aplicación de este parche y permitiendo
CPU_V6
,CONFIG_MMC_BCM2835
, yCONFIG_MMC_BCM2835_DMA
- Usando la
gcc-linaro-arm-linux-gnueabihf-raspbian
cadena de herramientas Compilar un programa C simple con la cadena de herramientas y luego pasar su ruta al núcleo a través de
init=
trabajos, lo que me hace creer que hay una discrepancia entre los formatos binariosfile <sample program>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=e5ec8884499c51b248df60aedddfc9acf72cdbd4, not stripped
file <file from the image>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3e92423821f3325f8cb0ec5d918a7a1c76bbd72c, stripped`
Compilé este sencillo programa en C con la cadena de herramientas:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... y lo copié /root
en la imagen, cambiando el init=
parámetro de arranque a /root/simple
. Esto me da lo siguiente al arrancar:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Parece que se está ahogando con la execv()
llamada.
fuente
cat .config | grep CONFIG_VFP
cedeCONFIG_VFP=y
: parece que está habilitado.CONFIG_VFP
y no hay diferencia.versatilepb
es una CPU ARM926, que es más antigua que la ARM1176 del RPi, por lo que los binarios de Raspbian pueden estar usando alguna otra característica que no se emula. De unixmen.com/emulating-raspbian-using-qemu , ¿-cpu arm1176
ayuda?Respuestas:
También he intentado arrancar imágenes ARM con QEMU sin éxito confiable. Lamento decir que tendrá que usar hardware real para trabajar con un sistema operativo ARM, o esperar pacientemente a que los desarrolladores creen un emulador más confiable para ARM.
Es diciembre de 2018, y todavía hay problemas con
qemu-system-arm
.Pude arrancar Raspbian Jessie en un emulador QEMU usando un Ubuntu 18 Bionic recién instalado, sin embargo, no era estable para mi trabajo, así que tuve que dejarlo para hardware real. Se congelaría con frecuencia.
qemu-system-arm
no funcionaba en mi sistema operativo, así que usé Virtualbox para instalar Ubuntu Bionic y dentro de Bionic instalé Raspbian con QEMU.Seguí este tutorial: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Buena suerte
fuente
Sé que es una pregunta un tanto antigua, pero como todavía no hay buenas respuestas para probar imágenes de Raspberry Pi con QEMU, permítanme aportar una respuesta parcial.
Quería usar la imagen raspi3 de Ubuntu 16.04 con QEMU. Lo descargué, lo extraje, monté la partición de arranque, obtuve el archivo vmlinuz y el archivo initrd, y ... qemu-system-arm -M blabla -cpu ... -kernel ... no funciona. Pantalla en negro.
Luego, usar un kernel-qemu-4.4.34-jessie desde aquí con la imagen xenial / rootfs condujo al mismo problema de "inicio asesinado" que usted tiene.
Pero dado que estoy usando un buen núcleo conocido, y dado que su simple programa C vinculado estáticamente funciona, es probable que el problema solo surja cuando uno usa el vinculador dinámico. (Y el enlazador no es particularmente sensible a los núcleos, porque el ld-2.24 del último raspbian basado en debian9 (estiramiento) funciona bien en un núcleo basado en 4.4 debian8 (jessie).)
Incluso después de copiar los archivos que funcionan en / con la imagen "jessie" en la imagen xenial de ubuntu, solo recibí un extraño error de "preinit de llamada: KE".
Ah, y cualquiera que esté buscando compilar un núcleo para una Raspberry Pi, debería consultar este sitio, que hace referencia directa a los documentos / procedimientos " oficiales ".
fuente
El kernel de Linux ya no ejecuta init, sino que ejecuta systemd, que es como init pero con características un poco más avanzadas y capacidades de multitarea adicionales, aunque contra la filosofía de unix, systemd es útil.
fuente