Guide (presque) complet de compilation du kernel

Préambule:

A première vue, recompiler un kernel est une chose difficile que beaucoup de linuxiens « évitent de faire » par peur de perdre leur système, qu’ils se rassurent recompiler une kernel ne fait pas perdre l’ancien a moins de l’écraser à l’enregistrement….
Il est préférable que vous ayez une distribution live CD sous la main (Knoppix), on ne sait jamais!

Pourquoi recompiler un noyau ?
Dans certain cas recompiler un kernel peut être une étape incontournable pour utiliser un nouveau périphérique et pouvoir utiliser une fonctionnalité de Linux.
Recompiler un kernel est aussi une façon de se tenir a jour (comme tout bon geek) ou tout simplement for fun and profit.

Choisir et installer un kernel :
Pour ce faire une seule adresse www.kernel.org pour les kernel d’origines de Linux, dit Vanilla, publié par Linus Torvalds.
Toutefois je vous conseille d’utiliser les sources fournies par votre distribution en utilisant les outils habituels,veuillez aussi prendre un noyau assez récent MAIS marqué Stable.
Aussi n’oubliez pas de faire pointer le dossier /usr/src/linux vers les sources du noyau kernel.
Pour vérifier ce lien :

#ls -l /usr/src/

vous devez avoir quelque chose du genre

# ls -l /usr/src
lrwxrwxrwx 1 root root 22 nov 19 14:22 /usr/src/linux -> linux-2.6.18-gentoo-r2

là on voit bien que mon /usr/src/linux pointe vers les source linux-2.6.18-gentoo-r2
Si par malheur ce lient symbolique n’existe pas,pas de panique la commande suivante remettrait les pendules a l’heure :

#ln -s /usr/src/votre_noyau /usr/src/linux

Choisir les option a compiler :
Tout d’abbord positionner vous dans /usr/src/linux
puis faites :

#make menuconfig (avec des menus utilisant la librairie ncurses)
#make gconfig (avec une belle (tout est relatif) interface basé sur gtk)

Nous allons vous guider pas a pas pour choisir les options aussi bien approprié qu’indispensable pour le bon fonctionnement de votre système
A tous moment vous pouvez appuyez sur la touche “?” Pour avoir plus d’aide sur l’option sélectionnée.
Pour compiler l’option en dur appuyez sur Y, pour la compiler en module M pour ne pas
compiler du tout N.
( * Signifie que l’option est compilée en dure , toutes les options citées ici sont issue de mon propre kernel qui marche très bien).

1) Code maturity level options —>
[*] Prompt for development and/or incomplete code/drivers

Support des pilotes et codes en développement (sans ça, ça serait difficile d’utiliser Linux) sachant que la plupart des pilotes Linux sont en développement permanent.

2) General setup —>
[*] Support for paging of anonymous memory (swap) Support du Swap.
[*] System V IPC Communication Inter-Processuss vivement conseillé de mettre Y.
[*] Kernel .config support Utile pour savoir les options du kernel après compilation (ou avant)
[*] Enable access to .config through /proc/config.g Tout est dans le titre.
[*] Optimize for size (Look out for broken compilers!) Pour avoir un kernel léger.

3) Loadable module support —>
[*] Enable loadable module support Pour charger des modules noyau INDISPENSABLE.
[*] Module unloading Pour pouvoir décharger ces mêmes modules.
[*] Automatic kernel module loading Chargement des modules au besoin du kernel sans
votre intervention.

4) Block layer —>

IO Schedulers —>
<*> CFQ I/O scheduler Distribution égale de la bande entre les processus (mettez M sinon )

5) Processor type and features —>
[ ] Symmetric multi-processing support Si vous avez plusieurs Processeurs mettez Y.
Subarchitecture Type (PC-compatible) C’est évident.
Processor family Choisissez la famille de votre processeur en appuyant sur Entrée.
Pour les autres options de cette section c’est vraiment du cas par cas , il y a toujours Google ou mon mail pour plus d’information ou la touche “?”.
[*] MTRR (Memory Type Range Register) support Essentiel pour une carte graphique sur
le port AGP.

6) Power management options (ACPI, APM) —>
ACPI (Advanced Configuration and Power Interface) Support —>
Si vous avez un Laptop cochez les cases qui vous sont necessaires.

7) Bus options (PCI, PCMCIA, EISA, MCA, ISA) —>
[*] PCI support C’est essentiel.
PCI access mode (Any) —> Sélectionnez le mode d’accès au PCI (any) est le meilleur choix.
[ ] PCI Express support Si vous disposez de bus PCI Express.
[*] ISA support Si vous avez des bus ISA.

