Comment émuler le Raspberry Pi 2 sur QEMU?

Il y a quelque temps, j’ai imité le Raspberry Pi après cet article , mais cette approche a plusieurs problèmes:

  1. C’est très lent.
  2. La solution d’affichage est limitée à 800×600.
  3. Vous ne pouvez pas émuler plus de 256 Mo de RAM.

De plus, il n’y a pas d’émulation pour le nouveau Broadcom BCM2836 ou pour tout autre processeur basé sur arm7 dans Qemu . Cependant, il y a plusieurs raisons, pourquoi il serait intéressant d’émuler le Raspberry Pi. Je m’intéresse donc à tous les conseils qui me poussent dans la bonne direction pour obtenir une émulation Raspberry Pi 2 fonctionnelle utilisant Qemu ou tout autre logiciel d’émulation sous Linux.

Si vous êtes à l’aise pour construire qemu, vous pouvez trouver un support pour l’émulation du système pi2 ici: https://github.com/0xabu/qemu . Ce n’est pas particulièrement rapide, et les émulations de l’appareil sont incomplètes, mais vous pouvez redimensionner la RAM et le framebuffer.

Il existe de brèves instructions pour démarrer Raspbian à la fin de https://github.com/0xabu/qemu/wiki

Si vous voulez exécuter un robot de compilation Raspberry Pi 2 ou quelque chose de similaire, vous devriez jeter un oeil à l’exécution de Qemu en mode utilisateur / statique . J’ai essayé ceci en utilisant Linux dans une machine virtuelle, c’est assez rapide comparé à l’émulation du système Qemu. Malheureusement, il n’émule que le CPU, vous ne pourrez donc pas tester les jeux ou Wayland / Weston.

J’ai pu construire un kernel pour mon Pi 2 en une heure environ en utilisant cette méthode.

Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2016-05-27, Noyau vanille

entrer la description de l'image ici

  1. Comstackr QEMU 2.9.0 depuis la source:

     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. Téléchargez l’image et extrayez le kernel et dts à partir de celui-ci:

    1. Téléchargez l’image et décompressez-la:

       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. Montez la deuxième image de la partition. Le plus simple est:

       sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img 

      Cela ne fonctionne qu’avec la dernière mise à jour sur Ubuntu 16.04, d’autres méthodes sur: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Cela imprime un périphérique en boucle, par exemple:

       /dev/loop0 

      alors on fait:

       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 
  3. Courir:

     ./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 \ ; 

Vous pouvez ensuite vous connecter sur le terminal qui s’affiche sur votre terminal hôte.

Limitations actuelles:

  • -M raspi2 été ajouté dans QEMU 2.6.0 et Ubuntu 16.04 ne possède que QEMU 2.5.0, nous devons donc comstackr QEMU à partir des sources. Mais ce n’est pas difficile.
  • L’interface graphique affiche mais ne répond pas à la souris / au clavier, testée à la fois sur SDL et VNC. Mais CLI fonctionne parfaitement. Ainsi, vous pourriez aussi bien utiliser l’image Lite qui a une interface graphique pour le moment.
  • pas de mise en réseau

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, kernel modifié

Cette méthode utilise -M versatilepb qui est présent sur QEMU 2.5.0 d’Ubuntu 16.04.

L’inconvénient est que vous devez télécharger un kernel modifié (voir https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel ), et modifiez l’image. moins représentatif du système réel.

  1. Télécharger: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Nous sélectionnons 4.4.12 puisque c’est la version du kernel dans l’image Raspbian.

    Le processus de génération de cet object blob est décrit dans le référentiel à l’ adresse suivante : https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Pourquoi cette image supplémentaire du kernel est-elle nécessaire: https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  2. Modifiez l’image Raspbian comme mentionné à l’ adresse suivante : https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c

    Résumé:

    1. Montez l’image comme nous l’avons fait pour -M raspi2 , mais utilisez la deuxième partition au lieu de la première:

       sudo mount /dev/loop0p2 /mnt/rpi 
    2. Modifier l’image:

       # 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. Courir:

     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 

[échoué] Ubuntu 17.04, QEMU 2.8.0-M raspi2, Raspbian 27/05/2016, kernel vanille

Sur cette nouvelle version d’Ubuntu, QEMU 2.8.0 est la version par défaut, nous n’avons donc pas besoin de comstackr QEMU depuis la source pour -M raspi2 . Cependant, 2.8.0 se bloque au démarrage après le message:

 Console: switching to colour frame buffer device 100x30 

Cela montre à quel point -M raspi2 est instable.

[échec] Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2017-08-16, kernel de vanille

Sur cette nouvelle image, en utilisant la même méthode pour le 27/05/2016, le kernel panique au démarrage avec:

 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 sur QEMU

https://github.com/bztsrc/raspi3-tutorial est un bon ensemble d’exemples qui fonctionnent uniquement sur QEMU, ultraquick se lance sur: https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-pour-metal-framboise-pi-images / 85135 # 85135