QEMU: un émulateur de processeur
QEMU est un émulateur de processeur: il émule actuellement arm, powerpc, sparc et x86. QEMU dispose de deux modes de fonctionnement:
- Emulation “User Mode” (= lancé dans l’espace utilisateur): QEMU peut lancer des executables compilés pour un autre processeur.
- Emulation systême complète: QEMU émule une machine virtuelle complète, fournissant un processeur et divers périphèriques virtuels, fournissant une interface avec la machine physique.
kqemu: un accèlérateur de QEMU
kqemu est un module noyau fournissant au noyau des fonctionnalités permettant d’accélèrer QEMU.
En effet QEMU seul est d’une lenteur assez redhibitoire, et est plus destiné au dénuguage d’applis destinés à un autre processeur qu’à de la “vraie” émulation.
Avec kqemu, et une machine puissante, on obtient des vitesses d’execution “raisonnables” (mais encore infèrieures à celles d’autres solutions d’execution comme vmware, ou wine).
kqemu n’est pas fourni en paquet sous debian pour des raisons de licenses, quand à la version de qemu fournie sous forme de paquet, nous allons recompiler, par principe.
Nous allons donc tout faire en recompilant depuis les sources (d’autant plus que pour l’instant, aucun autre paquet ne dépend de QEMU).
N’oubliez pas d’éxecuter les commandes avec des droits superuser, idéalement avec sudo.
préparation
-
En premier lieu, vous aurez besoin d’un minimum d’outils de compilation, ceux que vous avez déjà installés si vous avez recompilé votre noyau. Mettons:
aptitude install build-essential automake autoconf
-
Dans l’optique d’optimiser le fonctionnement de QEMU, nous allons le compiler avec le support de la SDL:
aptitude install libsdl1.2-dev
-
Je n’ai jamais essayé de compiler le module kqemu avec les headers, mais ça doit être possible comme avec n’importe quel autre module. Par contre, kqemu n’est pas disponible avec le module-assistant.
La présentation qui suit va donc correspondre au cas ou vous disposez des sources de votre noyau que vous avez compilé, et qu’un lien /usr/src/linux pointe déjà vers cette arborescence (ou vers les headers, si cous préfèrez essayer avec).
En bref, pour installer les sources de votre noyau courant, et compiler un noyau avec la même configuration que votre noyau courant, puis l’installer, si vous ne l’avez pas déjà fait, et que vous partez d’un noyau de distrib, rapidement:export KBUILDVER=`uname -r`
aptitude install linux-source-$KBUILDVER
cd /usr/src
tar xjf linux-source-$KBUILDVER
ln -s linux-source-$KBUILDVER linux
make-kpkg --config oldconfig --initrd --append-to-version "-personnel" buildpackage
dpkg -i ../*$KBUILDVER-personnel*.deb
si vous préfèrez les headers:export KBUILDVER=`uname -r`
aptitude install linux-headers-$KBUILDVER
ln -s linux-headers-$KBUILDVER linux
Plus d’infos dans forum.debian-fr.org/viewtopic.php?t=1806
compilation de QEMU avec prise en compte de kqemu
préparons la compilation (dépendances de compil et sources:
apt-get build-dep qemu
cd /usr/src
apt-get source qemu
wget http://fabrice.bellard.free.fr/qemu/kqemu-0.7.2.tar.gz
cd qemu-XXX # dépend de la version de qemu telechargée à la commande precedente
tar xzf ../kqemu-0.7.2.tar.gz
./configure --help
La dernière commande vous permet de déterminer les options de configuration dépendent de vos choix, et de votre configuration de machine (j’ai été obligé de forcer les support alsa, par exemple).
Ensuite, ja n’ai pas trouvé comment faire autrement que de modifier le fichier ./debian/rules ou j’ai remplacé:
[code]config-host.mak: configure
dh_testdir
CFLAGS="$(CFLAGS)" ./configure \
--prefix=/usr \
--cc=$(CC)[/code]
par
[code]config-host.mak: configure
dh_testdir
CFLAGS="$(CFLAGS)" ./configure \
--prefix=/usr \
--cc=$(CC) \
--enable-alsa[/code]Je sais qu'il y a des manières plus propres de recompiler en passant des options au ./configure au travers du dpkg-buildpackage, mais je n'ai pas retrouvé. Si quelqu'un a une idée...
Ensuite, on lance la compil:dpkg-buildpackage -uc -b
puis on installe le paquet obtenu:dpkg -i ../qemu*.deb
. Il se peut que certaines dépendances manquent encore. Notez les paquets qui manquent, installez les, puis relancez le ‘dpkg -i’.
en cas de changement de noyau comment recompiler kqemu ?
Il suffit de relancer la commande dpkg-buildpackage…, et même sans reinstaller le paquet produit, kqemu est recompilé et installé dans l’arborescence des modules (mais il faut le modprober).
peaufinage d’install
A priori, en même temps qu’il compilait le paquet qemu, le module kqemu a dû s’installer dans votre arborescence de modules noyau. vous pouvez le vérifier avec:modprobe kqemu
. Ensuite, ajoutez les modules utiles à votre /etc/modules:
echo kqemu >>/etc/modules
echo tun >>/etc/modules
Voilà.
[i](TODO:
- un exemple d’install,
- la recompil du module tun avec le module assistant)[/i]