8 ) Executable file formats —>
[*] Kernel support for ELF binaries Support des binaires ELF.
<*> Kernel support for MISC binaries Support des autre format DOS entre autre avec DosEmu

8 ) Networking —>
8.1) Networking options —>
<*> Unix domain sockets Indispensable pour le serveur X.
[*] TCP/IP networking Sans commentaires.
< > The IPv6 protocol Pour le moment je vous conseille de laisser ca comme ca pour ne
pas ralentir votre connexion.
[*] Network packet filtering (replaces ipchains) —> Pour utiliser NetFilter (firewall et
nat) pour ces options elles seront plus détaillées dans un autre tutorial pour le partage Ethernet ).
<M> Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
Indispensable pour nos chéres connexions ADSL.
<M> RFC1483/2684 Bridged protocols Idem.

8.2) < M>IrDA (infrared) subsystem support —> Support de l’infrarouge.

8.3) <M> Bluetooth subsystem support —> Support du bluetooth

9) Device Drivers —>
9.1) Generic Driver Options —>
[*] Select only drivers that don’t need compile-time external firmware
[*] Prevent firmware from being built
<*> Userspace firmware loading support Mieux vaut cocher toutes ces cases.
9.2)Connector - unified userspace <-> kernelspace linker —>
< > Connector - unified userspace <-> kernelspace linker
9.3) Memory Technology Devices (MTD) —>
< > Memory Technology Device (MTD) support

9.4) Parallel port support —> Pour le support du port parallèle
<*> Parallel port support Support du dit port parallèle
<*> PC-style hardware normalement compatible PC
[*] IEEE 1284 transfer modes Pour le suppot de l’ECP et l’EPP de certaines imprimante
exemple : les anciennes Canon.

9.5) Plug and Play support —>
[*] Plug and Play support Pour le support du Plug n Play (pas besoin de redémarrer
comme sur certain OS)

9.5) Block devices —>
<*> Normal floppy disk support Nos chéres disquettes.
<*> Loopback device support Pour pouvoir (entre autres) de monter une image iso
directement pour vérifier son contenu par exemple.
<*> Packet writing on CD/DVD media Pour les graveurs qui le supportent.
(8) Free buffers for data gathering Je l’ai trouvé par default.

9.6) ATA/ATAPI/MFM/RLL support —>
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

<*> Include IDE/ATA-2 DISK support
<*> Include IDE/ATAPI CDROM support
<*> Include IDE/ATAPI FLOPPY support
<M> SCSI emulation support Necessaire pour certains graveur.
[*] PCI IDE chipset support Necessaire pour les interface IDE.
[*] Sharing PCI IDE interrupts support
[*] Generic PCI bus-master DMA support Support du DMA
[*] Use PCI DMA by default when available Utilisation du DMA si disponible.
<*> VIA82CXXX chipset support En ce qui vous concerne vous devez choisir
le chipset de votre carte mére (#lspci vous donnera plus de détails )
« CE CHOIX EST PERSONNEL »
[* ] Other IDE chipset support Si vous ne trouvez pas votre chipset.

9.7) SCSI device support —>
<*> SCSI disk support
<*> SCSI CDROM support
<*> SCSI generic support Support des périphérique SCSI
IEEE 1394 (FireWire) support —> Support du FireWire pour camera DV par exemple.

9.8) Network device support —>
[*] Network device support Support des périphérique réseau,
<*> PPP (point-to-point protocol) support Support de Point-to-Point Protocol nécessaire pour se connecter a internet.

[*] PPP multilink support (EXPERIMENTAL)
<M> PPP support for async serial ports Je vous conseille de sélectionner ca pour ne
<M> PPP support for sync tty ports pas avoir de problèmes avec PPP après,

<M> PPP over Ethernet (EXPERIMENTAL) Pour supporter les modems dsl algériens.

9.9) Input device support —> assez explicite
[*] Provide legacy /dev/psaux device Création de /dev/psaux qui sera votre souris.
(1280) Horizontal screen resolution
(1024) Vertical screen resolution Si vous avez une tablette graphique etc…
sélectionnez la valeur en appuyant sur entrée.
[*] Mouse —> ….

9.10) Character devices —>
Serial drivers —>
[*] Legacy (BSD) PTY support
(256) Maximum number of legacy PTY in use
<*> /dev/agpgart (AGP Support) pour les cartes graphiques

