Ich habe das Raspbian-Image auf dieser Seite heruntergeladen. Ich versuche, einen Kernel zu kompilieren, der verwendet werden kann, um das Image innerhalb von qemu zu booten.
Ich habe die Linux-Kernel-Quelle von kernel.org heruntergeladen und ausgeführt:
make versatile_defconfig
make menuconfig
Ich habe dann die folgenden Features 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 habe auch das Disk-Image geloopt und:
/etc/ld.so.preload
auskommentiert/etc/fstab
angepasst um/dev/sda1
zu verwenden und/dev/sda2
Ich habe dann das Image ausgehä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 war in der Lage, das Dateisystem zu mounten, aber es geriet sofort in Schwierigkeiten:
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 zusammenhängt. 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?
Aktualisierungen
Ich habe auch Folgendes versucht, ohne Glück:
- Ich habe versucht, mit und ohne
CONFIG_VFP
zu kompilieren aktiviert - Ich habe
CONFIG_DEVTMPFS
hinzugefügt undCONFIG_DEVTMPFS_MOUNT
- Diesen Patch anwenden und
CPU_V6
aktivieren ,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Mit
gcc-linaro-arm-linux-gnueabihf-raspbian
Werkzeugkette -
Ein einfaches C-Programm mit der Toolchain kompilieren und dann seinen Pfad über
init=
an den Kernel übergeben funktioniert – was mich glauben lässt, dass es eine Diskrepanz zwischen Binärformaten gibt-
file <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`
-
diff des ELF-Headers
-
Ich habe dieses einfache C-Programm mit der Toolchain kompiliert:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
…und nach /root
kopiert im Bild, Ändern des init=
Boot-Parameter nach /root/simple
. Das gibt mir beim Booten folgendes:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Es scheint an execv()
zu ersticken anrufen.
Akzeptierte Antwort:
Ich habe auch versucht, ARM-Images mit QEMU zu booten, ohne zuverlässigen Erfolg. Es tut mir leid zu sagen, dass Sie echte Hardware verwenden müssen, um mit einem ARM-Betriebssystem zu arbeiten, oder geduldig darauf warten, dass Entwickler einen zuverlässigeren Emulator für ARM entwickeln.
Verwandte:Nach Dateien suchen, deren Pfadnamen mehrere Wörter ohne bestimmte Reihenfolge zwischen ihnen enthalten?
Es ist Dezember 2018 und es gibt immer noch Probleme mit qemu-system-arm
.
Ich konnte Raspbian Jessie auf einem QEMU-Emulator mit einem frisch installierten Ubuntu 18 Bionic booten, aber es war für meine Arbeit nicht stabil, also musste ich es für echte Hardware belassen. Es würde häufig einfrieren.
qemu-system-arm
funktionierte nicht auf meinem Betriebssystem, also habe ich Virtualbox verwendet, um Ubuntu Bionic zu installieren, und innerhalb von Bionic habe ich Raspbian mit QEMU installiert.
Ich habe dieses Tutorial befolgt:https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Viel Glück