Compiler son noyau Linux
Durée totale : 15 min à 1h (suivant la puissance de votre ordinateur) + temps de configuration du noyau
Difficulté : 2/5 .. c'est la configuration qui est difficile
Pré-requis : connection Internet fonctionnelle lors des préparatifs
Préparatifs
A ne faire qu'une seule fois
Installer (via Synaptic par exemple) les paquets suivants :
- dans tous les cas :
kernel-package
- si vous prévoyez d'utiliser l'option
initrd
(si vous ne savez pas, supposez que oui) :cramfsprogs
- si vous prévoyez de configurer votre noyau :
libncurses5-dev
- si vous voulez configurer votre noyau en mode graphique :
libglade-2.0dev
pour utilisermake gconfig
,libqt3-dev
pourmake xconfig
, et rien du tout si vous comptez utilisermake menuconfig
.
Télécharger sources noyau
Vous pouvez
- soit télécharger les sources officielles sur kernel.org (dans la ligne latest stable version, cliquer sur F - comme full). Placer alors le .tar.bz2 dans le répertoire (
/usr/src/
) et décompressez-le (clic-droit, extraire les fichiers). Puis faites un lien appelé linux (ou “raccourci” dans le langage Windows) vers ce répertoire :
cd /usr/src/ sudo tar -xjf linux-source....tar.bz2 sudo ln -s linux-source-... linux cd linux
- soit télécharger les sources Ubuntu, qui ont subi quelques patchs, mais qui sont également pas mal en retard par rapport au noyau officiel (comptez 4-5 mois au moins de différence). Dans ce cas là, installer le paquet
linux-source
et décompressez-le de la même facon que précédemment.
cd /usr/src/ sudo tar -xjf linux-....tar.bz2 sudo ln -s linux-... linux cd linux
Pour le moment, je n'ai trouvé aucun avantage à utiliser les sources Ubuntu : le seul avantage serait qu'elles prennent un compte un de vos composants que le noyau officiel ne supporte pas.
Configurer noyau
C'est la partie difficile : Configurer son noyau. Il faudra notamment utiliser la commande
sudo make menuconfig
Compiler
Il vous faut dans un premier temps nettoyer une éventuelle précédente compilation :
sudo make-kpkg clean
Puis vous pouvez lancer la compilation du noyau :
sudo make-kpkg --append-to-version=.best --revision=1 kernel_image
Quelques explications sur make-kpkg
(le man est très bien fait : si vous voulez une aide complète, faites man make-kpkg
) :
- C'est un script qui compile le noyau et crée un paquet Debian (.deb) dans le répertoire parent (
/usr/src/
ici). - Les options de make-kpkg (précédées par –) :
- –append-to-version=.pouet : ajoute un nom à votre noyau. Par exemple, si vos sources de noyau s'appellent 2.6.17.7, le noyau créé avec cette option s'appellera 2.16.17.7.pouet . Je vous conseille très fortement d'ajouter un tel suffixe pour différencier votre noyau d'un noyau officiel
- –revision=1 : change le numéro de révision de compilation. Vous ne pouvez installer 2 paquets dont seul le numéro de révision diffère. Placer donc ce paramètre à 1
- –initrd : Active le support de l'INITial Ram Disk.Au prix d'un démarrage un peu plus lent, permet de charger des modules dans le noyau lorsque le noyau n'est pas encore complètement chargé. Imaginez par exemple que le système de fichiers de la partition où se trouve votre noyau ne soit lisible par le noyau via un module (et non en dur) : comment charger ce module, alors que le noyau n'est pas encore chargé ?? 2 solutions : mettre le module en dur, ou utiliser l'initrd.
- Les cibles de make-kpkg (sans – avant) = ce que vous voulez que make-kpkg créé :
- kernel_image : le plus important, c'est le noyau utilisable tel quel (et ses modules).
- kernel_headers : inclut les headers dans le package.. (assez utile)
- kernel_doc : peu utile pour une compilation “pour soi”
- binary = kernel_image + kernel_source + kernel_headers + kenel_doc
Tester ... et recommencer
Après environ 20 minutes de compilation, vous obtiendrez dans le répertoire parent (un ou) plusieurs paquets.
Il vous suffit d'installer celui appellé kernel-image-..
(avec les bonnes versions et révisions) soit graphiquement (double-clic sur le paquet), soit en exécutant la commande
sudo dpkg -i kernel-image-....deb
Il ne vous restera plus qu'à booter et à sélectionner le bon noyau au démarrage et admirez le résultat (ou les kernel panic !!). Une fois le noyau testé, vous pouvez le désinstaller via la commande
sudo dpkg -r kernel-image-...
Tout sera nettoyé (grub et Cie).
Compiler modules propriétaires
Nvidia
Il faut aller sur le site de nvidia (le site français a toujours du retard sur l'international). Une fois le .run
téléchargé, il suffit de faire
sudo sh NVIDIA-Linux-*.run --accept-license --kernel-module-only --kernel-name=2.6.23.8.best
si vous avez déjà installé les pilotes propriétaires (mais pour un autre noyau). Sinon enlever l'option –kernel-module-only
, mais vous aurez besoin de quitter votre serveur X (et donc KDE ou Gnome) pour continuer l'installation.
Pour modifier le code
Si vous souhaitez faire des modifications sur le pilote avant de le compiler et de l'installer, vous pouvez faire
sudo NVIDIA-Linux-x86-96.43.01-pkg1.run --extract-only cd NVIDIA-Linux*/usr/src/nv sudo nano os-registry.c
Vous aurez alors accès à certaines constantes que vous pourrez modifier avant la compilation. Attention, certaines constantes ne sont pas prises en compte par défaut: il faut alors modifier le tableau nv_parms
à la fin du fichier et vérifier que le numéro après le(s) constante(s) que vous modifiez est bien 1. Ensuite, pour compiler il vous suffira d'utiliser les mêmes options que citées plus haut, mais avec avec nvidia-installer
contenu dans le répertoire créé lors de l'extraction:
sudo sh /usr/src/NVIDIA*/nvidia-installer --accept-license --kernel-name=2.6.23.1.best --kernel-module-only
Madwifi
Après avoir téléchargé les sources de madwifi via SVN, vous pouvez compiler les pilotes pour votre nouveau noyau (non encore démarré) par
cd /usr/src/ sudo svn checkout http://svn.madwifi.org/madwifi/trunk madwifi cd madwifi sudo make KERNELPATH=/usr/src/linux sudo make install
VirtualBox
Si vous utilisez VirtualBox, il vous faudra recompiler un module par la seule commande
sudo /etc/init.d/vboxdrv setup