Il y a quelque temps, j’ai imité le Raspberry Pi après cet article , mais cette approche a plusieurs problèmes:
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
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`
Téléchargez l’image et extrayez le kernel et dts à partir de celui-ci:
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 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
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. 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.
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
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é:
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
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
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