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
-
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`
-
Téléchargez l'image et extrayez-en le noyau et le dts :
-
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
-
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#496576Cela 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
-
-
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.
-
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
-
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é :
-
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
-
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
-
-
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