Emuler un Raspberry Pi sous Mac OS X

Il y a quelques jours, j’ai tenté un truc : émuler un Raspberry Pi sur ma machine de bureau. L’idée était d’utiliser le processeur de mon Mac, nettement plus puissant que celui du Raspberry Pi, pour compiler rapidement des trucs sans devoir mettre en place de la cross-compilation. Si on peut techniquement émuler le Raspberry Pi, c’est tout de même un échec, nous allons le voir.
Raspberry_Pi_Logo_4

Je suis parti de ce tutorial, en corrigeant les quelques erreurs.

Sur le Mac (Mavericks), il faut installer Xcode et Homebrew.

Première chose à faire, installer une version de Qemu qui passe. On doit donc modifier Brew pour télécharger la bonne.

rm /usr/local/Library/Formula/qemu.rb
nano /usr/local/Library/Formula/qemu.rb

On colle ça dans le fichier.

require 'formula'

class Qemu < Formula homepage 'http://www.qemu.org/' url 'http://wiki.qemu.org/download/qemu-1.7.1.tar.bz2' depends_on 'jpeg' depends_on 'gnutls' depends_on 'glib' fails_with :clang do build 318 end def install system "./configure", "--prefix=#{prefix}", "--cc=#{ENV.cc}", "--host-cc=#{ENV.cc}", "--enable-cocoa", "--disable-bsd-user", "--disable-guest-agent" system "make install" end end

Ensuite, on installe Qemu.

brew install qemu --env=std

Maintenant, on va aller télécharger de quoi démarrer, ainsi qu'une image de Raspbian sur le site (dans mon cas, la 2014-06-20-wheezy-raspbian.img).

mkdir Raspberry
cd Raspberry
curl http://xecdesign.com/downloads/linux-qemu/kernel-qemu > kernel-qemu

Maintenant, on va démarrer sur un shell et modifier quelques fichiers. Attention, on est sur du QWERTY, ce qui peut être assez lourd pour les commandes, dans mon cas, j'ai simplement un clavier USB en QWERTY pour ce genre de trucs.

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -kernel kernel-qemu -hda 2014-06-20-wheezy-raspbian.img

On tape la commande suivante.

nano /etc/ld.so.preload

Ensuite, on commente la seule ligne.

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

On tape la commande suivante.

nano /etc/udev/rules.d/90-qemu.rules

On met les deux lignes suivantes (sans oublier la virgule à la fin).

KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n",

Maintenant, on tape la commande et on ferme.

sync

Ensuite, on va redimensionner l'image de Raspbian. J'ai ajouté 8 Go, on peut mettre moins.

qemu-img resize 2014-06-20-wheezy-raspbian.img +8G

Enfin, on peut démarrer le Raspberry Pi.

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

Quand il démarre, il faut quitter directement le menu de configuration, et taper les deux lignes suivantes.

sudo ln -snf mmcblk0p2 /dev/root
sudo raspi-config

Enfin, on peut configurer le Raspberry Pi et choisir « Expand Filesystem » pour avoir de la place. Si ça marche bien, il va ajouter les 8 Go à la carte virtuelle.

On peut régler le tout

On peut régler le tout

A noter que l'erreur au démarrage est normale, étant donné qu'il n'y a pas de cartes SD.

Maintenant, pourquoi un échec ?

Parce que sur un Core i7 ULV (2 cores, 2 GHz), le Raspberry Pi émulé est environ deux fois moins rapide qu'un vrai Raspberry Pi.

258 sur un vrai

258 sur un vrai


127 en émulation

127 en émulation

Dans les autres limites, notons évidemment l'absence de prise en charge du décodage vidéo et des GPIO, ainsi qu'une limitation à 256 Mo de RAM, mais ça peut a priori se changer.

Disons que pour tester des trucs sans sortir le vrai Raspberry Pi, ça peut passer, mais ça reste plus lent que la carte originale, ce qui est un vrai problème...

Enfin, on doit évidemment pouvoir faire ça sous Linux aussi, et des packages pour Windows semble exister.