Catégorie:Deuxième Année Catégorie:Informatique Catégorie:Projets de spécialité
Le projet contient du code assembleur qui ne compile pas sur une machine avec une distribution x86_64. Pour pouvoir compiler le projet, il faut éditer les Makefile et indiquer à gcc, as et ld qu'ils doivent générer un executable pour une cible i386. Il y a deux fichiers à éditer dans le dossier kernel-base: kernel-base/kernel/Makefile et kernel-base/kernel/kbd_linux/Makefile. Remplacez
CC=gcc
AS=gcc
LD=ld
par
CC=gcc -m32
AS=gcc -m32
LD=ld -melf_i386
Modifier ces options ne vous gênera pas pour compiler votre projet sur une machine 32 bits classique.
Nemiver est une interface graphique de gdb qui offre des fonctionnalités très pratiques tout en étant beaucoup plus agréable à utiliser que ddd. Il devrait être inclus dans les dépôts de vôtre distribution favorite.
Pour l'utiliser, il faut tout d'abord ajouter vos dossiers kernel, shared et user dans Edition->Préférences->Répertoires de source. Ensuite, pour Virtual Box, comme avec gdb/ddd, lancez votre machine virtuelle, faites 'D' quand l'écran bleu s'affiche et simulez une liaison série avec :
socat UNIX-CONNECT:/tmp/vbox-psys PTY,link=/tmp/gdb-psys
Ensuite, dans Nemiver :
kernel/kernel.bin)
/tmp/gdb-psyslocalhost port 1234Le débuggeur doit maintenant s'ouvrit au début de kernel_start() (avec virtual box).
Pour exécuter le noyau:
kernel.bin normalement.qemu -kernel kernel.binPour déboguer votre noyau:
qemu -s -kernel kernel.bintarget remote localhost:1234Pour lancer qemu et votre noyau directement depuis la console de gdb
target remote | exec qemu -gdb stdio -kernel kernel.binL'image sera bootable facilement par tous les simulateurs de PC (bochs, qemu, Virtualbox version open-source). L'image est constructible sur les PC en Ubuntu des salle D200 sans les droits d'administrateur.
La construction utilise dd, les mtools, des outils de manipulation de disquette DOS, et grub comme chargeur de votre système.
La construction de l'image n'est faite qu'une seule fois. Ensuite, pour utiliser l'image avec une nouvelle version de kernel.bin, il faut juste mettre à jour kernel.bin.
kernel.floppy de la taille d'une disquettedd if=/dev/zero of=kernel.floppy bs=1440K count=1
kernel.floppy. Il faut créer un pseudo-device disquette pointant vers le fichiermformat -f 1440 b:
mcopy kernel.bin b:
mmd b:grub
mcopy -s /boot/grub/stage1 b:grub
mcopy -s /boot/grub/stage2 b:grub
kernel.bindefault 0
timeout 0
title psys
kernel /kernel.bin
boot
mcopy menu.lst b:grub
grubcmd.txtdevice (fd0) ./kernel.floppy
root (fd0)
setup (fd0)
grub --device-map=/dev/null --batch < grubcmd.txt
Il faut bien sûr mettre à jour kernel.bin dans l'image.
mcopy kernel.bin b:
Avec les versions récentes de gcc, la compilation des sources initiales s'arrête sur une erreur dans le fichier shared/stdarg.h
Il faut remplacer ligne 27 "__builtin_stdarg_start" par "__builtin_va_start"
=
Il peut arriver que les options de VirtualBox entrent en conflit avec l'exécution du noyau. Il faut alors désactiver le VT-x/AMD-V, la pagination imbriquée, ainsi que l'USB dans les propriétés de la machine.