Wenn Sie einen Raspberry Pi 2-Build-Bot oder ähnliches ausführen möchten, sollten Sie sich die Ausführung von Qemu im Benutzer-/statischen Modus ansehen. Ich habe dies mit Linux in einer virtuellen Maschine versucht, es ist ziemlich schnell im Vergleich zur Qemu-Systememulation. Leider emuliert es nur die CPU, sodass Sie keine Spiele oder Wayland/Weston testen können.
Mit dieser Methode konnte ich in ungefähr einer Stunde einen Kernel für meinen Pi 2 erstellen.
Wenn Sie mit dem Erstellen von qemu vertraut sind, finden Sie hier Unterstützung für die pi2-Systememulation:https://github.com/0xabu/qemu. Es ist nicht besonders schnell und die Geräteemulationen sind unvollständig, aber Sie können die Größe von RAM und Framebuffer ändern.
Eine kurze Anleitung zum Booten von Raspbian gibt es am Ende von https://github.com/0xabu/qemu/wiki
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, Vanilla-Kernel
-
Kompilieren Sie QEMU 2.9.0 aus der Quelle:
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`
-
Image herunterladen und Kernel und dts daraus extrahieren:
-
Laden Sie das Bild herunter und entpacken Sie 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
-
Mounten Sie das zweite Image der Partition. Der einfachste Weg ist:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Dies funktioniert nur mit dem neuesten
losetup
unter Ubuntu 16.04, andere Methoden unter:https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Dies gibt ein Loop-Gerät aus, z. B.:
/dev/loop0
also tun wir:
sudo mkdir /mnt/rpi sudo mount /dev/loop0p1 /mnt/rpi cp /mnt/rpi/kernel7.img . cp /mnt/rpi/bcm2709-rpi-2-b.dtb . sudo umount /mnt/rpi sudo losetup -d /dev/loop0
-
-
Ausführen:
./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, also müssen wir QEMU aus dem Quellcode kompilieren. Aber das ist nicht schwer.- Die GUI wird angezeigt, reagiert aber nicht auf die Maus/Tastatur, getestet sowohl auf SDL als auch auf VNC. Aber CLI funktioniert trotzdem tadellos. Sie können also genauso gut das Lite-Image verwenden, das vorerst eine Go-GUI hat.
- keine Vernetzung
Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, geänderter Kernel
Diese Methode verwendet -M versatilepb
die auf QEMU 2.5.0 von Ubuntu 16.04 vorhanden ist.
Der Nachteil ist, dass Sie einen modifizierten Kernel herunterladen müssen (siehe https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) und das Image so ändern müssen, wie es ist weniger repräsentativ für das reale System.
-
Herunterladen: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 wird im Repository unter https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
beschriebenWarum dieses zusätzliche Kernel-Image benötigt wird:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel
-
Ändern Sie das Raspbian-Image wie erwähnt unter: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
-M raspi2
getan haben , aber verwenden Sie 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
-
-
Ausführen:
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, Vanilla-Kernel
Auf diesem neueren Ubuntu ist QEMU 2.8.0 der Standard, sodass wir QEMU nicht aus dem Quellcode für -M raspi2
kompilieren müssen . 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
ist immer noch.
[fehlgeschlagen] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, Vanilla-Kernel
Auf diesem neueren Image gerät der Kernel mit der gleichen Methode wie am 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)
TODO:sschoof erwähnt diesen rootdelay=1
löst das, muss ich ausprobieren.
bztsrc/raspi3-tutorial
RPI3-Bare-Metal auf QEMU
https://github.com/bztsrc/raspi3-tutorial ist eine gute Sammlung von Beispielen, die einfach auf QEMU funktionieren, ultraschneller Einstieg unter:https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135