Ich habe das Raspbian-Bild auf dieser Seite heruntergeladen . Ich versuche einen Kernel zu kompilieren, mit dem das Image in qemu gebootet werden kann.
Ich habe die Linux- Kernelquelle von kernel.org heruntergeladen und ausgeführt:
make versatile_defconfig
make menuconfig
Ich habe dann die folgenden Funktionen zum Kernel hinzugefügt:
- PCI-Unterstützung (CONFIG_PCI)
- SCSI-Geräteunterstützung (CONFIG_SCSI)
- SCSI-Festplattenunterstützung (CONFIG_BLK_DEV_SD)
- SYM53C8XX Version 2 SCSI-Unterstützung (CONFIG_SCSI_SYM53C8XX_2)
- Das Extended 3 (ext3) Dateisystem (CONFIG_EXT3_FS)
- Das Extended 4 (ext4) Dateisystem (CONFIG_EXT4_FS)
Ich schleife auch das Disk-Image und:
- auskommentiert
/etc/ld.so.preload
- angepasst
/etc/fstab
zu verwenden/dev/sda1
und/dev/sda2
Ich habe dann das Image abgehängt und versucht, die Maschine zu starten mit:
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"
Der Kernel konnte das Dateisystem mounten, es gab jedoch sofort einige Probleme:
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
Zuerst habe ich mich gefragt, ob das nicht mit SELinux zu tun hat. Ich habe versucht den Kernel zu booten mit:
selinux=0 enforcing=0
... aber es machte absolut keinen Unterschied.
Was mache ich falsch? Und was bedeutet dieser Fehler?
Aktualisierung
Ich habe auch Folgendes ohne Glück versucht:
- Ich habe versucht, mit und ohne
CONFIG_VFP
aktiviert zu kompilieren - Ich fügte hinzu
CONFIG_DEVTMPFS
undCONFIG_DEVTMPFS_MOUNT
- Die Anwendung dieses Patches und ermöglicht
CPU_V6
,CONFIG_MMC_BCM2835
&CONFIG_MMC_BCM2835_DMA
- Mit Hilfe der
gcc-linaro-arm-linux-gnueabihf-raspbian
Toolchain Kompilieren Sie ein einfaches C-Programm mit der Toolchain und übergeben Sie den Pfad über
init=
works an den Kernel. Dies lässt mich vermuten, dass es eine Diskrepanz zwischen den Binärformaten gibtfile <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`
Ich habe dieses einfache C-Programm mit der Toolchain kompiliert :
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... und kopierte es /root
in das Image und änderte den init=
Boot-Parameter in /root/simple
. Dadurch erhalte ich beim Booten Folgendes:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Es scheint beim execv()
Anruf zu ersticken .
cat .config | grep CONFIG_VFP
ergibt CONFIG_VFP=y
- scheint aktiviert zu sein.
CONFIG_VFP
und es macht keinen Unterschied.
versatilepb
Da es sich um eine ARM926-CPU handelt, die älter als die ARM1176 des RPi ist, verwenden Raspbian-Binärdateien möglicherweise eine andere Funktion, die nicht emuliert wird. Von unixmen.com/emulating-raspbian-using-qemu , tut -cpu arm1176
Hilfe?