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.
cat .config | grep CONFIG_VFP
cede CONFIG_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?