Table des matières
QEMU : émulation d'un Raspberry Pi (Linux ou Windows)
Pré-requis
- Une machine sous Ubuntu
- QEMU : 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 rendre
- Té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 :
- /mnt/etc/ld.so.preload
#/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 :
- /etc/udev/rules.d/90-qemu.rules
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 arm1176
- Select CPU model (-cpu help for list and additional feature selection)
- -m 256
- permet 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 stdio
- Redirect 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.img
- sert à 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 fr
- clavier français
Au 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!) ».