< Annexe E - Déboguer le noyau avec gdb | TutoOS | Liste des fichiers attachés >
Contrairement à Grub, Grub2 nécessite une partition (on ne peut utiliser le volume disque "brut").
Pour créer une image de disque avec bximage :
$ bximage > hd > flat > 10 > c.img
Pour spécifier les caractéristiques physiques du disque (C/H/S) et créer une partition :
$ fdisk c.img > x > c 20 > h 16 > s 63 > r > n, p, 1 > a 1 > w
Il faut ensuite associer le disque et la partition avec les loopback afin de
pouvoir les manipuler. L'offset (paramètre -o) en octets est obtenu en multipliant le
numéro du secteur où débute la partition par 512. L'exemple ci-dessous illustre le cas où
il y a 2 partitions avec une première, de 5 Mo, qui début au secteur 63 :
# losetup /dev/loop0 c.img # losetup -o 32256 --sizelimit 5644800 /dev/loop1 c.img # losetup -o 5677056 /dev/loop2 c.img
On crée un système de fichiers ext2 sur la première partition puis on la monte :
# mke2fs -O ^resize_inode /dev/loop1 # mount -t ext2 /dev/loop1 /mnt/virtual
L'option -O ^resize_inode permet de simplifier la structure du
système de fichiers en refusant certaines évolutions.
Ensuite, on installe Grub2. Il faut commencer par décrire les volumes disques :
# mkdir -p /mnt/virtual/boot/grub # cat > /mnt/virtual/boot/grub/device.map << EOF (hd0) /dev/loop0 (hd0,1) /dev/loop1 (hd0,2) /dev/loop2 EOF
Le fichier suivant décrit comment charger le noyau. Il est possible d'utiliser le standard multiboot ou le nouveau standard multiboot2 :
# cat > /mnt/virtual/boot/grub/grub.cfg << EOF
set default=0
set timeout=5
set root=(hd0,1)
menuentry "AdaKernel" {
multiboot /boot/kernel
boot
}
EOF
# cp kern/kernel /mnt/virtual/boot
# sudo grub-install --no-floppy --root-directory=/mnt/virtual \
--modules="part_msdos ext2 biosdisk configfile normal multiboot multiboot2" \
/dev/loop0
Et voilà ! Grub2 est installé. Suite aux mises à jour du noyau, n'oubliez pas d'utiliser la commande sync.
< Annexe E - Déboguer le noyau avec gdb | TutoOS | Liste des fichiers attachés >