GNU/Linux >> Tutoriels Linux >  >> Linux

Comment émuler le Raspberry Pi 2 sur QEMU ?

Si vous souhaitez exécuter un bot de construction Raspberry Pi 2 ou quelque chose de similaire, vous devriez jeter un coup d'œil à l'exécution de Qemu en mode utilisateur/statique. J'ai essayé cela en utilisant Linux dans une machine virtuelle, c'est assez rapide par rapport à l'émulation du système Qemu. Malheureusement, il n'émule que le processeur, vous ne pourrez donc pas tester de jeux ou Wayland/Weston.

J'ai pu créer un noyau pour mon Pi 2 en environ une heure en utilisant cette méthode.


Si vous êtes à l'aise avec la construction de 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 périphérique sont incomplètes, mais vous pouvez redimensionner la RAM et le framebuffer.

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


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

  1. Compilez QEMU 2.9.0 à partir des sources :

    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-en le noyau et le dts :

    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 moyen le plus simple est :

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

      Cela ne fonctionne qu'avec le dernier losetup sur Ubuntu 16.04, 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
      

      donc nous faisons :

      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. Exécuter :

    ./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 a été ajouté dans QEMU 2.6.0, et Ubuntu 16.04 n'a que QEMU 2.5.0, nous devons donc compiler QEMU à partir de la source. Mais ce n'est pas difficile.
  • l'interface graphique s'affiche mais ne répond pas à la souris/au clavier, testée à la fois sur SDL et VNC. Mais CLI fonctionne parfaitement cependant. Vous pouvez donc aussi bien utiliser l'image Lite qui a une interface graphique pour l'instant.
  • pas de mise en réseau

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

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

L'inconvénient est que vous devez télécharger un noyau modifié (voir https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel), et modifier l'image, il est donc 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 puisqu'il s'agit de la version du noyau dans l'image Raspbian.

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

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

  2. Modifiez l'image Raspbian comme mentionné sur :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 le -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. Exécuter :

    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
    

[échec] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, noyau vanille

Sur ce nouvel Ubuntu, QEMU 2.8.0 est la valeur par défaut, nous n'avons donc pas besoin de compiler QEMU à partir de 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 est toujours.

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

Sur cette image plus récente, en utilisant la même méthode pour le 2016-05-27, le noyau 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)

À FAIRE :sschoof mentionne que rootdelay=1 résout ce problème, je dois l'essayer.

bztsrc/raspi3-tutorial Métal nu RPI3 sur QEMU

https://github.com/bztsrc/raspi3-tutorial est un bon ensemble d'exemples qui fonctionnent uniquement sur QEMU, démarrage ultra rapide sur :https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135


Linux
  1. Comment Linux est arrivé sur le mainframe

  2. Comment allumer et éteindre le Raspberry Pi [Astuce absolue pour débutant]

  3. Comment utiliser la commande basename ?

  4. Comment installer R 3.3.1 dans le propre répertoire ?

  5. Comment faire pivoter l'écran sur un Raspberry Pi 3

Comment installer Docker sur Raspberry Pi

Comment installer le système d'exploitation Raspbian sur Raspberry Pi

Comment configurer le joli nom d'hôte

Comment configurer votre Raspberry Pi OS pour l'utiliser pour la première fois

Comment faire un flash LED avec le Raspberry Pi

Comment augmenter la résolution de l'écran visualisé sur QEMU / KVM ?