mercredi 7 septembre 2005

Compiler le kernel


COMPILER LE KERNEL

Nous allons voir comment compiler un kernel Linux. Dans ce tutoriel, nous utiliserons suse 10. Nous compilerons le kernel 2.6.13-15.7. Les commandes montres dans cet article fonctionnent néanmoins avec n''importe quel kernel 2.6.

Installez les sources du kernel
rpm -i kernel-source-2.6.13-15.7.i586.rpm

déplacez-vous dans le répertoire du kernel (/usr/src/linux) pour effectuer les prochaines opérations.

Modifiez la ligne contenant EXTRAVERSION dans le fichier Makefile. N'importe quelle valeur peut être mise, mais le premier caractère doit être un trait d'union.

Si vous ne voulez pas utiliser le fichier de config de ce kernel faite
make mrproper

Cette commande permet de choisir les options du kernel
make xconfig

Pour débuter, il peut être intéressant de rien changer afin de s''assurer que ça fonctionne. Par la suite, vous pouvez enlevez des fonctionnalités que vous n''utilisez pas.

Ouvrez le fichier: .config et modifiez la ligne concernant: CONFIG_LOCALVERSION, changez sa valeur. La valeur mise pour cet exemple est: -default_collinm_1. Ce changement permettra de ne pas écraser les modules. Ainsi, ce noyau et ses modules seront totalement indépendants du noyau que vous avez.

Cette commande compile le kernel
make bzImage

Cette commande compile les modules
make modules

Cette commande installe les modules
make modules_install

La commande ci-dessous copie le bzimage, System-map et modifie grub pour vous
make install

Ensuite, vous devez modifier votre fichier grub ou lilo. Ici nous allons modifier le menu de grub
Avant les modifications menu.lst ressemblait à
# Modified by YaST2. Last modification on Tue Jan 17 02:34:27 EST 2006

color white/blue black/light-gray
default 0
timeout 8
gfxmenu (hd0,4)/message

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
    root (hd0,4)
    kernel /vmlinuz root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
    initrd /initrd

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
    root (hd0,4)
    kernel /vmlinuz root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
    initrd /initrd

Le fichier après les modifications fait par make install ressemble à
# Modified by YaST2. Last modification on mer fév  8 22:53:52 EST 2006
color white/blue black/light-gray
default 1
timeout 8
gfxmenu (hd0,4)/message
title Linux-2.6.13-test1-15.7-default_collinm_1
 root (hd0,4)
 kernel /vmlinuz-2.6.13-test1-15.7-default_collinm_1 root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-test1-15.7-default_collinm_1

###Don''t change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-15.7-default
###Don''t change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
 initrd /initrd-2.6.13-15.7-default

Si vous regarder dans votre répertoire /boot, il est fort probable que vmlinuz pointe sur la nouvelle valeur ici: vmlinuz-2.6.13-test1-15.7-default_collinm_1. Il faut donc modifier cela.
# Modified by YaST2. Last modification on mer fév  8 22:53:52 EST 2006
color white/blue black/light-gray
default 1
timeout 8
gfxmenu (hd0,4)/message
title Linux-2.6.13-test1-15.7-default_collinm_1
 root (hd0,4)
 kernel /vmlinuz-2.6.13-test1-15.7-default_collinm_1 root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-test1-15.7-default_collinm_1

###Don''t change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz-2.6.13-15.7-default root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-15.7-default

###Don''t change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz-2.6.13-15.7-default root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
 initrd /initrd-2.6.13-15.7-default

Il est maintenant possible de démarrer sur un et l''autre des noyaux. Les modules sont indépendants.

Si vous utilisez les pilotes Nvidia, une fois qu'ils sont installés vous pouvez démarré sur vos autres noyaux. Lancez NVIDIA-Linux-x86-1.0-xxxx-pkg1.run avec l'option -K. Vous allez ainsi avoir les pilotes pour le noyau en cours. Cette commande doit être faite pour chacun de vos noyaux.