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 utiliser make gconfig, libqt3-dev pour make xconfig, et rien du tout si vous comptez utiliser make 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
linux/noyau.txt · Dernière modification: 2009/08/03 20:25 (édition externe)
Recent changes RSS feed Creative Commons License Donate Driven by DokuWiki