Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tutoriel:compiler_linux [Le 29/08/2011, 15:28] – [La configuration du kernel] 79.89.73.233 | tutoriel:compiler_linux [Le 10/01/2021, 12:10] (Version actuelle) – [Gestion des bugs] Olivier V | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== Compiler son noyau ====== | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | **NOTE : Ce tutoriel traite de noyau ou de //kernel// mais c'est la même chose** | ||
+ | |||
+ | **NOTE : J' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Une chose que beaucoup de personnes ne comprennent pas est que le noyau est un programme comme les autres, vous pouvez parfaitement avoir plusieurs noyaux et utiliser celui de votre choix. **Il est même recommandé d' | ||
+ | |||
+ | Pourquoi compiler son noyau ? | ||
+ | Les noyaux fournis par défaut dans votre distribution GNU/Linux sont des noyaux capables de tourner sur un maximum de machines et de matériels. Ils sont donc souvent plus lourds, mais la différence de rapidité est en général assez faible. En fait les vraies raisons de compiler son propre noyau sont les suivantes : | ||
+ | |||
+ | - Comprendre comment fonctionne le noyau Linux. | ||
+ | - Faire fonctionner un matériel qui n'est pas pris en charge par votre noyau actuel. | ||
+ | - Appliquer un correctif((ISO/ | ||
+ | - Vous voulez utiliser une distribution qui oblige de compiler votre noyau ((comme Gentoo)) | ||
+ | - Vous voulez passer le temps.:-\ | ||
+ | |||
+ | La compilation du noyau est longue et demande beaucoup d' | ||
+ | |||
+ | |||
+ | <note tip>Pour ceux qui débutent voir d' | ||
+ | |||
+ | Et en particulier le paragraphe [[: | ||
+ | </ | ||
+ | |||
+ | ===== Quelles sources utiliser ===== | ||
+ | |||
+ | En fait, la plupart des distributions ((toutes ?)) modifient leurs noyaux. Et ce pour des raisons de sécurité ou tout simplement pour un fonctionnement optimal. Il est **très** conseillé d' | ||
+ | |||
+ | ===== Installer les sources et les outils pour la compilation ===== | ||
+ | |||
+ | Passons à l' | ||
+ | [[: | ||
+ | |||
+ | < | ||
+ | Il vous faudra aussi installer les outils de compilation : \\ | ||
+ | [[: | ||
+ | |||
+ | ===== Partir d'une configuration minimale ===== | ||
+ | |||
+ | ==== Quelques préliminaires ==== | ||
+ | Les développeurs du noyau déconseillent de compiler le noyau en tant que root, mais cet avis est très partagé. Faites comme bon vous semble, si vous voulez compiler en utilisateur je vous conseille de vous rajouter au groupe src : | ||
+ | <code bash> | ||
+ | ou | ||
+ | sudo adduser login src ## Où //login// est votre nom d' | ||
+ | |||
+ | Par défaut, les sources sont dans /usr/src, sous Debian et Ubuntu il vous faut extraire le contenu de l' | ||
+ | <code bash>cd /usr/src | ||
+ | tar xvjf linux-source-2.6.VERSION.tar.bz2 | ||
+ | </ | ||
+ | <note important> | ||
+ | Je vous conseille de faire un lien symbolique intitulé //linux// vers le noyau((à modifier suivant la version de votre noyau)) (c'est bien et ça m' | ||
+ | <code bash>cd /usr/src | ||
+ | ln -sfn linux-source-2.6.VERSION linux ## sous Debian, Ubuntu | ||
+ | </ | ||
+ | |||
+ | Ensuite allez dans ce fameux dossier :<code bash>cd / | ||
+ | |||
+ | Toutes les modifications que nous allons faire seront dans le fichier .config (qui n' | ||
+ | < | ||
+ | # CONFIG_SECURITY_ROOTPLUG is not set | ||
+ | CONFIG_CRYPTO=y | ||
+ | CONFIG_CRYPTO_ALGAPI=m | ||
+ | CONFIG_CRYPTO_BLKCIPHER=m | ||
+ | CONFIG_CRYPTO_MANAGER=m</ | ||
+ | |||
+ | Il est évident que ce n'est pas pratique de modifier ce fichier à la main, ce serait long et très dangereux car certaines options **dépendent** d' | ||
+ | |||
+ | **NOTE : il existe aussi des interfaces graphiques mais je ne vais pas les aborder ici et puis vous n' | ||
+ | |||
+ | Pour lancer cette interface en console c'est simple : | ||
+ | <code bash> | ||
+ | |||
+ | Et vous vous retrouvez devant quelque chose comme ceci : | ||
+ | |||
+ | {{: | ||
+ | ————————————————————————————————————————————— | ||
+ | |||
+ | La navigation dans cette interface est simple : | ||
+ | * Flèches haut/bas pour monter/ | ||
+ | * Entrée pour entrer dans les sous-menus | ||
+ | * Échappement deux fois pour sortir d'un sous-menu | ||
+ | * h pour demander l'aide d'une option | ||
+ | * Oblique "/" | ||
+ | * Espace pour sélectionner une option | ||
+ | |||
+ | ==== Choix des options ==== | ||
+ | |||
+ | Toute l' | ||
+ | |||
+ | Ainsi si vous voulez partir avec une config qui devrait marcher je vous conseille deux choses : | ||
+ | |||
+ | **Soit vous copiez un .config fonctionnel que vous optimiserez ensuite** : Si vous avez déjà un noyau fonctionnel, | ||
+ | <code bash>cp / | ||
+ | Ensuite, vu que ce n'est sûrement pas la même version, il faut voir s'il y a eu des modifications dans la configuration : | ||
+ | <code bash> | ||
+ | À chaque fois que les options seront différentes, | ||
+ | |||
+ | Je déconseille cette méthode pour deux raisons : | ||
+ | * make oldconfig est difficile à faire proprement | ||
+ | * Le travail à faire pour optimiser ensuite sera très dur si la config du noyau précédent est pleine d' | ||
+ | |||
+ | Cette méthode est à utiliser seulement si vous êtes certain de votre .config. | ||
+ | |||
+ | **La 2< | ||
+ | Cette commande va construire un .config minimum qui est fourni par les responsables du noyau : | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | ==== En dur ou en modules ? ==== | ||
+ | |||
+ | Les options que vous choisirez dans le noyau seront compilées soit en dur soit en modules. | ||
+ | * En dur, l' | ||
+ | * En modules l' | ||
+ | |||
+ | Concrètement, | ||
+ | |||
+ | Donc **doit** être compilé en dur : | ||
+ | * Le système de fichier (ext3, reiserfs par exemple) des partitions utilisées | ||
+ | * Le support pour les disques (SATA ou IDE) de ces partitions | ||
+ | |||
+ | Et voilà, vous pouvez passer à la configuration proprement dite. | ||
+ | |||
+ | ===== La configuration du noyau ===== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Je vous rassure, on ne touchera qu'à quelques options dans le menu, je n' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | ==== Deux trois petites options à activer ==== | ||
+ | |||
+ | Il faut activer quelques options pour pouvoir travailler sereinement : | ||
+ | L' | ||
+ | |||
+ | Cette option est ici : | ||
+ | < | ||
+ | [*] Prompt for development and/or incomplete code/ | ||
+ | |||
+ | Sur certains noyaux elle est ici : | ||
+ | < | ||
+ | [*] Prompt for development and/or incomplete code/ | ||
+ | |||
+ | La prochaine option à vérifier est **Processor family** | ||
+ | Elle se trouve ici : | ||
+ | < | ||
+ | Processor family ---></ | ||
+ | |||
+ | Il faut donner le type de processeur que l'on a. | ||
+ | Pour le savoir : | ||
+ | < | ||
+ | ## Chez moi ça donne : | ||
+ | model name : Genuine Intel(R) CPU | ||
+ | Ensuite faites des recherches sur le processeurs et trouvez la famille de processeur correspondante. | ||
+ | |||
+ | Une autre option à vérifier : **Subarchitecture Type** : | ||
+ | Elle se trouve ici : | ||
+ | < | ||
+ | Subarchitecture Type ---></ | ||
+ | Si vous ne savez pas quoi mettre et que vous avez un PC " | ||
+ | |||
+ | Si vous utilisez des cartes PCMCIA je vous conseille d' | ||
+ | < | ||
+ | PCCARD (PCMCIA/ | ||
+ | |||
+ | ==== La section NETWORKING ==== | ||
+ | Cette section est utile si vous utilisez des périphériques Wi-Fi, Bluetooth, ou infrarouges. Je vous laisse activer (en dur ou en module) ce dont vous avez besoin. | ||
+ | |||
+ | Si vous n' | ||
+ | < | ||
+ | Networking options | ||
+ | < > The IPv6 protocol</ | ||
+ | |||
+ | ==== La section File systems ==== | ||
+ | |||
+ | Cette section est vitale, il faut absolument que la prise en charge des systèmes de fichiers des partitions racines soit compilée **en dur**. | ||
+ | |||
+ | J' | ||
+ | < | ||
+ | <*> Second extended fs support ## Si ext2 utilisé | ||
+ | <*> Ext3 journalling file system support ## Pour ext3 | ||
+ | <*> Reiserfs support ## Reiseirfs | ||
+ | ## Il y en a d' | ||
+ | </ | ||
+ | |||
+ | Si vous utilisez encore des partitions FAT ou NTFS (Windows), je vous conseille ces options : | ||
+ | < | ||
+ | DOS/FAT/NT Filesystems | ||
+ | |||
+ | La section suivante mériterait une page entière, c'est pourquoi je la met en valeur : | ||
+ | |||
+ | ==== La section Devices Drivers ==== | ||
+ | Cette section est une des plus importantes. C'est elle qui gère les pilotes de votre matériel. Et pas de pilote implique que le matériel ne fonctionnera pas. | ||
+ | |||
+ | Les options que nous toucherons seront celles-ci : | ||
+ | < | ||
+ | <M> Parallel port support | ||
+ | <*> ATA/ | ||
+ | SCSI device support | ||
+ | [*] Network device support | ||
+ | Graphics support | ||
+ | Sound ---></ | ||
+ | |||
+ | === La section Parallel port support === | ||
+ | |||
+ | Pour utiliser les [[http:// | ||
+ | Je vous conseille cette option, surtout si vous avez une imprimante qui se branche sur un tel port : | ||
+ | < | ||
+ | <M> Parallel port support | ||
+ | < | ||
+ | [*] IEEE 1284 transfer modes</ | ||
+ | === La section ATA/ | ||
+ | |||
+ | Si vous avez utilisé //make defconfig//, | ||
+ | |||
+ | == Support IDE == | ||
+ | |||
+ | Une de ces deux options peut être désactivée. | ||
+ | < | ||
+ | < | ||
+ | |||
+ | Pour savoir laquelle utiliser (et laquelle ne pas utiliser), vous pouvez procéder ainsi : | ||
+ | Assurez-vous d' | ||
+ | < | ||
+ | |||
+ | ## Vous obtenez ça : | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | ## Ou ça : | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | </ | ||
+ | |||
+ | Si vous obtenez un message du style : | ||
+ | < | ||
+ | Utilisez plutôt udevadm info avec les mêmes options. | ||
+ | |||
+ | Je vous laisse faire le reste ;-) | ||
+ | |||
+ | Cette liste pourra vous être utile si vous avez d' | ||
+ | < | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | Tous les disques utilisés par le système doivent être en dur ! | ||
+ | |||
+ | === Support SATA === | ||
+ | |||
+ | Les disques durs SATA fonctionnent avec le pilote SCSI. Pour pouvoir avoir les bonnes options : | ||
+ | < | ||
+ | SCSI device support | ||
+ | <*> SCSI disk support | ||
+ | <M> SCSI CDROM support</ | ||
+ | |||
+ | On va encore utiliser udev pour savoir quels pilotes activer/ | ||
+ | Par exemple pour /dev/sda : | ||
+ | < | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | DRIVERS=="" | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | </ | ||
+ | |||
+ | Donc le pilote est ahci, pour savoir quelle option activer : | ||
+ | <code bash>cd / | ||
+ | find -name Makefile | xargs grep ahci | ||
+ | ## Ce qui donne : | ||
+ | ./ | ||
+ | |||
+ | Donc l' | ||
+ | |||
+ | ==== La section Network device support ==== | ||
+ | Les options que l'on va modifier sont celles-ci : | ||
+ | < | ||
+ | [*] | ||
+ | [ ] | ||
+ | [ ] | ||
+ | |||
+ | Vous l' | ||
+ | Pour chaque interface (eth0 par exemple) utilisez udevinfo : | ||
+ | < | ||
+ | ## Ce qui donne (exemple) : | ||
+ | DRIVERS==" | ||
+ | DRIVERS=="" | ||
+ | DRIVERS==""</ | ||
+ | |||
+ | Toujours par la même méthode : | ||
+ | < | ||
+ | ## Ce qui donne : | ||
+ | / | ||
+ | |||
+ | Une petite recherche de 8139TOO vous donne l' | ||
+ | |||
+ | Si vous avez une carte Wi-Fi je vous conseille d' | ||
+ | < | ||
+ | [*] Network device support | ||
+ | Wireless LAN ---> | ||
+ | [*] Wireless LAN (IEEE 802.11)</ | ||
+ | |||
+ | ==== La section Graphic support ==== | ||
+ | |||
+ | La vidéo-mémoire((ISO/ | ||
+ | |||
+ | On travaille ici : | ||
+ | < | ||
+ | Graphics support | ||
+ | <*> Support for frame buffer devices</ | ||
+ | |||
+ | Si vous apercevez le nom de votre carte graphique, vous pouvez la mettre en module. | ||
+ | |||
+ | Si vous voulez utiliser [[http:// | ||
+ | < | ||
+ | Graphics support | ||
+ | <*> Support for frame buffer devices ---> | ||
+ | [*] VESA VGA graphics support | ||
+ | Console display driver support | ||
+ | <*> Framebuffer Console support | ||
+ | [*] | ||
+ | |||
+ | ===== 1,2,3 compilez ! ===== | ||
+ | |||
+ | Votre noyau doit être assez bien configuré pour pouvoir démarrer maintenant. On doit donc le compiler puis l' | ||
+ | |||
+ | En gros voici ce que l'on va faire : | ||
+ | - Compiler le noyau | ||
+ | - Placer le noyau construit dans /boot | ||
+ | - Configurer grub pour démarrer sur le nouveau noyau | ||
+ | |||
+ | ==== La méthode universelle ==== | ||
+ | |||
+ | On compile : | ||
+ | <code bash>cd / | ||
+ | make && make modules_install</ | ||
+ | |||
+ | On copie le noyau dans /boot : Vous pouvez lui donner le nom que vous voulez, ici l' | ||
+ | <note help>Ici i386 est à remplacer par votre architecture bien sûr</ | ||
+ | <code bash>cp arch/ | ||
+ | Je vous conseille aussi de copier votre configuration dans /boot : | ||
+ | <code bash>cp .config / | ||
+ | cp System.map / | ||
+ | |||
+ | Ensuite modifiez le fichier de configuration de grub **/ | ||
+ | < | ||
+ | root (hd0,3) | ||
+ | kernel | ||
+ | |||
+ | title | ||
+ | root (hd0,3) | ||
+ | kernel | ||
+ | |||
+ | (hd0,3) doit correspondre à la partition qui contient /boot. Pour grub, hda1=(hd0, | ||
+ | Vous pouvez bien sûr rajouter des options dans la ligne " | ||
+ | <note important> | ||
+ | |||
+ | Un petit réamorçage et c'est bon ! 8-) | ||
+ | |||
+ | ==== La méthode " | ||
+ | |||
+ | Si vous êtes sous Debian (ou Ubuntu), il est plus malin de créer un paquet .deb pour installer votre noyau. | ||
+ | Pourquoi ? | ||
+ | - Vous pourrez le réutiliser si vous faites une réinstallation. | ||
+ | - Vous pouvez l' | ||
+ | - Parce que c'est la classe de faire ses propres paquets :-O | ||
+ | - Parce que c'est plus simple et que ça va rajouter automatiquement votre noyau dans / | ||
+ | |||
+ | Une seule commande ferra l' | ||
+ | <code bash>cd / | ||
+ | make-kpkg --append-to-version " | ||
+ | Dans cette commande, vous pouvez personnaliser le nom de votre noyau (" | ||
+ | |||
+ | Une fois que c'est fini, le paquet doit être dans /usr/src et vous n'avez plus qu'à l' | ||
+ | < | ||
+ | |||
+ | Et voilà ! Grub est automatiquement mis à jour et votre noyau est disponible dans le menu de grub. Un petit réamorçage et vous voilà sur votre nouveau noyau. | ||
+ | |||
+ | ===== Que faire en cas de mauvaise compilation ? ===== | ||
+ | |||
+ | Si la compilation donne un noyau qui ne fonctionne pas bien, regardez les messages d' | ||
+ | |||
+ | Puis recompilez votre noyau. Mais avant il faut supprimer les fichiers qui on été créés pendant la compilation : | ||
+ | |||
+ | <code bash>cd / | ||
+ | make clean # Ne supprime pas le .config | ||
+ | make mrproper # Supprime aussi le .config</ | ||
+ | |||
+ | **Si vous avez utilisé make-kpkg, il faut aussi supprimer les fichiers créés par l' | ||
+ | <code bash>cd / | ||
+ | make-kpkg clean</ | ||
+ | |||
+ | ===== Gestion des bugs ===== | ||
+ | |||
+ | En cas de découverte d'un bug il faut commencer par une bissection.\\ | ||
+ | Voir : [[: | ||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | --- | ||
+ | Contributeurs : [[: |