Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, noyau vanille
Pas:
Compilez QEMU 2.9.0 à partir de 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-y le noyau et les 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 la dernière version losetup
d'Ubuntu 16.04, d'autres méthodes sur: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Ceci imprime un périphérique en boucle, par exemple:
/dev/loop0
nous faisons donc:
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
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 affiche mais ne répond pas à la souris / clavier, testé sur SDL et VNC. Mais CLI fonctionne parfaitement cependant. Donc, vous pourriez aussi bien utiliser l'image Lite qui a maintenant une interface graphique.
- pas de réseautage
Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, noyau modifié
Cette méthode utilise -M versatilepb
ce qui est présent sur la QEMU 2.5.0 d'Ubuntu 16.04.
L'inconvénient est que vous devez télécharger un noyau modifié (voir Émuler avec Qemu: pourquoi le noyau supplémentaire? ), Et modifier l'image, de sorte qu'elle soit moins représentative du système réel.
Téléchargement: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Nous choisissons 4.4.12
puisque c'est la version du noyau dans l'image Raspbian.
Le processus pour générer cet objet blob du noyau est décrit dans le référentiel à l' adresse : https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Pourquoi cette image de noyau supplémentaire est-elle nécessaire? Émuler avec Qemu: pourquoi le noyau supplémentaire?
Modifiez l'image Raspbian comme mentionné sur: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Sommaire:
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
Modifiez 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
[Échec] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, noyau vanilla
Sur ce Ubuntu plus récent, 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
encore instable .
[Échec] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, vanilla kernel
Sur cette image plus récente, en utilisant la même méthode pour 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)
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, ultra rapide pour commencer: Comment faire une émulation QEMU pour des images de Raspberry Pi en métal nu