GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie emuliert man den Raspberry Pi 2 auf QEMU?

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

  1. 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`
    
  2. Image herunterladen und Kernel und dts daraus extrahieren:

    1. 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
      
    2. 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#496576

      Dies 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
      
  3. 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.

  1. 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

    beschrieben

    Warum dieses zusätzliche Kernel-Image benötigt wird:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  2. Ä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:

    1. 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
      
    2. 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
      
  3. 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


Linux
  1. Wie Linux auf den Mainframe kam

  2. Raspberry Pi ein- und ausschalten [absoluter Einsteiger-Tipp]

  3. Wie verwende ich den basename-Befehl?

  4. Wie installiere ich R 3.3.1 im eigenen Verzeichnis?

  5. Wie überprüfe ich HZ im Terminal?

So installieren Sie Docker auf dem Raspberry Pi

So installieren Sie Raspbian OS auf Raspberry Pi

So richten Sie den Pretty Hostnamen ein

So konfigurieren Sie Ihr Raspberry Pi OS, um es zum ersten Mal zu verwenden

Wie man mit dem Raspberry Pi eine LED zum Blinken bringt

Wie kann die angezeigte Bildschirmauflösung auf QEMU / KVM erhöht werden?