Compiler son noyau
Un article de Wiki de la communauté Mandriva.
Sommaire |
[modifier] Pourquoi compiler soi-même son noyau ?
On entends souvent des personnes parler de compilation de noyau (ou kernel). Il faut être clair : ce n'est pas une opération obligatoire. Mandriva nous fournit des noyaux génériques qui fonctionnent pour une très large gamme d'ordinateurs
Mais alors, ça ne sert à rien ?
Pas vraiment. On y gagne toujours que ce soit :
- Pour le plaisir de la connaissance : on apprendra toujours quelque chose
- Pour améliorer la performance : un temps de démarrage plus rapide, choix particulier du processeur, matériel...
- Pour rentrer dans le cercle des geeks de votre patelin.
- ...
[modifier] Avant de commencer
[modifier] Les sources du noyau
Pour compiler un noyau, il fait bien évidement les sources : le code écrit en langage compréhensible par les humains. La compilation aura pour effet de le transcrire en langage machine.
Là, deux solutions :
- Télécharger les sources depuis : http://www.kernel.org/
- Installer les sources du dernier noyau de Mandriva.
C'est la seconde option que nous allons prendre, par simplicité, car comme nous verrons, nous disposerons des options choisies par Mandriva, et nous n'aurons qu'à changer que quelques unes d'entre elles.
[modifier] Connaître le noyau actuel et le matériel
Cela pourra nous être utile :
Linux localhost 2.6.24.7-desktop-2mnb #1 SMP Thu Oct 30 18:03:14 EDT 2008 i686 Genuine Intel(R) CPU T2060 @ 1.60GHz GNU/Linux
J'ai donc le noyau 2.6.24.7-desktop-2mnb
Pour le matériel, une commande utile sera
qui vous fera la liste de vos cartes graphiques, wifi ou ethernet...
[modifier] Les sources des noyaux Mandriva
Nous allons utiliser le Centre de Contrôle Mandriva. En cherchant kernel-source, vous obtiendrez une liste de source pour différentes versions et aussi un paquet un peu spécial (un méta-paquet) nommé kernel-source-latest qui installera automatiquement les sources du noyau le plus récent. C'est ce qui nous intéresse, car nous allons compiler la dernière version, tant qu'à faire.
[modifier] Les outils indispensables
Quelques outils sont aussi nécessaires pour compiler. Vérifiez s'ils sont présents sur votre machine.
- make
- gcc
[modifier] Configuration
C'est sans doute l'étape la plus longue et la plus difficile. je vous conseille dans un premier temps de ne modifier que quelques options...
Les sources que nous venons d'installer se trouvent dans /usr/src. Ils sont classés par versions. Je fais donc :
Listons les éléments de ce répertoire :
drwxr-xr-x 21 root root 4096 2008-11-13 21:13 ./ drwxr-xr-x 11 root root 4096 2008-11-13 21:14 ../ drwxr-xr-x 14 root root 4096 2008-11-13 21:12 3rdparty/ drwxr-xr-x 4 root root 4096 2008-11-13 21:12 arch/ drwxr-xr-x 2 root root 4096 2008-11-13 21:12 block/ -rw-r--r-- 1 root root 88668 2008-10-30 23:41 .config -rw-r--r-- 1 root root 18693 2008-01-24 23:58 COPYING -rw-r--r-- 1 root root 92504 2008-10-30 22:19 CREDITS drwxr-xr-x 3 root root 4096 2008-11-13 21:12 crypto/ drwxr-xr-x 70 root root 12288 2008-11-13 21:12 Documentation/ drwxr-xr-x 76 root root 4096 2008-11-13 21:12 drivers/ drwxr-xr-x 64 root root 4096 2008-11-13 21:12 fs/ drwxr-xr-x 21 root root 4096 2008-11-13 21:12 include/ drwxr-xr-x 2 root root 4096 2008-11-13 21:12 init/ drwxr-xr-x 2 root root 4096 2008-11-13 21:12 ipc/ -rw-r--r-- 1 root root 1596 2008-01-24 23:58 Kbuild drwxr-xr-x 5 root root 4096 2008-11-13 21:12 kernel/ drwxr-xr-x 6 root root 4096 2008-11-13 21:12 lib/ -rw-r--r-- 1 root root 94323 2008-10-30 22:19 MAINTAINERS -rw-r--r-- 1 root root 53220 2008-10-30 23:41 Makefile drwxr-xr-x 2 root root 4096 2008-11-13 21:12 mm/ drwxr-xr-x 42 root root 4096 2008-11-13 21:12 net/ -rw-r--r-- 1 root root 16930 2008-01-24 23:58 README -rw-r--r-- 1 root root 3119 2008-01-24 23:58 REPORTING-BUGS drwxr-xr-x 3 root root 4096 2008-11-13 21:12 samples/ drwxr-xr-x 9 root root 4096 2008-11-13 21:13 scripts/ drwxr-xr-x 5 root root 4096 2008-11-13 21:13 security/ drwxr-xr-x 20 root root 4096 2008-11-13 21:13 sound/ drwxr-xr-x 2 root root 4096 2008-11-13 21:13 usr/
Un fichier attirera particulièrement votre attention : il s'agit de .config. Il contient tous les paramètres choisis par Mandriva pour ce noyau. Ce sont ces paramètres que nous allons modifier pour qu'ils correspondent au mieux à nos besoins.
[modifier] Ne pas travailler dans /user/src/
Il n'est pas conseillé de travailler directement dans /user/src/. Nous allons donc travailler dans notre /home.
Un extrait d'un message de Linux Torwald :
Je suggère aux personnes qui compilent un nouveau noyau de : - ne pas le faire dans /usr/src. Quelque soit le noyau provenant de votre distribution (probablement les fichiers d'entêtes uniquement), mais en tout cas n'y touchez pas. - compiler le noyau dans leur propre répertoire personnel. Il est inutile d'être root pour compiler le noyau. Vous avez besoin d'être root pour installer le noyau, mais c'est différent. - ne pas avoir l'intention de faire un lien symbolique (excepté celui que le noyau créé lui-même, à savoir le lien "linux/include/asm" qui est utilisé uniquement pour la compilation interne du noyau). Et bien sûr, c'est ce que je fais. Mon /usr/src/linux a encore les fichiers d'entêtes de mon ancien 2.2.13, bien que je n'ai pas utilisé le noyau 2.2.13 depuis très longtemps. Mais ces entêtes étaient ceux qu'avait compilé la glibc, donc ces entêtes sont ceux qui correspondent aux fichiers de la bibliothèque objet. Et c'est en fait ce qui a été l'environnement suggéré depuis au moins cinq ans. Je ne sais pas pourquoi l'habitude de faire des liens symboliques est restée ainsi. De nombreuses distributions ont ce lien symbolique cassé, et les gens se souviennent que les sources du noyau devraient être dans "/usr/src/linux" même si ce n'est pas vrai depuis très longtemps.
En tant qu'utilisateur, je crée un dossier nommé /src.
puis je crée un lien symbolique de mes sources vers mon nouveau dossier.
Dorénavant, nous travaillerons dans ~/src/linux. (cd ~/src/linux/ pour s'y rendre)
[modifier] Les divers outils
Pour modifier notre .config, on a plusieurs choix possibles :
- make menuconfig
C'est celui-ci que j'utiliserai. Un petit descriptif en haut décrit les touches utiles.
- make xconfig (QT)
- make gconfig (GTK)
- make config : des questions vous sont posées une à une...
ou simplement votre éditeur texte favoris, mais c'est pour le pro exclusivement.
[modifier] En module, en dur
Il y a deux manières de mettre une option au noyau :
- En dur.
La fonctionnalité fait partie intégrante du noyau.
- En module.
La fonctionnalité est séparée du kernel à proprement parler, et est greffée si besoin est.
Bien sûr, on ne peut pas tout mettre en module, car certaines sont vitales et doivent être mise en dur.
Ainsi on a : [ ] fonctionnalité en dur uniquement non activée. [*] fonctionnalité en dur uniquement activée.
< > fonctionnalité en module ou en dur non activée. <M> fonctionnalité en module ou en dur mise en module. <*> fonctionnalité en module ou en dur mise en dur.
[modifier] Quelques options...
Je vais ici vous montrer quelques options que l'on peut modifier facilement. Ensuite, à vous de lire l'aide fournie lors de l'édition de votre .config.
- Processor type and features
> Processor family
Là, on peut modifier le type de processeur pris en charge. Par défaut, c'est un pentium pro, ce qui pour mon double cœur, n'est pas génial. Je vais donc sélectionner core 2.
>Toshiba / Dell laptop support
Je possède un Toshiba, donc je peux supprimer le support de Dell, il ne me servira pas.
>High memory support
Ici, on gère la quantité de ram prise en charge...
- Power management options > CPU Frequency scaling
On y voit des choses concernant AMD, Intel, Nvidia... J'ai un intel et une ATI, je supprime les modules concernant AMD et Nvidia.
- Networking
Bluetooth, IR... il y a sûrement des choses à désactiver.
Ensuite, à vous de regarder les divers options et d'activer/désactiver ce que vous souhaitez.
[modifier] Compilation
Avant de compiler, nous allons modifier un petit paramètre dans le fichier Makefile. Il s'agit de EXTRAVERSION. Après le signe égal, mettez ce que vous voulez. Par ex : EXTRAVERSION= .7-2mnb-perso Vous pourrez ainsi l'identifier comme étant votre kernel
La compilation se fait en lançant la commande suivante :
qui est en fait une succession de trois commandes qui ne s'exécutent que si la précédente s'est soldée par un succès.
- make
Ceci a pour effet de compiler le noyau. A noter que si vous possédez un processeur double cœurs, vous pouvez utiliser l'option -j2 qui fera utiliser vos deux processeurs. -j4 pour 4 cœurs etc. Le noyau est ajouté dans /boot/.
- make modules_install
Compile les divers modules.
- make install
[modifier] Editer son menu Grub
Je pense que vous utilisez Grub, le bootloader par défaut de Mandriva. Il faut donner une nouvelle entrée à Grub pour qu'il puisse vous proposer le choix de charger votre noyau fraichement compilé.
J'y ajoute :
title linux-perso kernel (hd0,6)/boot/vmlinuz-2.6.24.7-2mnb-perso BOOT_IMAGE=linux-perso root=UUID=8101ef90-3011-11dd-9934-c77360c3928e resume=/dev/sda5 initrd (hd0,6)/boot/initrd-2.6.24.7-2mnb-perso.img
Inspirez vous des autres lignes de votre fichier et de cet exemple pour faire le votre.
Il est maintenant venu le temps de rebooter et de voir si votre noyau fonctionne ou non.

