Comment émuler Raspberry Pi Raspbian avec QEMU?
J'essaie d'émuler un Raspberry Pi avec la Raspian OS à l'aide de QEMU. J'ai essayé plusieurs approches décrites sur internet, mais sans aucun succès.
J'ai compris que j'avais besoin de patcher un Noyau Linux à côté de l'exploitation désiré. Dans mon cas j'ai choisi Rasbian Lite avec un Noyau 4.4:
wget https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-05-31/2016-05-27-raspbian-jessie-lite.zip
unzip 2016-05-27-raspbian-jessie-lite.zip
rm 2016-05-27-raspbian-jessie-lite.zip
Ensuite, j'ai charger un Noyau de https://www.kernel.org/:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.16.tar.gz
tar -xzf linux-4.4.16.tar.gz
rm linux-4.4.16.tar.gz
Maintenant de la croix de la compilation du Noyau:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
cd linux-4.4.16
make vexpress_defconfig
make all
cd ..
Maintenant, je peux copier l'image de démarrage, qui est une image compressée du noyau que l'auto-extraits de RAM, de mon espace de travail:
cp linux-4.4.16/arch/arm/boot/zImage zImage
et lancer QEMU
qemu-system-arm -kernel zImage -M vexpress-a9 -m 1024 -cpu cortex-a9 -no-reboot -serial stdio -hda 016-05-27-raspbian-jessie-lite.img -append "root=/dev/sda2 rootfstype=ext4"
Mais tout ce que je vois est d'un noir rempli de QEMU-fenêtre. 🙁
Je pense que le problème est d'obtenir le bon Noyau. La copie de certains des Grains de l'Internet n'a jamais conduit à la réussite, car ils ne sont pas adaptés pour le système d'exploitation.
Comment puis-je construire/patch du Noyau côté de l'OS (sans avoir à télécharger un existant) et comment les utiliser QEMU correctement?
Merci d'avance
Alex
2ème approche
Je charge un kernel-qemu
à partir d'ici https://www.dropbox.com/s/g8u93xblz1v1ly0/kernel-qemu?dl=0 et exécuter QEMU:
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2" -hda 2016-05-27-raspbian-jessie-lite.img
Ce qui m'amène à la sortie suivante:
Et il fait sens pour moi parce que le Noyau est 3.10.25 et âgés de plus de Raspbian Jessie avec un Noyau 4.4.16.
Avec qemu-noyau de https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.4.12-jessie
qemu-system-arm -kernel kernel-qemu-4.4.12-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2016-05-27-raspbian-jessie-lite.img
J'ai obtenu ce résultat similaire:
Un nouvel essai avec un nouveau noyau-qemu 4.4.16:
- Copie de construire-kernel-qemu de https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/master/tools et ajoutez la ligne suivante à la caisse de la version du Kernel 4.4.16:
git checkout b05965f284db3e086022f4e318e46cb5bffb1376
- Exécuter
build-kernel-qemu
pour la compilation du noyaush build-kernel-qemu
- Exécuter QEMU
qemu-system-arm -kernel kernel-qemu -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2016-05-27-raspbian-jessie-lite.img
Le résultat:
source d'informationauteur Alex44
Vous devez vous connecter pour publier un commentaire.
Vous devez développer l'Image Raspbian fichier avant de commencer à
Monter le Raspbian fichier Image avec kpartx (peut-être les installer kpartx)
Modifier le /etc/fstab et commentez la MMCBLK monte
Modifier /etc/ld..précharge et commentez les lignes ...
Démonter et de détruire des boucles à partir de kpartx
Obtenir le Qemu noyau correspondant à l'image Raspbian ici...
https://github.com/dhruvvyas90/qemu-rpi-kernel
J'ai utilisé cette commande pour réussir à imiter Raspbian Jessie
Vous avez besoin d'un noyau modifié pour fonctionner dans QEMU, parce que le raspberry PI matériel n'est pas disponible dans QEMU. C'est pourquoi votre première approche a échoué.
Votre deuxième approche utilise un noyau correctement patché pour fonctionner sur la planche polyvalente (pris en charge par QEMU), donc ce qui est bon, mais le noyau 3.x est trop vieux pour une moderne Raspbian. En principe, votre dernière approche devrait avoir travaillé.
Je recommande cette guide mis à jour (février 2017), je l'ai testé avec un noyau 4.4 et il fonctionne tout de suite.
J'ai eu à utiliser
format=raw,file=$IMG
option pour éviter un QEMU avertissement.Vous n'avez pas besoin de commentaire
/etc/fstab
vous pouvez ajouter à/etc/udev/rules.d/90-qemu.rules
Aussi, La ld..précharge chose est vieux et ne s'applique plus
Le script fourni sur ce guide fait tout cela pour vous, et fournit également de l'accès réseau à votre raspbian par le partage de votre interface réseau avec raspbian.
Ubuntu 16.04 hôte, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, la vanille noyau
Avantages:
-M raspi2
nous pouvons utiliser le noyau par défaut, le système est donc le plus représentatifLimitations:
-M raspi2
a été ajouté dans QEMU 2.6.0, et Ubuntu 16.04 a seulement QEMU 2.5.0, nous avons donc à compiler QEMU à partir de la source. Mais ce n'est pas difficile.Suit:
Compiler QEMU 2.9.0 à partir de la source:
Télécharger l'image et d'en extraire le noyau et dts:
Télécharger l'image et le décompresser:
Monter la deuxième image de la partition. La façon la plus simple est:
Cela fonctionne uniquement avec la dernière
losetup
sur Ubuntu 16.04, d'autres méthodes: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Il imprime une boucle de l'appareil, par exemple:
de sorte que nous n':
Exécuter:
Vous pouvez alors vous connecter sur le terminal qui affiche sur votre terminal hôte.
[echec] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, la vanille noyau
Sur cette plus récente d'Ubuntu, QEMU 2.8.0 est la valeur par défaut, de sorte que nous n'avons 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:Cela montre comment instable
-M raspi2
est toujours.[echec] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, la vanille noyau
Sur cette nouvelle image, en utilisant la même méthode pour 2016-05-27, les paniques du noyau au démarrage avec:
bztsrc/raspi3-tutorial
RPI3 métal nu sur QEMUhttps://github.com/bztsrc/raspi3-tutorial est une bonne série d'exemples qui vient de travailler sur QEMU, ultraquick prise en main: https://raspberrypi.stackexchange.com/questions/34733/how-to-do-qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135
J'ai eu un problème similaire avec un ubuntu image.
J'ai aussi appliqué les modifications décrites dans @Michael Connors réponse, alors que je vois le démarrage du système.
Vous pouvez ajouter ce qui suit dans
-append=""
pour voir ce qui se passe dans votre cas:qemu-system-arm ... -serial stdio -append="... console=ttyAMA0,115200 loglevel=8"