Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2016-05-27, Vanillekern
Schritte:
Kompilieren Sie QEMU 2.9.0 aus dem Quellcode:
sudo apt-get build-dep qemu-system-arm
git clone --recursive git://git.qemu-project.org/qemu.git
cd qemu
git checkout v2.9.0
./configure
make `nproc`
Lade das Bild herunter und extrahiere den Kernel und dts daraus:
Lade das Bild herunter und entpacke es:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
Hängen Sie das zweite Image der Partition ein. Der einfachste Weg ist:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
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#496576
Dies druckt ein Loop-Gerät, zB:
/dev/loop0
so machen wir es:
sudo mkdir /mnt/rpi
sudo mount /dev/loop0p1 /mnt/rpi
cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
sudo umount /mnt/rpi
sudo losetup -d /dev/loop0
Lauf:
./arm-softmmu/qemu-system-arm \
-M raspi2 \
-append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
-cpu arm1176 \
-dtb bcm2709-rpi-2-b.dtb \
-sd 2016-05-27-raspbian-jessie.img \
-kernel kernel7.img \
-m 1G \
-smp 4 \
-serial stdio \
;
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.
- Die GUI zeigt an, reagiert aber nicht auf die Maus / Tastatur, die sowohl auf SDL als auch auf VNC getestet wurde. CLI funktioniert jedoch einwandfrei. Sie können also genauso gut das Lite-Image verwenden, das für den Moment als GUI fungiert.
- keine Vernetzung
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:
sudo mount /dev/loop0p2 /mnt/rpi
Bearbeiten Sie das Bild:
# Comment out the line present there with #
sudo vim /mnt/rpi/etc/ld.so.preload
# Comment out the lines of type: "/dev/mmcblk*"
sudo vim /mnt/rpi/etc/fstab
Lauf:
sudo apt-get install qemu-system-arm
qemu-system-arm \
-kernel kernel-qemu-4.4.12-jessie \
-cpu arm1176 \
-m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda 2016-05-27-raspbian-jessie.img
[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:
Console: switching to colour frame buffer device 100x30
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:
Please append a correct "root=" boot option; here are the available partitions:
...
[ 4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
bztsrc/raspi3-tutorial
RPI3 Bare Metal auf QEMU
https://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