Emuler un Raspberry PI avec Qemu sous Ubuntu

J’ai installé un émulateur de Raspberry pour déboguer des problèmes de lenteur rencontrés pas certains utilisateurs du plugin jMQTT sur Jeedom. Voici la procédure.

Elle est principalement inspirée de DR1, modifiée par DR2 concernant la préparation de l’image avant le premier démarrage.

Elle a été testé avec les couples image / kernel suivant:

Image Kernel
2015-02-16-raspbian-wheezy.img kernel-qemu-3.10.25-wheezy
2016-09-23-raspbian-jessie-lite.img kernel-qemu-4.4.13-jessie

Raspbian Wheezy ne permet pas d’installer Jeedom (erreur lors de l’installation de php5) ; je suis donc passer à Jessie.

## Téléchargement de l’image raspbian et du noyau

Télécharger l’image à partir du lien fourni dans le tableau précédent.
Télécharger le noyau associé ici.
Tout placer dans le même répertoire, dézipper l’image et créer des liens vers ce couple image / kernel pour faciliter la suite de la procédure:

ln -s 2015-02-16-raspbian-wheezy.img image.img
ln -s kernel-qemu-4.4.34-jessie kernel

Installation de l’émulateur

sudo apt-get update && sudo apt-get install qemu-system-arm

Préparation de l’image

Installer kpartx:

sudo apt-get install kpartx

Dérouler les commandes suivantes pour configurer l’image avant le premier démarrage:

df -h

Modifier le fichier /etc/ld.so.preload en commentant la seule ligne qu’il contient:

sudo nano etc/ld.so.preload
#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so

Créer le fichier de règles pour émuler la carte mémoire:

sudo echo 'KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"' | sudo tee -a etc/udev/rules.d/90-qemu.rules > /dev/null

Démonter l’image:

popd
sudo umount /mnt/img1
sudo kpartx -d image.img

Lancement de l’émulateur

Créer le fichier suivant permettant d’exécuter l’émulateur et le lancer:

echo '# Starts raspberry pi image in configuration mode
qemu-system-arm -kernel kernel -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda image' > runme
chmod a+x runme
./runme

Lors de ce premier démarrage, raspi-config est lancé automatiquement. Le clavier peut être configuré en azerty via l’option 4, I3. Un redémarrage peut être nécessaire pour que ce soit effectif.

Si la distribution utilisée comprend les paquets graphiques, i.e. que ce n’est pas une lite, il est possible de les désinstaller via:

sudo apt-get --purge remove 'x11-*'
sudo apt-get --purge autoremove

Mettre à jour la distribution:

sudo apt-get update 
sudo apt-get upgrade

Extension de la partition root

Si vous avez besoin d’augmenter la partition root, procéder comme suit.

Arrêter la machine virtuelle via la commande sudo halt, puis:

qemu-img resize image.img +500M

Redémarrer la machine virtuelle:

cd /tmp
cp /usr/bin/raspi-config .
sed -i 's/mmcblk0p/sda/' ./raspi-config
sed -i 's/mmcblk0/sda/' ./raspi-config
sudo ./raspi-config

Et sélectionner : 1 Expand Filesystem ou 7 Advanced Options / A1 Expand Filesystem.

Bibliographie

Laisser un commentaire