Ceci est une ancienne révision du document !
Ubuntu (toutes version) Doit théoriquement aussi marcher sur une Debian
Comment compiler un noyau de Kernel.org
Il peut être utile de compiler un ancien noyau (pour pallier une incompatibilité sources avec un module spécifique et le noyau 2.6.20 par exemple) je vais donc détailler comment faire et j'invite tous ceux qui le veulent à ajouter des précisions …
On peut aussi vouloir faire de la compilation croisée : voir ici.
Pré-requis :
- Savoir utiliser la console ;
- Savoir ce que sont "linux", "module", etc. ;
- Connaître la configuration de l'ordinateur pour lequel vous compilez ;
- Une bonne heure pour configurer ;
- Une heure ou plus pour la compilation suivant la puissance de votre ordinateur.
Dépendances
Paquets basique
Tout d'abord il faut installer le strict minimum pour la compilation :
Installez les paquets build-essential | kernel-package | initramfs-tools | fakeroot
Installez les paquets debconf-utils | dpkg-dev | debhelper | bin86
Paquets pour créer le ".config"
".config", c'est le fichier de configuration contenant les instructions de compilation.
Pour une interface graphique (bleue) en console : installez le paquet libncurses5-dev
Pour une interface en TK : installez le paquet tk-dev
Pour une interface en GTK+ (noyau 2.6 seulement) : installez les paquets libglib2.0-dev libgtk2.0-dev libglade2-dev
Pour une interface en QT (noyau 2.6 seulement) : installez les paquets libqt3-mt-dev libqt3-headers
Téléchargement des sources
Le répertoire /usr/src
Nous supposerons ici que vous compilerez dans le répertoire /usr/src
Vous pouvez bien entendu utiliser un autre répertoire, mais disons que celui-ci c'est celui de base, alors autant faire comme ça
Il faut déjà que vous sachiez dans quel groupe vous vous trouvez :
groups
Si vous n'appartenez pas au groupe "src", ajoutez-vous :
sudo adduser $USERNAME src ## besoin de se fermer la session pour que cette commande prenne effet. sudo chown $USERNAME /usr/src ## si la commande du dessus ne vous donne pas l'accès en écriture du dossier /usr/src...
Il faut maintenant se reconnecter sous votre login pour que les nouveaux droits soit fonctionnels.
su - $USERNAME ## Entrer votre mot de passe
Allez dans le répertoire /usr/src:
cd /usr/src
Vous pouvez supprimer les sources des anciens noyaux que vous avez compilés (s'il y en a) :
rm -d -r ./linux-2.*
Noyau
Ensuite il faut télécharger l'archive sur Kernel.org: lien vers le ftp pour les 2.6 Ou alors placez vous dans le dossier /usr/src et entrer la commande suivante pour télécharger le noyau . (ici la version la plus à jour 2.6.31)
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.5.tar.bz2
Idéalement, téléchargez-le dans /usr/src et décompressez-le :
tar xvf linux-2.*.tar.bz2
ALSA (2.4 seulement)
Alsa est le nouveau système de son de Linux, très utilisé. Malheureusement il n'est pas utilisé par défaut dans les noyaux 2.4…
sudo apt-get install alsa-source tar xvf alsa<TAB>.tar.gz
Normalement tout se trouve alors dans /modules/alsa-driver/ :
Il faut ensuite configurer alsa :
jm@ubuntu:/usr/src$ cd modules/alsa-driver jm@ubuntu:/usr/src/modules/alsa-driver$ ./configure --help
Avec le configure vous devriez pouvoir choisir le module de votre carte son (lisez le readme)
jm@ubuntu:/usr/src/modules/alsa-driver$ ./configure
Malheureusement chez moi, je suis BLOQUÉ à l'étape où il cherche le fichier "version.h" du noyau… Si vous savez comment résoudre cela, corrigez ici !!
NVIDIA
Avec la technique des liens symboliques
Voir ce How-To.
Avec le module
Il faut installer le paquet de sources à inclure au noyau :
- Si vous utilisez le paquet nvidia-glx-new, installez le paquet nvidia-new-kernel-source
- Si vous utilisez le paquet nvidia-glx, installez le paquet nvidia-kernel-source
- Si vous utilisez le paquet nvidia-glx-legacy, installez le paquet nvidia-legacy-kernel-source
Une fois le paquet installé, il se trouve dans le dossier /usr/src/ ,alors décompressez :
tar xvfz nvidia<TAB>.tar.gz
Vous devriez avoir un dossier /modules/nvidia-kernel (ou nvidia-kernel-legacy ou nvidia-kernel-new selon le paquet installé).
Lors de la compilation, n'oubliez pas d'ajouter en paramètre (selon le paquet installé) :
--added-modules=nvidia-kernel --added-modules=nvidia-kernel-legacy --added-modules=nvidia-kernel-new
Avec le .run du site
Ne faites rien pour l'instant, puis une fois votre noyau compilé, téléchargez le .run sur le site officiel.
ATI
(Méthodes non-testée)
Avec la technique des liens symboliques
Voir ce How-To.
Avec le module
J'imagine que ça doit être comme pour NVidia avec le paquet fglrx-kernel-source ??
Avec le .run du site
Ne faites rien pour l'instant, puis une fois votre noyau compilé, téléchargez le .run sur le site officiel.
Configuration
Rendez-vous dans le dossier "linux-2.'la version téléchargée'" :
cd /usr/src/linux-2.*
Récupérez la configuration de votre noyau actuel, pour ne pas avoir à tout reconfigurer et garder ce qui marche:
cp /boot/config-`uname -r` ./.config
Initialisez votre nouveau jeu d'options :
make oldconfig
Vous pouvez garder toutes les réponses proposées par défaut et juste appuyer sur entrer lorsqu'il vous pose une question.
Pour créer une configuration en mode console :
make config ## Déconseillé pour les débutants et même les autres
Pour créer une configuration en mode semi-graphique (menu bleu) :
make menuconfig
Pour créer une configuration en TK ou en QT :
make xconfig
Si la commande précédente retourne une erreur du type "qconf: cannot connect to X server", essayez :
#exit $sudo xhost + $su #cd /usr/src/linux-2.* #make xconfig
Pour créer une configuration en GTK+ (interface GNOME -elle n'est pas bien finie…) :
make gconfig
Si vous n'avez rien à configurer, cliquez simplement sur enregistrer dans l'interface graphique qui apparaît Si vous avez envie de configurer au mieux votre noyau, aidez-vous de la page kernel_options
Compilation
La compilation se fait avec make-kpkg qui automatise en fait plusieurs commandes :
- make dep - établit les dépendances entre fichiers constitutifs du code noyau
- make clean - supprime les objets résultant d'une compilation antérieure du noyau (si elle a eu lieu)
- make bzImage - produit l'image compressée qui servira à l'amorçage
- make modules - compile les modules
En résulte alors un paquet *.deb (si vous utilisez la cible buildpackage) qu'il faudra installer avec dpkg :
sudo dpkg -i linux*.deb
Les arguments de compilation
Il existe différents arguments à make-kpkg :
--initrd
Le plus important, crée un fichier initrd qui permet d'utiliser des modules directement à l'amorçage du noyau.
--rootcmd=fakeroot|sudo
Vous permet de choisir avec quelle méthode vous permettez à make-kpkg d'utiliser les ressources de root.
Vous pouvez également compiler en root :
jm@ubuntu:/usr/src/linux/$ su root Password: root@ubuntu:/usr/src/linux/$ root@ubuntu:/usr/src/linux/$ make-kpkg --initrd kernel_image
--added_modules
Pour ajouter des modules (alsa, nvidia/ATI, etc…). Pour en mettre plusieurs, séparez avec une virgule :
--added-modules=alsa-driver,nvidia-kernel-legacy
--append-to-version & --revision
FACULTATIF
Pour ajouter une version à votre noyau (voir comment_compiler_un_kernel_sur_mesure_old).
Les cibles de compilation
buildpackage
C'est celle qu'il faut utiliser si vous débutez !!
Cela a pour conséquence d'utiliser la cible "clean et "binary" décrite ci-dessous.
clean
Permet de « nettoyer le répertoire des sources du noyau de tous les fichiers créés par l'invocation de l'une des cibles données ci dessous, et effectue un make distclean » (traduction de la partie du manuel consacré à cette cible $ man make-kpkg).
binary
Cette cible « construit les quatre paquets Debian du noyau en utilisant les cibles kernel_source, kernel_headers, kernel_doc et kernel_image (traduction de la partie du manuel consacré à cette cible *$ man make-kpkg).
kernel_doc
Cet autre cible compile et crée pour vous un paquet Debian contenant les documentations fournis avec le noyau.
kernel_image
Cela permet de créer un paquet qui contient l'image du noyau, ses modules et permet aussi la configuration automatique de GRUB ou de LILO.
kernel_source
Cette cible construit un paquet Debian des sources du noyau Linux que vous compilez. Cela est particulièrement utile si vous souhaitez réutiliser ultérieurement les sources du noyau que vous souhaiteriez conserver.
kernel_headers
Celle-ci a pour but de produire un paquet Debian contenant les entêtes du noyau Linux. Les entêtes peuvent être nécessaires pour compiler certains programmes.
modules_image
Cette cible a pour but de produire un paquet Debian pour chaque module supplémentaire que vous avez installé et qui se trouve dans le répertoire /usr/src/modules/.
Compilation basique
La commande la plus basique pour compiler :
Sous Ubuntu
sudo make-kpkg --initrd buildpackage
Sous Debian
su -c 'make-kpkg --initrd buildpackage'
Retournez dans le dossier précédent :
cd ..
Et installer les *.deb :
Sous Ubuntu
sudo dpkg -i linux*.deb
Sous Debian
su -c 'dpkg -i linux*.deb'
Voilà c'est fait
Liens
HOW-TO : Utiliser le linux-restricted-module pour un noyau compilé :
http://ubuntuforums.org/showthread.php?t=441013
Un bon guide pour Debian pleins d'infos sympa :
http://www.andesi.org/index.php?node=77
Un guide pour installer la carte wifi Intel PRO/Wireless 2200BG
http://forum.ubuntu-fr.org/viewtopic.php?pid=1108685#p1108685
Contributeurs: Créée par Fabien26, énormément améliorée par adam0509, et mise à jour par BeAvEr.