QEMU : émulation d'un Raspberry Pi (Linux ou Windows)

Pré-requis

Une machine sous UbuntuQEMU : pour Linux ou pour Windows. Assurez-vous que vous avez une version appropriée (ARM1176)Une image disque de la distribution choisie (Raspbian)

Préparation de l'environnement

Créer le répertoire de travail et s'y rendreTélécharger le noyau Linux :

$ wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu

Téléchargez et décompressez l'image disque .img dans le répertoire de travail.Toutes les opérations se feront dans ce répertoire.Vérifiez que vous avez tout :

Assurez-vous que vous avez les fichiers image kernel-qemu et vos fichiers image disque.

$ qemu-system-arm -cpu ?

La sortie devrait contenir arm1176.

Installation

Créez un répertoire qemu (par exemple dans votre home), allez-y et téléchargez-y le noyau de qemu :

$ mkdir qemu
cd qemu
wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu

Téléchargez l'image disque de la distribution pour le Raspi sur http://www.raspberrypi.org/downloads, décompressez le fichier zip (-> aaaa.mm.jj-wheezy.raspbian.img pour une raspbian) et enregistrez-la dans le répertoire qemu créé ci-dessus.

Raspian et Debian devraient fonctionner tout de suite, mais Arch Linux nécessite un peu de travail.
Installez le paquet qemu-system ou en ligne de commande :

$ sudo apt install qemu-system

Méthode graphique

Pour installer qemu et son GUI aqemu, installez le paquet aqemu ou en ligne de commande :

$ sudo apt-get install aqemu

Configuration

Nous allons maintenant monter la partition ext4 de l'image pour faire une petite modification sur le filesystem.

Pour connaître l'emplacement du début de cette partition, lancez la commande :

$ file aaaa.mm.jj-wheezy-raspbian.img
2014-01-07-wheezy-raspbian.img: x86 boot sector; partition 1: ID=0xc, starthead
130, startsector 8192, 114688 sectors; partition 2: I0x83, starthead 165, star
tsector 122880, 5662720 sectors, code offset 0xb8

Multipliez par 512 la valeur indiquée pour le secteur de début (ici, startsector 122880 -> * 512 = 6291456)

Montez la partition en donnant à l'offset la valeur calculée :

$ sudo mount aaaa.mm.jj-wheezy-raspbian.img -o offset=6291456 /mnt

Éditez avec les droits d'administration le fichier /mnt/etc/ld.so.preload pour ajouter un # en début de ligne :

#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so

Quittez l'éditeur.

(Facultatif) Créez avec les droits d'administration le fichier /etc/udev/rules.d/90-qemu.rules avec le contenu suivant : KERNEL=="sda", SYMLINK+="mmcblk0" KERNEL=="sda?", SYMLINK+="mmcblk0p%n" KERNEL=="sda2", SYMLINK+="root" -> le noyau voit le disque /dev/sda au lieu de /dev/mmcblk0. Cela va créer des liens symboliques pour être plus conforme à la vraie pi.
Démontez l'image :

$ sudo umount /mnt

Lancez Qemu avec l’image à émuler :

$ sudo qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -k fr -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -hda aaaa.mm.jj-wheezy-raspbian.img -redir tcp:5022::22

-kernel kernel-qemu-cpu arm1176Select CPU model (-cpu help for list and additional feature selection) -m 256permet de spécifier la quantité de mémoire vive pour le système émulé; ne mettez pas la taille totale de votre mémoire car il faut en laisser pour le système hôte. Par défaut, cette valeur est de 128. Set virtual RAM size to megs megabytes. Default is 128 MiB. Optionally, a suffix of “M” or “G” can be used to signify a value in megabytes or gigabytes respectively.-M versatilepb-no-reboot-serial stdioRedirect the virtual serial port to host character device standard input/output. The default device is vc in graphical mode and stdio in non graphical mode.-append “root=/dev/sda2 panic=1”-hda aaaa.mm.jj-wheezy-raspbian.imgsert à spécifier l'image de disque dur qui va servir pendant l'émulation; il peut aussi s'agir d'un périphérique ou d'une partition, comme /dev/hda1; Il y a aussi -hdb, -hdc, -hdd, pour simuler d'autres partitions, mais on ne peut pas utiliser -hdc en même temps que -cdrom. L'utilisation de partitions “réelles” présente des risques pour le disque dur, préférez les images. Use file as hard disk 0, 1, 2 or 3 image (see disk_images).-redir tcp:5022::22-k frclavier françaisAu premier lancement, il y a une erreur sur l’intégrité de la partition, puis vous vous retrouvez au prompt.

Attention c’est du qwerty !
Contrôler le disque :

$ fsck /dev/sda2

Puis arrêter le système :

$ halt

Une fois installé, AQEMU peut être lancé en sélectionnant Applications -> Emulateurs -> AQEMU dans le menu système.

Quand vous lancez AQEMU pour la première fois, le message suivant apparaît :

Utilisation

Lancez Qemu avec la commande (la même que pour la configuration) :

$ sudo qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -k fr -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -hda aaaa.mm.jj-wheezy-raspbian.img -redir tcp:5022::22

sous Windows, utilisez qemu-system-armw.exe lieu de qemu-system-arm N'essayez pas d'utiliser plus de 256 Mo de RAM, la valeur est codée en dur dans QEMU.
Vous vous retrouvez sur l'écran de raspi-config.

Commencez par changer les paramètres linguistiques (en particulier le clavier...)

Premier démarrage

$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2013-09-25-wheezy-raspbian.img

C'est la même commande que précédemment, mais sans init=/bin/bash. Cela prend du temps, mais les démarrages suivants seront beaucoup plus rapides.

Désinstallation

Pour supprimer cette application, il suffit de supprimer son paquet. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.

Voir aussi

Basé sur << Emulating Raspberry Pi the easy way (Linux or Windows!) >>.