9.11) Multimedia devices —>
<M> Video For Linux support general de la video sur linux ( webcam,carte dvb,etc…)
[*] Enable Video For Linux API 1 compatible Layer
Digital Video Broadcasting Devices —> pour les cartes DVB.

9.12) Graphics support —> Options graphiques.
[*] Enable firmware EDID Vaux mieux laisser ca comme ca
<*> Support for frame buffer devices Pour le framebuffer
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) —> Selectionner le type.
[*] Support for the framebuffer splash pour le splashscreen
Remarque : Pour les pocesseurs des cartes nvidia ne surtout pas installer le support du
framebuffer de nvidia dans le kernel ça causerait des conflits avec les pilotes 3d nvidia.
9.13 ) Sound —>
<*> Sound card support Pour écouter de la musique
Advanced Linux Sound Architecture —>
<*> Advanced Linux Sound Architecture
<*> Sequencer support
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] OSS Sequencer API
PCI devices —> Sélectionner la carte dans la liste.

9.14) USB support —>
<*> Support for Host-side USB
[*] USB device filesystem pour le listings des périphérique USB.
<*> EHCI HCD (USB 2.0) support
<*> UHCI HCD (most Intel and VIA) support laissez ça comme ça.
<*> USB Printer support pour les imprimantes USB.
<*> USB Mass Storage support Pour les clés USB et les disques durs externes etc….

10) File systems —> Support des systèmes de fichiers,et bien évidemment c’est suivant chaque
utilisateurs.
<*> Second extended fs support
<*> Ext3 journalling file system support les plus populaires des système de fichiers linux.
<*> Reiserfs support pour le support de reiserfs un des plus fiables système de fichier et
que j’utilise personnellement.
10.1) CD-ROM/DVD Filesystems —>
<*> ISO 9660 CDROM file system support
[*] Microsoft Joliet CDROM extensions pour les noms de fichier longs.
[*] Transparent decompression extension
10.2) DOS/FAT/NT Filesystems —>
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support support du FAT. (beurk ! )
(850) Default codepage for FAT
(iso8859-15) Default iocharset for FAT
<*> NTFS file system support support du ntfs (re-beurk!)
[*] NTFS write support support de l’ecriture « partielle » sur des partitions NTFS
on peut juste supprimer des fichiers sans changer leur
taille ou les renommer etc…
Remarque: Pour la lecture/ecriture sur du NTFS il existe ntfs-3g qui marche normalement bien moi personnellement ma partition NTFS était pourrie.

10.3) Partition Types —>
[*] Advanced partition selection
[*] PC BIOS (MSDOS partition tables) support

10.4) Native Language Support —> Sélectionnez la langue « native »

La Compilation :

Maintenant que nos options sont choisie on va concrétiser tous ca avec la compilation pour obtenir le fameux kernel, voici les commandes a entrer et (prier) !!

# make && make modules && make modules_install

je vous explique un peu :

make Compile le kernel donc les options qui sont passé en dur *
make modules Compile les modules M
make modules_install Installe les modules.

Configuration du chargeur de demarrage :
maintenant que votre compilation s’est bien déroulée il va falloir configurer le chargeur de
démarrage pour booter sur votre kernel.
Chaque nouveau kernel compilé est enregistré dans :
/usr/src/linux/arch/i386/boot/bzImage
donc il faudra le copier dans /boot

#cp /usr/src/linux/arch/i386/boot/bzImage /boot/le_nom_de_votre_kernel

souvenez vous bien du nom du kernel,
maintenant passons a la configuration du chargeur de démarrage :

Grub :
Ajoutez une entrée dans /boot/grub/grub,conf

(voilà ce que ca donne chez moi )

title Gentoo Linux #titre de votre entreé
root (hd0,4) #la partition root
kernel /boot/gentoo2.6.18 root=/dev/hda7 #voila ce qui nous intéresse vous mettre ici le #nom de votre kernel que vous avez copié

là il ne vous reste plus qu’à redémarrer votre ordinateur et prier.

(hd0,4) correspond au premier disque (0) cinquiéme partition (4) la premiére partition etant notée 0

Quelques remarques :
Les menus peuvent changer selon la version du kernel , ce tutorial a été fait sur un kernel 2,6,18-r2 (modifié par les developpeur Gentoo).
Personnellement, et ca n’engage que moi;j’ai souhaité compilé toutes les options qui me sont necessaires en dur, vous pouvez faire ca aussi , ou les laisser en modules, mais soyez raisonable vous n’allez quand méme pas mettre le support de Ext3 en module alors qu’il doit étre en dur.


A propos de cet article