Ich versuche, verschiedenen Anleitungen im Internet zu folgen, um Raspberry Pi auf meinem Fedora 22-Computer zu emulieren. Ich habe diese Frage gefunden: Raspbian mit QEMU emulieren und damit Kernel-Qemu finden , um einen Kernel zu finden. Ich habe 2015-09-24-raspbian-jessie.img
von den guten Leuten bei Raspberry Pi heruntergeladen .
Wenn ich versuche zu rennen, qemu-system-arm
bekomme ich eine Kernel-Panik. Fehlt mir etwas?
Hier ist die qemu-system-arm
Befehlszeile, die ich eingegeben habe:
qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22
Gefolgt von den Kernelnachrichten:
sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <[email protected]>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)
Antworten:
Wie @dastaan sagte, muss die Kernel-Version mit der img-Datei übereinstimmen. Ich habe versucht, eine 4.1-Kernel-Image-Datei mit einem 3.18-Kernel zu verwenden.
Jetzt, wo ich das richtige Bild verwende, funktioniert es.
Vielen Dank!
Bearbeiten: Es ist ziemlich einfach, dies zum Laufen zu bringen: Holen Sie sich das Bild von https://github.com/dhruvvyas90/qemu-rpi-kernel/ und laden Sie das entsprechende Raspian-Bild, das Sie möchten, unter https://www.raspberrypi.org/ herunter. downloads / raspbian / . Derzeit sind Jessie und Wheezy an beiden Orten aktiv, es gibt jedoch keine Garantie dafür, dass der entsprechende Kernel in Zukunft auf dieser Github-Site verfügbar sein wird. Auf jeden Fall war ich selbst nicht so beeindruckt von der Geschwindigkeit, also versuche ich, einen echten Pi auf den kabelgebundenen Netzwerkanschluss meines Laptops zu stecken und ihn über einen 5200-mAh-Handy-Zusatzakku mit VNC auf dem Laptop zu betreiben ein Bildschirm.
Ich habe Jessie nicht zur Arbeit gebracht. Das war das Problem. Ich hatte einen Wheezy-Kernel und ein Jessie-Image, aber keinen Jessie-Kernel.
quelle
Schauen Sie sich gerne meinen QEMU-fähigen Kernel an: https://github.com/diederikdehaas/raspbian-kernel
In den Commit-Nachrichten finden Sie detaillierte Beschreibungen, was und wie sich die Dinge geändert haben.
Das meiste davon basierte auf diesem Artikel: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/
quelle
Die meisten Anleitungen sind veraltet und enthalten fehlerhafte Links. Sie müssen einen gepatchten Kernel verwenden, der der von Ihnen verwendeten Raspbian-Version entspricht.
Das folgende Handbuch ist ab Februar 2017 verfügbar. Es enthält ein Skript, mit dem das Raspbian-Image für die Ausführung unter QEMU geändert und Ihre Netzwerkverbindung automatisch für Raspbian freigegeben wird.
https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/
quelle
Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2016-05-27, Vanillekern
Schritte:
Kompilieren Sie QEMU 2.9.0 aus dem Quellcode:
Lade das Bild herunter und extrahiere den Kernel und dts daraus:
Lade das Bild herunter und entpacke es:
Hängen Sie das zweite Image der Partition ein. Der einfachste Weg ist:
Dies funktioniert nur mit
losetup
Ubuntu 16.04, andere Methoden finden Sie unter: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Dies druckt ein Loop-Gerät, zB:
so machen wir es:
Lauf:
Sie können sich dann an dem Terminal anmelden, das auf Ihrem Host-Terminal angezeigt wird.
Aktuelle Einschränkungen:
-M raspi2
wurde in QEMU 2.6.0 hinzugefügt, und Ubuntu 16.04 hat nur QEMU 2.5.0, daher müssen wir QEMU aus dem Quellcode kompilieren. Das ist aber nicht schwer.Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, geänderter Kernel
Diese Methode verwendet
-M versatilepb
die auf der QEMU 2.5.0 von Ubuntu 16.04 vorhandene.Der Nachteil ist, dass Sie einen modifizierten Kernel herunterladen müssen (siehe Emulieren mit Qemu: Warum der zusätzliche Kernel? ) Und das Image modifizieren müssen, damit es weniger repräsentativ für das reale System ist.
Download: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Wir wählen,
4.4.12
da dies die Kernel-Version im Raspbian-Image ist.Der Prozess zum Generieren dieses Kernel-Blobs ist im Repository unter https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools beschrieben
Warum wird dieses zusätzliche Kernel-Image benötigt: Emulieren mit Qemu: Warum der zusätzliche Kernel?
Ändern Sie das Raspbian-Image wie folgt: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Zusammenfassung:
Hängen Sie das Image genauso ein, wie wir es für das getan haben
-M raspi2
, verwenden Sie jedoch die zweite Partition anstelle der ersten:Bearbeiten Sie das Bild:
Lauf:
[fehlgeschlagen] Ubuntu 17.04, QEMU 2.8.0-M raspi2, Raspbian 2016-05-27, Vanillekernel
Auf diesem neueren Ubuntu ist QEMU 2.8.0 der Standard, daher müssen wir QEMU nicht aus dem Quellcode für kompilieren
-M raspi2
. 2.8.0 hängt jedoch beim Booten nach der Meldung:Dies zeigt, wie instabil
-M raspi2
noch ist.[fehlgeschlagen] Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2017-08-16, Vanillekernel
Auf diesem neueren Image kommt der Kernel nach der gleichen Methode für den 27.05.2016 beim Booten in Panik mit:
bztsrc/raspi3-tutorial
RPI3 Bare Metal auf QEMUhttps://github.com/bztsrc/raspi3-tutorial ist eine gute Sammlung von Beispielen, die nur mit QEMU funktionieren. Eine schnelle Einführung finden Sie unter: Vorgehensweise bei der QEMU-Emulation für Bare-Metal-Raspberry-Pi-Images
quelle
losetup
ist zu kompliziert. Sie können stattdessen einfach die Option "fdisk -l your-image.img
Versatz zur Partition in" verwenden und dann verwenden .mount
-o loop,offset=$((512*YOUR_OFFSET))
Sie können meinen benutzerdefinierten Kernel (4.1.7) für Raspbian Jessie auf meinem Github polaco1782 herunterladen . Befolgen Sie die Anweisungen in den Dokumentdateien.
quelle
fstab
mmcblk-Einträgen lösen .