Académique Documents
Professionnel Documents
Culture Documents
Le noyau est tout simplement le programme qui gère les interactions entre le matériel et les
autres programmes. C'est lui qui 1) amorce le système d'exploitation.
Une chose que beaucoup de personnes ne comprennent pas est que le noyau est un programme
comme les autres, vous pouvez parfaitement avoir plusieurs noyaux et utiliser celui de votre
choix. Il est même recommandé d'avoir toujours un noyau fonctionnel sur sa machine que
l'on pourra utiliser si le noyau par défaut n'est pas fiable.
Pourquoi compiler son noyau ? Les noyaux fournis par défaut dans votre distribution
GNU/Linux sont des noyaux capables de tourner sur un maximum de machines et de matériels.
Ils sont donc souvent plus lourds, mais la différence de rapidité est en général assez faible. En
fait les vraies raisons de compiler son propre noyau sont les suivantes :
La compilation du noyau est longue et demande beaucoup d'attention sous peine de ne plus
pouvoir démarrer sa machine. Si vous n'avez pas le temps de lire beaucoup de documentation
et si vous n'êtes pas prêt à galérer sérieusement, alors inutile de vous fatiguer pour rien .
Pour ceux qui débutent voir d'abord cette page plus générale et plus simple
comment_compiler_un_kernel_de_kernel.org
1
Il vous faudra aussi installer les outils de compilation :
Installez les paquets debconf-utils dpkg-dev debhelper build-essential kernel-package
libncurses5-dev
Les développeurs du noyau déconseillent de compiler le noyau en tant que root, mais cet avis
est très partagé. Faites comme bon vous semble, si vous voulez compiler en utilisateur il est
conseillé de rajouter au groupe src :
Par défaut, les sources sont dans /usr/src, sous Debian et Ubuntu il vous faut extraire le
contenu de l'archive :
cd /usr/src
tar xvjf linux-source-2.6.VERSION.tar.bz2
Les sources ne sont pas archivées dans les derniers noyaux
Il est conseillé de faire un lien symbolique intitulé linux vers le noyau (c'est bien et ça
m'aidera pour la suite) :
cd /usr/src
ln -sfn linux-source-2.6.VERSION linux ## sous Debian, Ubuntu
cd /usr/src/linux
Toutes les modifications à faire seront dans le fichier .config (qui n'existe pas par défaut). Ce
fichier contient (ou contiendra) des choses dans ce genre :
Il est évident que ce n'est pas pratique de modifier ce fichier à la main, ce serait long et très
dangereux car certaines options dépendent d'autres options. C'est pourquoi nous allons
utiliser l'interface (en console) qui permet de le modifier facilement.
NOTE : il existe aussi des interfaces graphiques mais ne sera pas aborder ici et puis vous
n'utilisez peut-être pas de serveur graphique
2
make menuconfig
—————————————————————————————————————
————————
Toute l'astuce consiste à chercher les options qui correspondent à votre matériel et à les
activer avec espace. Cette tâche est assez fastidieuse si on part de zéro9).
Ainsi si vous voulez partir avec une config qui devrait marcher je vous conseille deux choses :
Soit vous copiez un .config fonctionnel que vous optimiserez ensuite : Si vous avez déjà un
noyau fonctionnel, son .config devrait être dans le dossier /boot. Pour le copier (par exemple)
:
cp /boot/config-2.6.XX /usr/src/linux/.config
3
Ensuite, vu que ce n'est sûrement pas la même version, il faut voir s'il y a eu des modifications
dans la configuration :
make oldconfig
À chaque fois que les options seront différentes, on vous demandera de spécifier les nouvelles
options.
Cette méthode est à utiliser seulement si vous êtes certain de votre .config.
La 2ème méthode consiste à construire un noyau minimum puis à remplir les options
dont vous aurez besoin. C'est celle que je vous conseille10). Cette commande va construire un
.config minimum qui est fourni par les responsables du noyau :
make defconfig
En dur ou en modules ?
Les options que vous choisirez dans le noyau seront compilées soit en dur soit en modules.
En dur, l'option sera incluse dans le noyau. Ce qui se traduit par une étoile '*' à côté de
l'option
En modules l'option sera optionnelle11) et représentée par un M à côté de l'option,
c'est-à-dire que vous pourrez choisir de l'activer ou non.
Concrètement, ça veut dire que tout ce qui est nécessaire au démarrage de l'ordinateur doit
être compilé en dur. Et le reste en dur ou en modules.
La configuration du noyau
C'est la partie clef de votre noyau donc restez vigilants et tout se passera bien. On lance la
commande magique et on y va :
make menuconfig
On ne touchera qu'à quelques options dans le menu, on n’abordera en général que les options
vitales pour le système.
4
NOTE : certaines options changent d'endroit suivant la version du noyau. Si les
indications ne sont pas bonnes, cherchez avec /
Il faut activer quelques options pour pouvoir travailler sereinement : L'option Prompt for
development and/or incomplete code/drivers doit être activée pour pouvoir avoir accès à
certaines options. Si ce n'est pas le cas, des options seraient introuvables dans les menus.
Si vous ne savez pas quoi mettre et que vous avez un PC "normal" vous pouvez mettre PC-
compatible
Si vous utilisez des cartes PCMCIA je vous conseille d'activer quelques options ici (en dur ou
en module) :
La section NETWORKING
Cette section est utile si vous utilisez des périphériques Wi-Fi, Bluetooth, ou infrarouges. Je
vous laisse activer (en dur ou en module) ce dont vous avez besoin.
5
Si vous n'utilisez pas IPV6 vous pouvez le désactiver ici :
Networking --->
Networking options --->
< > The IPv6 protocol
Cette section est vitale, il faut absolument que la prise en charge des systèmes de fichiers des
partitions racines soit compilée en dur.
J'estime que si vous êtes arrivés jusqu'ici c'est que vous savez ce qu'est un système de fichiers.
Si vous utilisez encore des partitions FAT ou NTFS (Windows), je vous conseille ces options
:
La section suivante mériterait une page entière, c'est pourquoi je la mets en valeur :
Cette section est une des plus importantes. C'est elle qui gère les pilotes de votre matériel. Et
pas de pilote implique que le matériel ne fonctionnera pas.
Pour utiliser les ports parallèles Je vous conseille cette option, surtout si vous avez une
imprimante qui se branche sur un tel port :
6
Si vous avez utilisé make defconfig, cette section devrait être bien configurée, toutefois il y a
une optimisation à faire :
Support IDE
Pour savoir laquelle utiliser (et laquelle ne pas utiliser), vous pouvez procéder ainsi : Assurez-
vous d'avoir installé udev. Si votre disque est /dev/hda
## Vous obtenez ça :
DRIVERS=="ide-disk"
DRIVERS==""
DRIVERS=="PIIX_IDE"
DRIVERS==""
## Ou ça :
DRIVERS=="ide-disk"
DRIVERS==""
DRIVERS=="VIA_IDE"
DRIVERS==""
Cette liste pourra vous être utile si vous avez d'autres disques à activer :
7
"SIS_IDE", SiS5513 chipset support
"SLC90e66_IDE", SLC90E66 chipset support
"TRM290_IDE", Tekram TRM290 chipset support
"VIA_IDE", VIA82CXXX chipset support
Support SATA
Les disques durs SATA fonctionnent avec le pilote SCSI. Pour pouvoir avoir les bonnes
options :
On va encore utiliser udev pour savoir quels pilotes activer/désactiver : Par exemple pour
/dev/sda :
cd /usr/src/linux
find -name Makefile | xargs grep ahci
## Ce qui donne :
./drivers/ata/Makefile:obj-$(CONFIG_SATA_AHCI) += ahci.o
Donc l'option est SATA_AHCI, on a juste à lancer une recherche (/) pour trouver la bonne
option.
Vous l'aurez compris, on s'occupe de la carte réseau… Pour chaque interface (eth0 par
exemple) utilisez udevinfo :
8
Toujours par la même méthode :
Une petite recherche de 8139TOO vous donne l'option à activer. Je vous conseille de la mettre
en dur dans le noyau.
Si vous avez une carte Wi-Fi je vous conseille d'aller faire un tour ici :
La vidéo-mémoire13) (framebuffer) peut être intéressante à utiliser, c'est elle qui nous permet
de regarder des vidéos ou d'avoir un fond d'écran dans le tty. Mais cette option n'est pas
obligatoire.
On travaille ici :
Si vous apercevez le nom de votre carte graphique, vous pouvez la mettre en module.
1,2,3 compilez !
Votre noyau doit être assez bien configuré pour pouvoir démarrer maintenant. On doit donc le
compiler puis l'installer. Ici encore il y a plusieurs écoles, je vais d'abord vous expliquer la
méthode universelle puis ensuite d'autres méthodes qui permettent de faire les choses plus
proprement…
1. Compiler le noyau
2. Placer le noyau construit dans /boot
3. Configurer grub pour démarrer sur le nouveau noyau
9
La méthode universelle
On compile :
cd /usr/src/linux
make && make modules_install
On copie le noyau dans /boot : Vous pouvez lui donner le nom que vous voulez, ici l'exemple
est pour l'architecture i386, mais si vous avez une autre architecture vous devez aller voir dans
le dossier arch/
cp .config /boot/config-2.6.VERSION
cp System.map /boot/System.map.2.6.VERSION
(hd0,3) doit correspondre à la partition qui contient /boot. Pour grub, hda1=(hd0,0), ainsi
hda4=(hd0,3). Vous pouvez bien sûr rajouter des options dans la ligne "kernel", par exemple
vga=791 (pour la vidéo-mémoire, mais le nombre dépend de votre écran).
La méthode "Debian"
Si vous êtes sous Debian (ou Ubuntu), il est plus malin de créer un paquet .deb pour installer
votre noyau. Pourquoi ?
10
cd /usr/src/linux
make-kpkg --append-to-version "-perso" --initrd --us --uc buildpackage
Dans cette commande, vous pouvez personnaliser le nom de votre noyau ("-perso").
Une fois que c'est fini, le paquet doit être dans /usr/src et vous n'avez plus qu'à l'installer :
dpkg -i ../linux-image-2.6.24-perso.deb
Et voilà ! Grub est automatiquement mis à jour et votre noyau est disponible dans le menu de
grub. Un petit réamorçage et vous voilà sur votre nouveau noyau.
Puis recompilez votre noyau. Mais avant il faut supprimer les fichiers qui ont été créés
pendant la compilation :
cd /usr/src/linux
make clean # Ne supprime pas le .config
make mrproper # Supprime aussi le .config
Si vous avez utilisé make-kpkg, il faut aussi supprimer les fichiers créés par l'utilitaire
make-kpkg :
cd /usr/src/linux
make-kpkg clean
Liens
https://forums.gentoo.org/viewtopic-t-555623.html —> Configuration du noyau
http://ashgenesis.debian-fr.net/tutorial/kernel/ —> Compilation à la sauce "Debian"
https://lea-linux.org/documentations/Hardware-hard_plus-matos —> Connaître son
matériel
http://www.gentoo.org/doc/fr/gentoo-kernel.xml —> Guide du noyau Gentoo
http://casteyde.christian.free.fr/system/linux/guide/online/a12863.html —>
Configuration du noyau
http://www.kroah.com/lkn/ —> Linux Kernel in a Nutshell [EN]
11