Utiliser Qemu a fond
Le tutoriel que vous vous apprêtez à lire a été écrit par un bénévole, qui a mis à disposition gratuitement son savoir. Malgré le passage à la validation de ce tutoriel, nous ne pouvons garantir la véricité des informations contenues dedans. Merci de garder ceci à l'esprit pendant votre lecture
Bonjour

,
Normalement, si vous développez un OS, ou si vous en testez, vous devez connaître Bochs ou Qemu. Dans ce tuto, nous allons parler de l'utilisation avancée de Qemu.
Qemu est un système de virtualisation extrêmement simple à utiliser, et très rapide. Avec Qemu, en une simple ligne de commande, vous pouvez lancer une machine virtuelle complète, composée de plusieurs disques durs, avec des paramètres, voire même lancer directement un noyau Linux.
Nous allons donc apprendre à utiliser cette mine d'or qu'est Qemu, surtout du côté du débogage.
La ligne de commande de Qemu
A la différence de Bochs, Qemu n'a pas besoin d'un lourd fichier de configuration, il peut être utilisé directement sous forme de ligne de commande. On pourrait croire que c'est moins efficace, mais ce n'est pas le cas. Qemu est très puissant.
Passons maintenant à cette fameuse ligne de commande. Pour un usage normal (booter sur un disque dur, avec le support du son et de l'usb), entrez simplement cette ligne :
Code : Consoleqemu -boot c -hda fichier_image.img -usb -localtime -soundhw sb16
Le système d'exploitation se trouvant sur le disque démarre

. Décrivons cette ligne de commande.
- -boot c : Nous allons booter sur le disque dur C, c'est à dire le premier disque dur
- -hda fichier_image.img : Indique le nom du fichier image pour le disque C. Pour une image d'un autre disque dur, ajoutez -hdb fichier_image, ou -hdc. Pour le CD-ROM, ajoutez -cdrom fichier_iso.iso.
- -usb : Indique que nous allons utiliser l'usb.
- -localtime : Permet simplement de configurer l'heure du système invité de manière à ce qu'elle soit la même que celle du système hôte.
- -soundhw sb16 : Indique que nous allons utiliser comme carte son une Create Sound Blaster 16. Évidemment, c'est le nom de la carte émulée, pas celle qui est réellement installée dans votre ordinateur
.
Voilà, vous connaissez maintenant les arguments basiques de Qemu. Nous pouvons maintenant passer à l'usage avancé.
Options de commande avancées
Bon, maintenant, vous savez lancer un OS dans Qemu. Le problème, c'est que si c'est un OS stable (Windows, Linux, ou un mini-OS testé et qui marche), il n'y a pas de problème, mais si c'est
votre OS, et qu'il plante, vous ne savez pas ce qui se passe.
Qemu est vraiment très pratique pour le débogage. Tout d'abord, si votre OS plante et affiche son message d'erreur (style "une erreur #GP s'est produite !"), ça va être difficile de laisser faire Qemu, car Qemu ne sait même pas que votre OS a planté. Il vous faut donc désactiver la gestion des erreurs de votre OS, pour que la moindre erreur grave produise un TripleFault. Grâce à ce TripleFault, Qemu va se fermer, et afficher à l'écran une foule d'informations, dont un dump très précis de
tous les registres, même les x87, XMM, les registres systèmes, les registres de segment, le contenu du GDTR, IDTR, LDTR, TR, les crx, drx, etc.
Bref, un TripleFault dans Qemu est une mine d'or. Le problème, c'est que nous ne savons pas où s'est produite l'erreur. Pour cela, il va falloir un peu réfléchir. Vous allez d'abord rajouter à Qemu l'option "-d IN_ASM". Grâce à cette option, tout au long de l'exécution, Qemu va écrire dans un fichier de log toutes les instructions assembleur rencontrées.
Une fois le TripleFault survenu, il vous suffit d'ouvrir le fichier de log (/tmp/qemu.log sous Linux, et C:\Program Files\Qemu\qemu.log dans Windows).
N'ouvrez pas ce fichier dans un éditeur graphique, si votre OS a été utilisé pendant longtemps, beaucoup d'instructions ont étés écrites. Ce fichier peut faire 30 ou 40 Mo, et le bloc-note n'aime pas du tout les fichiers aussi gros (il plante à partir de +- 5Mo). Préférez un éditeur de texte en mode console, style "less" sous Linux, ou Vi porté sous Windows
Une fois que vous avez ouvert ce fichier, déplacez-vous à la fin. Avec
less, c'est très simple, appuyez sur END. Pour les autres éditeurs de textes, genre Vi, Emacs ou autre (sachant que less suffit amplement), il faut entrer une commande pour se placer à la fin du fichier.
Une fois à la fin du fichier, vous voyez à nouveau le dump des registres. Remontez un petit peu, et vous trouvez les dernières instructions assembleur exécutées avant le crash de l'OS. À vous maintenant d'analyser tout ça

.
Utilisation de Qemu est de GDB
Erreur dans le lCode, que l'auteur de se message le corrige svp.