Foire aux questions
A l'aide des messages envoyés sur la
mailing-list, nous mettons à jour cette page de Foire Aux Questions.
Je suis sous Windows et j'aimerais compiler et utiliser SOS
SOS est conçu sous Linux. Cependant, il est possible de le compiler et de l'utiliser sous Windows, mais pas avec les outils
Cygwin de base par exemple. En effet, Cygwin (et les compilateurs sous Windows) génèrent des fichiers objets et des exécutables au format
PE (une variante de
COFF). Or SOS ne supporte que le format
ELF32, que ce soit au niveau des outils de compilation, qu'au niveau du format des programmes utilisateur chargés par le noyau SOS.
Sous Windows, on a le choix pour remédier à cela :
- Utiliser un compilateur vers ELF32 sous Cygwin
Il suffit d'installer Cygwin puis de suivre les instructions qui sont données dans la section 3 de l'article 1 et dans une http://david.decotigny.free.fr/wiki/wakka.php?wiki=XGcc. Il faudra aussi compiler les mtools "normalement" (ie sans les cross-compiler). Ensuite, avant de compiler SOS, on prendra soin de créer un fichier .mkvars à la racine des sources de SOS et dans le répertoire userland/ analogue à celui proposé dans les sources de SOS : extra/dot.mkvars (encore une fois : voir l'article 1, section 4.4.2). Pour les paresseux, récupérer ce fichier .mkvars qui marche dans cygwin. Le reste de l'environnement cygwin convient comme environnement de compilation de SOS (il dispose de tous les outils Unix nécessaires make, cat, sed, ...).
- Utiliser un environnement Linux dans Windows via un émulateur (qemu, bochs, vmware, ...) ou coLinux
Ensuite, pour essayer SOS, on fera comme sous Linux. Soit on le testera sur machine réelle à l'aide d'une disquette, soit on utilisera un émulateur (
qemu,
bochs,
vmware, ...).
Et sur autre chose que Linux/x86 ?...
SOS est développé en partie sur une machine
Linux/x86, en partie
via cross-compilation depuis
Linux/x86_64 et
Linux/ppc. Donc la compilation de SOS, c'est sûr, supporte très bien la (cross-)compilation depuis un Unix quelconque. Par exemple, l'environnement
Cygwin permet la compilation de SOS puisqu'il cosntitue une couche Unix au-dessus de Windows. Sous Mac OS X, cela devrait poser encore moins de problème (pas testé à notre connaissance).
Sous un Unix quelconque (par exemple Linux/x86_64), on utilisera donc un cross-compilateur gcc vers ELF32/x86. Pour en fabriquer un, les indications pour Cygwin ci-dessus (1
er item) conviennent parfaitement.
Quelques pistes pour debugger SOS
- bochs : retrouvez les habitudes de debuggage de gdb en compilant bochs avec les options --enable-debugger --enable-disasm --enable-port-e9-hack et la documentation fournie dans bochs. On pourra faire du debuggage symbolique (ie avoir accès aux noms des fonctions et variables plutôt que des suites d'adresses) en tapant la commande "load-symbols sos.map" au prompt du debugger de bochs. Le fichier sos.map est généré lors de la compilation du noyau.
- qemu : pour bénéficier de la sortie de debuggage analogue au --enable-port-e9 de bochs, voir la page des patches
- gdb : il est possible d'utiliser gdb directement grâce à bochs ou qemu. Pour l'utilisation avec bochs, voir la documentation de bochs. Pour l'utilisation avec qemu, voir la fin de l'article 7.
- backtrace de SOS : quand SOS plante, il affiche la suite d'appels de fonctions ayant conduit à l'erreur. Pour exploiter aisément celle-ci même si on a oublié de lancer un debugger, voir ce message.
Configuration de bochs
Dans l'article 1, il est dit comment compiler bochs pour travailler avec sos dans de bonnes conditions. Voici une version réactualisée de ces indications :
./configure --prefix=/usr/local/stow/bochs-cvs --enable-plugins --enable-ne2000 --enable-pci \
--enable-port-e9-hack --enable-all-optimizations --enable-readline \
--enable-debugger --enable-disasm --with-x --disable-config-interface
Sortie de debuggage (port 0xe9) pour qemu
Par défaut,
qemu ne permet pas d'afficher des infos de debuggage très simplement comme bochs. Les patches pour réaliser ceci sont disponibles sur
cette page.