Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriel:comment_compiler_un_kernel_sur_mesure_old [Le 22/12/2006, 08:54]
Blackpegaz redirection vers nouvelle version de page
— (Version actuelle)
Ligne 1: Ligne 1:
-{{tag>​warty hoary breezy kernel système programmation tutoriel}} 
  
-====== Personnaliser son kernel ou comment compiler un kernel sur mesure ? (ancienne méthode) ====== 
- 
- 
-===== Versions concernées ===== 
- 
-   * Warty, Hoary et Breezy. 
-   * Pour les versions suivantes, utilisez [[tutoriel:​comment_compiler_un_kernel_sur_mesure|cette page]]. 
- 
-Note du traducteur: //kernel// ici signifie //noyau// en français, je n'ai pas traduit ce mot car beaucoup d'​entre vous l'ont entendu, ou l'​entendront sûrement au milieu d'une conversation en français, cependant il est important d'en comprendre le sens pour mieux le situer dans le fonctionnement du système. 
- 
-===== Comment installer un kernel Linux personnalisé ===== 
-Le kernel Linux est le coeur du système d'​exploitation Ubuntu. Le kernel fourni par Ubuntu devrait normalement vous fournir tous les drivers nécessaires,​ mais dans le cas où vous souhaiteriez le modifier, le reconfigurer ou simplement auriez besoin de le recompiler pour quelques raisons que ce soit, ce guide devrait vous aider. 
- 
-===== Préparation ===== 
-Vous aurez besoin des paquets //​build-essential fakeroot// et //​kernel-package//,​ pour faire un nouveau kernel. 
-<​code>​ 
-sudo apt-get install build-essential fakeroot kernel-package 
-</​code>​ 
-les kernels se font dans le dossier ///​usr/​src//,​ pour travailler dans ce dossier ajoutez vous au groupe **src**: 
-<​code>​ 
- sudo adduser <​user>​ src 
-</​code>​ 
-en remplacant <​user>​ par votre login. Fermez puis relancez la session, ou relancez une nouvelle session avec //su// 
-<​code>​ 
- su <​user>​ 
- ​groups 
-user src audio adm dialout cdrom floppy video plugdev lpadmin 
-</​code>​ 
-//groups// listera tous les groupes dans lesquels vous êtes, //src// doit normalement apparaitre dans la liste. Si vous vous êtes logué dans votre session bash par un nouveau //su// la commande //exit// en tant que user fermera cette nouvelle session et vous redonnera l'​ancienne qui était loguée sans appartenir au groupe //src//. 
- 
-===== Obtenir les sources ===== 
-Cherchez les sources du kernel que vous souhaitez avec: 
-<​code>​ 
- ​apt-cache search source 2.6 
-</​code>​ 
-Choisissez la version des sources du kernel que vous désirez. 
-        ***Question**:​ Le paquet des sources du kernel s'​appelle quelques fois **kernel-source**-2.6.5 etc... et d'​autres **linux-source**-2.6.8.1. Pourquoi ? 
- 
-Le paquet //​kernel-source//​ viens de **Debian**, le //​linux-source//​ de **Ubuntu**. Utilisez //​linux-source//​ si possible. Toutes les dépendances n'ont pas encore été changées, donc si vous avez des messages d'​avertissements à propos de "​paquet kernel-source non-installé"​ même si linux-source est installé, vous pouvez les ignorer sans problèmes. --Bronson 
- 
-Téléchargez les sources du kernel : (ici nous utilisons la version par defaut installée avec Ubuntu Hoary 2.6.10-5) 
-<​code>​ 
- sudo apt-get install linux-source-2.6.10 
-</​code>​ 
-Il va probablement vous proposer d'​installer deux paquets **libncurses-dev** et **libqt3-dev**,​ le premier est nécessaire pour le menuconfig et le second pour le xconfig, installez au moins l'un des deux. (Nous verrons plus loin pourquoi) 
-(Pour se servir toutefois de gconfig, il est nécessaire d'​avoir le paquet **libglade2-dev**.) 
- 
-Les sources vont êtres téléchargées et installées dans ///​usr/​src//​ 
- 
-===== Dépaqueter les sources ===== 
- 
-Je vais prendre le kernel 2.6.10 comme exemple, c'est la version installée avec Ubuntu Hoary 
-<​code>​ 
- cd /usr/src 
-ls -l 
-linux-source-2.6.10.tar.bz2 
-</​code>​ 
-Si vous voyez un lien nommé //linux// pointant sur les sources d'un ancien kernel supprimez le. 
-<​code>​ 
- rm linux 
-</​code>​ 
-Attention: ne decompressez pas les sources tant que ce lien existe. Si les sources sont décompressées dans le répertoire des anciennes, la compilation ne marchera pas. 
- 
-Et décompressez l'​archive avec: 
-<​code>​ 
-tar jxvf linux-source-2.6.10.tar.bz2 
-</​code>​ 
-pour en savoir plus sur la commande tar c'est [[http://​wiki.ubuntu-fr.org/​console/​learn_unix_in_10_minutes?​s=tar#​creer_des_archives_la_commande_tar|ici]] 
- 
-Cela devrait créer un dossier //​linux-source-2.6.10//​ dont vous êtes le propriétaire et appartenant au groupe //src// 
- 
-Créez un lien symbolique nommé linux vers le dossier des sources 
-<​code>​ 
- ln -s linux-source-2.6.10 linux 
-</​code>​ 
-Vérifiez que tout est en ordre. Vous devriez obtenir quelque chose comme ça : 
-<​code>​ 
-ls -F 
-linux@ ​ linuxsource-2.6.10/ ​ linux-source-2.6.10.tar.bz2 
-</​code>​ 
- 
-===== Configurer le kernel ===== 
-Pour configurer votre kernel, vous disposez de plusieurs interfaces possibles, vous pourrez y accéder en utilisant l'une de ces options derrière //make//: 
-  * //xconfig// en qt 
-  * //gconfig// en gtk 
-  * //​menuconfig//​ en ncurses 
-  * //config// en text 
- 
-Choisissez en une à votre goût, puis rendez vous dans le dossier ///​usr/​src/​linux//:​ 
-<​code>​ 
-cd ./linux 
-</​code>​ 
- 
-Et lancez-la. ​ 
- 
-Par exemple pour lancer l'​interface qt: 
-<​code>​ 
- make xconfig 
-</​code>​ 
-Note : si vous avez un message d'​erreur au lancement de make xconfig, vous pouvez avoir besoin d'​installer les packages de développement de QT: 
-<​code>​ 
-apt-get install build-essential bin86 kernel-package 
-apt-get upgrade 
-apt-get install libqt3-headers libqt3-mt-dev 
-</​code>​ 
- 
-Si vous n'​utilisez pas X, ou si vous ne voulez pas utiliser votre souris: 
-<​code>​ 
-make menuconfig 
-</​code>​ 
- 
-Il existe deux façons d'​intégrer une option dans le kernel: 
-   * en //dur// c'est à dire que l'​option est integrée au kernel et ne peut pas en être dissociée 
-   * en //module// l'​option,​ peut être ajoutée ou retirée du kernel pendant que celui-ci est en marche (avec les commandes modprobe ou insmod pour charger le module ou rmmod pour le decharger). 
-Mettre une option en module permet d'​alléger le noyau sans lui retirer de fonctionnalités. Cependant on ne peut pas tout mettre en module, certaines options ne peuvent être ajoutées qu'en dur et d'​autres ne sont utilisables pour vous qu'en dur. Ainsi, vous devrez vous assurer que les drivers de votre bus, disques, et système de fichiers sont compilés en dur (et non en module) dans votre kernel. Dans le cas contraire votre kernel ne se lancera pas. 
- 
-Toute votre configuration sera sauvegardé dans ///​usr/​src/​linux/​.config//​ nous verrons plus loin  comment réutiliser ce fichier. 
- 
-Connaitre les composants exacts de sa machine n'est pas toujours facile (surtout si ce n'est pas votre machine), pensez à utiliser des commandes comme //lspci//, //lshw//, //lspnp//, //lsusb//, //lsmod//, etc... Elles vous seront d'un grand secours pour savoir quels sont les chipset que vous utilisez et quels sont les modules qui sont chargés. 
- 
-===== Compiler votre kernel ===== 
- 
-==== make-kpkg ==== 
-Pour faire la nouvelle image du kernel nous allons utiliser "​make-kpkg",​ un script qui automatisera la séquence //make dep; make clean; make bzImage; make modules//. Prenez quelques minutes pour regarder les pages du manuel de make-kpkg. La ligne de commande make-kpkg peut être complexe et au premier abord quelque peu intimidant. Sa syntaxe basique est: 
-<​code>​ 
-make-kpkg <​options>​ <​cible>​ 
-</​code>​ 
-Nous utiliserons //​kernel_image//​ en cible, cela permet de créer un paquet qui contient l'​image du kernel, ses modules et permet aussi la configuration automatique de Grub ou de LILO. 
- 
-Examinons quelques options importantes et couramment utilisées. 
- 
-=== --append-to-version === 
-La première option vous permet de rajouter quelque chose à la version du kernel. Vous pouvez utiliser des caractères alphanumériques et les caractères "​+"​ et "​.",​ n'​utilisez pas d'​underscore "​_"​. 
- 
-Voila la version du kernel que j'​utilise maintenant: 
-<​code>​ 
- uname -r 
-2.6.10-5-k7 
-</​code>​ 
-Vous devriez éviter d'​utiliser --append-to-version avec des valeurs comme "​-686",​ "​-k7",​ "​-sparc"​. Elles sont habituellement utilisées pour les kernels précompilés. 
- 
-Les modules du kernel se trouvent dans ///​lib/​modules//​. Chaque kernel a son sous-répertoire pour ses modules. A chaque fois que vous installez un kernel avec un nom différent, l'​installateur du paquet crée un nouveau sous-répertoire dans /​lib/​modules pour le mettre. 
- 
-Cela signifie qu'en utilisant une nouvelle valeur pour --append-to-version à chaque nouvelle recompilation,​ vous vous assurez de ne pas avoir de conflits entre les modules de deux kernels différents. 
- 
-Si vous installez un kernel avec le même nom (même version et --append-to-version) qu'un kernel déjà présent, le paquet du nouveau kernel écrasera l'​ancien et ses modules. Cependant, vous serez averti et aurez une chance d'​annuler l'​opération. Vous pourrez donc relancer la compilation de votre kernel avec un --append-to-version différent. 
- 
-=== --revision === 
-Une autre option de make-kpkg est "​--revision"​. Elle affecte le nom du paquet Debian mais pas celui du kernel. Comme "​--append-to-version",​ vous pouvez utiliser des caractères alphanumériques,​ "​+"​ et "​."​. N'​utilisez pas d'​underscore "​_"​. Si vous ne donnez pas de valeur à --revision, make-kpkg utilisera "​10.00.Custom"​. 
- 
-Puisque --revision n'​affecte pas la version du kernel en elle-même, elle n'​évitera pas de conflit entre deux versions identiques. Cette option ne sert que pour que vous puissiez voir la différence entre deux paquets que vous avez recompilés avec de petits changements. 
- 
-=== --initrd === 
-Cette option crée un fichier //initrd// qui permet d'​utiliser des modules directement à l'​amorçage du kernel. 
-Vous aurez besoin de ces deux packages pour utiliser cette option: 
-<​code>​ 
-apt-get install cramfsprogs initrd-tools 
-</​code>​ 
- 
-==== Nom de paquets du kernel ==== 
-Les paquets contenant les images kernels (c'est à dire le résultat d'une compilation de source du kernel) avec Debian sont de la forme: 
- 
-//​kernel-image-(version du kernel)(--append-to-version)_(--revision)-(architecture).deb//​ 
- 
-Le nom du paquet est toute la partie précédent le premier underscore: 
-<​code>​ 
-ls 
-kernel-image-2.6.10.181004_10.00.Custom_i386.deb 
-</​code>​ 
-Maintenant vous comprenez pourquoi les underscores ne sont pas autorisés avec make-kpkg: ils séparent les éléments du nom du paquet. 
- 
-Je vous recommande d'​utiliser plusieurs --append-to-version différents à chaque compilation,​ et de laisser make-kpkg assigner le --revision par défaut. J'​utilise la date pour faire mon --append-to-version,​ mais vous êtes libres de créer vos propres méthodes. 
- 
-N'​oubliez pas: si --append-to-version ou --revision ne vous semble toujours pas clair, ou si vous souhaitez utiliser d'​autres options. Lisez ///​usr/​share/​doc/​kernel-package/​README.gz//​ (utilisez la commande "​zless"​). 
- 
-==== Fakeroot ==== 
-Lorsque vous vous êtes ajouté au groupe //src//, vous avez rendu possible à votre utilisateur de faire la plus grande partie du paquetage du kernel possible. Cependant les fichiers qui font partie d'un paquet du kernel (comme le kernel ou ses modules) doivent appartenir au root et être executés avec des droits root, ils doivent donc être crées avec des droits root. 
- 
-En utilisant fake-root vous pourrez lancer make-kpkg en tant que simple utilisateur,​ et la majeure partie du travail sera faite avec des permissions normales. Vers la fin de l'​empaquetage,​ fakeroot simulera un environnement de root pour créer le paquet kernel-image. 
- 
-Les pages du manuel de make-kpkg proposent une façon de l'​utiliser avec fakeroot. Nous allons utiliser la méthode la plus simple en mettant fakeroot au début de la ligne de commande de make-kpkg, comme ceci: 
-<​code>​ 
-fakeroot make-kpkg <​options>​ <​target>​ 
-</​code>​ 
- 
-==== Faire l'​image du kernel ==== 
-Finalement ! Vous êtes fin prêt à créer votre paquet 
-<​code>​ 
- ​fakeroot make-kpkg clean 
-</​code>​ 
-Puis: 
-<​code>​ 
- ​fakeroot make-kpkg --append-to-version=.181004 --initrd kernel_image 
-</​code>​ 
-Maintenant tout ce qu'il vous reste à faire, c'est d'​attendre que votre machine ait fini la création du paquet. Prenez quelques minutes et détendez vous pendant que l'​ordinateur fait sa part du travail. ;-) 
- 
- 
- 
-===== Installer le paquet kernel-image ===== 
-Une fois le kernel compilé, vous devez installer le paquet kernel-image,​ qui contient le kernel et tous ses modules. Tout d'​abord assurez-vous que la compilation est réussie en regardant le contenu du répertoire ///​usr/​src//​ 
-<​code>​ 
- cd .. 
- ls -1 
-kernel-image-2.6.10.181004_10.00.Custom_i386.deb 
-linux 
-linux-source-2.6.10 
-linux-source-2.6.10.tar.bz2 
-</​code>​ 
-Il est là! 
- 
-Pour installer le kernel et tous ses modules: 
-<​code>​ 
- sudo dpkg -i kernel-image-2.6.10.181004_10.00.Custom_i386.deb 
-</​code>​ 
-Pour installer le paquet kernel-image depuis votre disque dur, vous devez spécifier le nom exact du paquet. Pensez à utiliser l'​auto-complétion avec la touche //tab//. 
- 
-Si tout s'est bien passé, tout ce qu'il vous reste à faire maintenant c'est de redémarrer. Si votre nouveau kernel ne démarre pas, relancez l'​ancien au menu de sélection de [[:Grub]]. Revenez à la configuration de votre kernel et changez-le autant que nécessaire,​ puis relancez le. 
- 
-===== Mettre en place le reste ===== 
- 
-==== Garder ce kernel ! ==== 
-Si vous avez utilisé --append-to-version vous n'avez pas besoin de vous inquiéter qu'​apt-get mette à jour votre kernel. Si vous êtes paranoïaque,​ vous pouvez vous assurez tout de même de le garder avec ça: 
-<​code>​ 
- echo "​kernel-image-2.6.10.181004 hold" | sudo dpkg --set-selections 
-</​code>​ 
-Bien sûr utilisez le nom du paquet que vous voulez garder (il faut qu'il soit installé ou connu de la liste de dpkg). Vérifiez que le paquet soit bien marqué en "​hold"​ avec: 
-<​code>​ 
-dpkg --get-selections | grep kernel-image 
- ​kernel-image-2.6.10.181004_10.00.Custom_i386.deb ​   hold 
-</​code>​ 
-==== Supprimer les liens symboliques ==== 
-Ensuite vous devriez vous occuper des liens symboliques créés dans le répertoire ///​usr/​src//​. Il y a plusieurs raisons de le faire: 
-  - La prochaine fois que vous téléchargerez un kernel, ce ne sera peut-être pas un paquet //.deb//. Lorsque vous le décompresserez il se peut qu'il écrase vos anciennes sources à cause du lien. 
-  - La prochaine fois que vous téléchargerez les sources du kernel en //.deb//, vous allez peut-être décompresser les sources sans problème, puis les compiler en oubliant que //linux// pointait sur vos anciennes sources. 
-  - Lorsque vous téléchargez des patchs ou d'​autres codes sources et que vous les placez dans ///​usr/​src//​ vous ne voudrez sûrement pas qu'​elles se mélangent avec. En supprimant le lien symbolique vous empêcherez #1 d'​arriver. 
- 
-Pour supprimer le lien faites: 
-<​code>​ 
-rm linux 
-</​code>​ 
- 
-==== Sauvegarder votre kernel ==== 
-C'est toujours une bonne idée de garder le //.deb// de votre kernel. Copiez-le dans un endroit sûr à l'abri 
- 
-{!}Une fois votre kernel empaqueté, vous pouvez l'​installer sur n'​importe quelle machine utilisant apt et ayant une configuration compatible avec les options que vous avez choisi pour votre kernel. 
- 
-==== Faire une nouvelle disquette de démarrage ==== 
-Si vous souhaitez créer une disquette de démarrage avec votre nouveau kernel, il vous suffit de vous munir d'une disquette et de taper: 
-<​code>​ 
-cd /boot 
- ​mkboot vmlinuz-2.6.10.181004 
-</​code>​ 
- 
-==== Compiler votre prochain kernel ==== 
-Si vous voulez recompiler votre kernel, parce que vous vous êtes acheté une nouvelle carte son par exemple, ou si vous aviez oublié de mettre un système de fichier que vous souhaitez utiliser maintenant. Tout ce que vous avez à faire est de relancez la configuration puis, une fois les modifications faites, le recompiler avec un nouveau --append-to-version. Votre session devrait ressembler à ça: 
-<​code>​ 
- cd /usr/src 
-ln -s linux-source-2.6.10 linux 
-cd linux 
- make xconfig #   ​(reconfigurez votre kernel) 
- ​fakeroot make-kpkg clean #   ​(grand nettoyage) 
- ​fakeroot make-kpkg --append-to-version=.181004 --initrd kernel_image 
-</​code>​ 
- 
-==== Utiliser une configuration existante ==== 
-Lorsque vous avez installé votre kernel sa configuration a été copiée dans /​boot/​config-x.y.z. Vous voudrez peut-être le copier dans un endroit plus sûr ? 
- 
-Supposons que la semaine dernière vous avez courageusement exploré l'​integralité des options du kernel, les modifiant sans arrêt jusqu'​à créer votre kernel parfait. Supposons qu'​aujourd'​hui il y ait une nouvelle version du kernel et que vous souhaitiez mettre à jour le votre. Est il nécessaire de reprendre depuis le début la configuration de votre kernel? ​ Non pas du tout. 
- 
-Téléchargez et décompressez la nouvelle archive des sources dans ///​usr/​src//,​ refaite le lien //linux// pour qu'il pointe vers les nouvelles sources. Puis allez dans le dossier ///​usr/​src/​linux//​ et copiez-y votre configuration actuel et lancez "make oldconfig":​ 
-<​code>​ 
-cp /​boot/​config-2.6.10.081004 .config 
- make oldconfig 
-</​code>​ 
-On vous demandera si vous voulez activer ou non les nouvelles options. En général il est plus sûr de répondre non, sauf si vous voulez justement essayer une nouveauté. 
- 
-Après avoir fini le //make oldconfig// vous pouvez relancer un //make xconfig// si vous n'​êtes pas sûr d'une option ou si vous souhaitez changer une ancienne option. 
- 
-Enfin, lancez la compilation des dernières sources avec votre configuration. 
- 
- 
-===== Checklist ===== 
-  - Prévoir une disquette de démarrage, ou un ancien kernel démarrable avec grub 
-  - Installer les paquets nécessaires 
-    - ''​build-essential''​ 
-    - ''​fakeroot''​ 
-    - ''​kernel-package''​ 
-  - Préparer l'​arbre des sources 
-    - s'​ajouter au groupe ''​src'',​ se reconnecter 
-    - enlever les vieux liens symboliques 
-    - décompresser les sources du kernel 
-    - faire le nouveau lien symbolique 
-  - Configurer le kernel 
-    - utiliser ''​oldconfig''​ si possible avec ''​$ cp /​boot/​config-x.y.z .config''​ 
-    - ''​$ make oldconfig''​ ou ''​$ make xconfig''​ ou ''​$ make menuconfig''​ 
-    - sauvegarder le fichier ''​.config''​ ailleurs pour pouvoir le réutiliser en cas de besoin 
-  - Compiler le paquet ''​kernel-image''​ 
-    - ''​$ fakeroot make-kpkg clean''​ 
-    - ''​$ fakeroot make-kpkg --append-to-version=alpha+numeric.mais.pas.underscore kernel_image --initrd binary''​ 
-  - Installer le paquet kernel-image 
-    - ''​$ dpkg -i kernel-image-x.y.z.aa.mm.jj_10.00.Custom_i386.deb''​ 
-    - Redémarrer ​ 
-  - Et ensuite ? 
-  - Garder votre paquet avec ''​$ echo "​kernel-image-x.y.z.yymmdd hold" | dpkg --set-selections''​ 
-  - Supprimer les liens symboliques 
-  - Sauvegarder la nouvelle image du kernel 
-  - Supprimer les anciens paquets kernel-image 
-  - Faire une nouvelle disquette de démarrage 
- 
-// Contributeurs : [[utilisateurs:​Lok]] //  
- 
-// Basé sur [[https://​wiki.ubuntu.com/​KernelHowto]] // 
  • tutoriel/comment_compiler_un_kernel_sur_mesure_old.1166774056.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)