Ceci est une ancienne révision du document !
(Cette page est une traduction inspirée de https://wiki.ubuntu.com/KernelCustomBuild par mr_pouit)
Versions concernées
- Edgy 6.10
- Pour les versions précédentes, utilisez custom_kernel
Introduction
Dans la suite de ce didacticiel, le mot "kernel", qui signifie "noyau", est utilisé car beaucoup d"entre vous l'ont entendu, ou l'entendront sûrement au milieu d'une conversation en français.
Avertissement
Compiler et utiliser un kernel personnalisé va rendre compliqué le support pour votre système. Vous ne serez pas autorisé à rapporter des bogues pour votre kernel personnalisé (ils seront rejetés sans explication).
Si vous avez un contrat de support commercial avec Ubuntu/Canonical, ceci rendra ce support caduque.
Notez par ailleurs que cette page décrit comment procéder pour le kernel d'Edgy (2.6.17) ou ultérieur ! Les versions précédentes ne comprenaient pas, intentionnellement, un tel mécanisme permettant de compiler aisément son propre noyau.
Cette page ne décrit pas comment compiler les kernels provenant de kernel.org. Elle est destinée aux sources du kernel Ubuntu.
Bonnes raisons de compiler un kernel personnalisé
- Vous êtes un développeur du kernel.
- Vous avez besoin de compiler d'une façon spéciale, que le kernel officiel n'offre pas (par exemple, pour activer des fonctionnalités expérimentales).
- Vous essayez de déboguer un problème pour lequel vous avez ou allez remplir un rapport de bug à propos du kernel officiel Ubuntu.
Mauvaises raisons de compiler un kernel personnalisé
- Vous avez à tout prix besoin de compiler un pilote spécial. Pour cela, il faut vous faut seulement installer les paquets linux-headers.
- Vous n'avez pas la moindre idée de ce que vous faites, et si vous cassez quelque chose, vous aurez besoin d'aide pour réparer. Si vous détruisez votre système, réinstallez-le. N'ennuyez pas en demandant de l'aide.
- Vous avez atterri sur cette page par erreur, mais vous la lisez car elle semble intéressante. Ce n'est pas intéressant du tout, croyez-moi. :)
Prérequis
Pour commencer, il faut installer quelques paquets :
sudo apt-get install linux-kernel-devel fakeroot kernel-wedge kernel-package
Cela va installer les outils relatifs à la compilation et l'empaquetage du kernel. Le paquet git-core, qui est le meilleur moyen pour interagir avec les sources du kernel Ubuntu, sera aussi installé.
Téléchargement des sources
Il y a deux moyens pour obtenir les sources du kernel Ubuntu. Idéalement, il faudrait utiliser git. Les instructions détaillées pour l'utiliser sont disponibles sur guide_kernelgit.
La seconde méthode est plus simple :
sudo apt-get install linux-source-2.6.17
Cependant, ce ne sera pas toujours à jour. L'utilisation de git vous permet de toujours rester avec la dernière version des sources du kernel Ubuntu.
Adaptation des sources à vos besoins
Pour la majorité des gens, modifier seulement les fichiers de configuration suffira. Si vous devez appliquer un patch, lisez les instructions données par le fournisseur du patch.
Les configurations "officielles" Ubuntu se trouvent dans debian/config/ARCH/, où ARCH désigne l'architecture pour laquelle vous compilez. Plusieurs fichiers sont présents dans ce répertoire. Le fichier config est la base pour toutes les cibles de cette architecture. Ensuite, les nombreux fichiers config.FLAVOUR contiennent des options spécifiques à chaque cible. Par exemple, voici les fichiers pour le kernel 2.6.17, et l'architecture i386 :
$ ls -l debian/config/i386/ total 88 -rw-r--r-- 1 me me 62737 Jun 14 18:31 config -rw-r--r-- 1 me me 1859 Jun 12 14:59 config.386 -rw-r--r-- 1 me me 1394 Jun 12 14:59 config.686 -rw-r--r-- 1 me me 1420 Jun 12 14:59 config.k7 -rw-r--r-- 1 me me 1519 Jun 12 14:59 config.server -rw-r--r-- 1 me me 1867 Jun 12 14:59 config.server-bigiron
Si vous devez changer une option de configuration, modifier simplement le fichier contenant l'option. Si vous éditez le fichier config, les changements affecteront toutes les architectures. Si vous modifiez un des fichiers cible, seule la cible sera affectée.
Note: Si aucun fichier n'est présent, vous pouvez en trouver dans le répertoire /boot. Par exemple:
$ ls -l /boot | grep config -rw-r--r-- 1 root root 69733 2006-08-03 05:10 config-2.6.15-26-686 -rw-r--r-- 1 root root 69759 2006-08-03 05:36 config-2.6.15-26-k7
Suite à l'application d'un patch ou l'ajout d'une option, il est préférable de régénérer les fichiers de configuration. Il y a un "assistant" pour cela. Pour régénérer toutes les architectures, exécutez :
debian/rules updateconfigs
Si vous voulez mettre à jour une architecture seulement, exécutez :
debian/bin/oldconfig ARCH
Compilation du kernel
La compilation du noyau est une étape très simple. Selon vos besoins, vous pouvez vouloir compiler toutes les cibles, ou seulement celle spécifique à votre système. Cependant, vous désirez aussi vous assurez que ce que vous faites n'entre pas en conflit avec le kernel officiel.
Utilisez la commande suivante pour contruire toutes les cibles de l'architecture pour laquelle vous compilez :
AUTOBUILD=1 fakeroot debian/rules binary-debs
La variable d'environnement AUTOBUILD déclenche des fonctionnalités spéciales pendant la compilation du kernel. Premièrement, cela n'effectue pas les vérifications normales d'ABI (l'ABI est la compatibilité binaire). Cela est rendu possible par le fait qu'un unique identifiant d'ABI (ABI ID) est créé. Si vous utilisez le depôt git, cet identifiant est généré depuis le git HEAD SHA. Sinon, il est généré à l'aide du programme uuidgen (ce qui signifie qu'à chaque exécution de la construction avec debian/rules, l'identifiant sera différent !). Le paquet créé sera nommé à l'aide de cet identifiant.
Pour construire une cible spécifique, utilisez la commande suivante :
AUTOBUILD=1 fakeroot debian/rules binary-debs flavours=k7
Ceci aura pour effet de ne compiler que la variante AMD k7 de l'architecture i386.
Installation
Les paquets ainsi générés sont placés dans ubuntu-2.6/debian/build. Maitenant que la construction a réussi, vous pouvez installer les paquets à l'aide de dpkg :
sudo dpkg -i linux-image-2.6.17-2-ef427c-k7_2.6.17-2.2_i386.deb sudo dpkg -i linux-headers-2.6.17-2-ef427c-k7_2.6.17-2.2_i386.deb
Note : Si vous utilisez les modules du paquets linux-restricted-modules, il sera nécessaire de les recompiler en utilisant votre nouveau paquet linux-headers. Des détails sur cette manipulations seront ajoutés ultérieurement