opensuse:compilation_noyau
no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | opensuse:compilation_noyau [2018/11/17 12:53] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ======Recompilation manuelle du noyau====== | ||
+ | |||
+ | ===À propos=== | ||
+ | |||
+ | Cet article est le résultat d'un travail de réécriture, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Qu'est ce que le Noyau ===== | ||
+ | |||
+ | Le noyau, dans votre distribution, | ||
+ | |||
+ | |||
+ | Petite note pour la suite : kernel, c'est noyau, mais en anglais... les origines disparates de ce document provoquent une utilisation sans distinction des deux termes ;-) | ||
+ | |||
+ | ===== Numérotation du Noyau ===== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | =====Pourquoi compiler son noyau ? ===== | ||
+ | À cette question, pas de réponse unique. La première fois que j'ai recompilé mon noyau, c' | ||
+ | |||
+ | Plus pragmatiquement, | ||
+ | |||
+ | Il peut également s'agir d' | ||
+ | |||
+ | Enfin, la compilation manuelle du noyau peut avoir valeur de test. Une façon de contribuer à son développement, | ||
+ | |||
+ | =====Différentes versions du noyau...===== | ||
+ | |||
+ | Certaines distributions viennent avec un noyau modifié, afin d'en optimiser les performances pour l' | ||
+ | |||
+ | * Desktop : optimisations pour l' | ||
+ | * pae : kernel avec support de plus de 4GB de RAM sur un système 32 bits | ||
+ | * server : optimisations pour les serveurs | ||
+ | * debug : kernel compilé avec les options debug | ||
+ | * default : le kernel par défaut, avec quelques modifications made in suse. | ||
+ | |||
+ | Les sources sont communes à tous ces noyaux, qui ont en fait été compilés avec des options différentes. Tous les noyaux sont issus des sources du kernel default. Ces sources ont été légèrement modifiées depuis celles du kernel **Vanilla** : le kernel vanilla est le noyau d' | ||
+ | |||
+ | =====Connaître sa version du kernel===== | ||
+ | Utilisez la commande | ||
+ | |||
+ | uname -r | ||
+ | |||
+ | ===== Etapes pour compiler son noyau ===== | ||
+ | ==== Trouver l' | ||
+ | |||
+ | La première étape, bien entendu, consiste à récupérer les sources du noyau que vous voulez compiler. Il y a plusieurs façons de procéder. La plupart des distributions proposeront ces sources empaquetées, | ||
+ | |||
+ | zypper in kernel-sources | ||
+ | | ||
+ | Vous permettra d' | ||
+ | |||
+ | Certaines distributions proposeront également des versions plus récentes que celle utilisée par le système. Charge à vous de trouver dans quel dépôt, et d' | ||
+ | |||
+ | Enfin, il est possible de récupérer directement les sources du dernier noyau stable sur [[http:// | ||
+ | |||
+ | L' | ||
+ | |||
+ | %%linux-x.x.xx.x.tar.bz2%% | ||
+ | |||
+ | Copiez cette archive dans un répertoire de travail. Par tradition, vous pouvez placer l' | ||
+ | |||
+ | |||
+ | ==== Extraire l' | ||
+ | |||
+ | Il vous faut ensuite extraire cette archive : | ||
+ | |||
+ | # tar xjvf linux*.tar.bz2 | ||
+ | |||
+ | Ou bien : | ||
+ | |||
+ | # tar xzvf linux*.tar.gz | ||
+ | |||
+ | Vous avez alors un répertoire linux.x.xx.xx-xx qui apparaît. Rentrez dans ce dossier avant de passer à la suite ;-) . | ||
+ | |||
+ | ==== Trouver des patchs ==== | ||
+ | === Quels patchs appliquer à quelle version ? === | ||
+ | |||
+ | Un patch noyau va mettre à jour le code source seulement d'une version spécifique du noyau à une autre version spécifique. Voici comment les différents patchs peuvent être appliqués : | ||
+ | |||
+ | * Les **patchs pour noyau stable** s' | ||
+ | //Exemple : Le patch 2.6.21.10 s' | ||
+ | * Les **patchs pour noyau de base** s' | ||
+ | //Exemple : Le patch 2.6.23 s' | ||
+ | * Les **patchs incrémentaux** mettent à jour une version spécifique vers une autre version spécifique. | ||
+ | //Exemple : Le patch 2.6.22.10-11 s' | ||
+ | |||
+ | |||
+ | ==== Appliquer des patchs ==== | ||
+ | |||
+ | |||
+ | === Mise à jour === | ||
+ | |||
+ | Pour installer un patch pour passer d'une version à l' | ||
+ | |||
+ | # bzip2 -d patch-< | ||
+ | ou bien | ||
+ | # gunzip -d patch-< | ||
+ | |||
+ | Ensuite, appliquez les patchs sur les sources comme ceci : | ||
+ | |||
+ | # cd / | ||
+ | # patch -p1 < patch-< | ||
+ | |||
+ | |||
+ | Vous pouvez également utiliser ceci : | ||
+ | |||
+ | # bzip2 -dc / | ||
+ | # bzip2 -dc / | ||
+ | |||
+ | ou bien | ||
+ | |||
+ | # gunzip -c / | ||
+ | # gunzip -c / | ||
+ | |||
+ | La première commande est juste un test, mais n' | ||
+ | |||
+ | Pour installer une série de patchs incrémentaux placés dans ''/ | ||
+ | |||
+ | # linux/ | ||
+ | |||
+ | === Vérification === | ||
+ | |||
+ | Vous pouvez vérifier que le patching des sources s'est bien effectué en tapant | ||
+ | |||
+ | # make kernelversion | ||
+ | 2.6.22.1 | ||
+ | |||
+ | ou | ||
+ | |||
+ | # head -n 5 Makefile | ||
+ | VERSION = 2 | ||
+ | PATCHLEVEL = 6 | ||
+ | SUBLEVEL = 22 | ||
+ | EXTRAVERSION = .1 | ||
+ | NAME = Holy Dancing Manatees, Batman! | ||
+ | |||
+ | |||
+ | |||
+ | ===== Configurer le noyau ===== | ||
+ | |||
+ | |||
+ | ==== Récupération de la configuration ==== | ||
+ | |||
+ | Cette étape optionnelle permet de récupérer les paramètres déjà définis dans le noyau courant, ce qui est intéressant si vous avez déjà personnalisé votre noyau courant et que vous désirez l' | ||
+ | |||
+ | # zcat / | ||
+ | # make oldconfig. | ||
+ | |||
+ | La configuration du noyau courant est contenu dans le fichier ''/ | ||
+ | |||
+ | Sur les sources de noyau openSUSE, ces 2 opérations peuvent être simplement faites par l' | ||
+ | |||
+ | # make cloneconfig | ||
+ | |||
+ | Sur d' | ||
+ | |||
+ | < | ||
+ | $ make oldconfig</ | ||
+ | |||
+ | Les droits root ne seront nécessaires que si vous pratiquez votre compilation dans un répertoire sur lequel vous n'avez pas de droits d' | ||
+ | |||
+ | |||
+ | ==== Lancer l' | ||
+ | |||
+ | Il existe plusieurs méthodes pour configurer le noyau. L' | ||
+ | |||
+ | Notez que pour utiliser xconfig sur certaines distributions, | ||
+ | |||
+ | sux | ||
+ | | ||
+ | avant de lancer la configuration graphique. | ||
+ | |||
+ | Voici comment lancer la configuration : | ||
+ | |||
+ | $ make menuconfig | ||
+ | |||
+ | Commencez par vous balader dans les options de configuration si vous n' | ||
+ | |||
+ | Toutes les options de configuration du noyau ne peuvent malheureusement pas être décrites ici en détail. Utilisez les nombreux textes d'aide intégrés pour la configuration. La documentation mise à jour du noyau est également placée dans ''/ | ||
+ | |||
+ | Naviguez dans le menu de configuration et effectuez vos modifications et choix. | ||
+ | |||
+ | Soyez sur de spécifier une **chaîne d' | ||
+ | |||
+ | General Setup ---> | ||
+ | | ||
+ | |||
+ | La chaîne standard est '' | ||
+ | |||
+ | A noter que si vous compilez 2 versions différentes à partir des mêmes sources, **il est primordial d' | ||
+ | |||
+ | ==== En module ou en dur? ==== | ||
+ | |||
+ | La phase de configuration nous permet de choisir quelles parties du noyau nous allons compiler. Mieux, elle permet d' | ||
+ | |||
+ | Le noyau est composé d'un programme central, le noyau dur installé dans le répertoire /boot et de programmes périphériques, | ||
+ | |||
+ | Basiquement, | ||
+ | |||
+ | //Exemple : Les drivers pour ext3, les drivers SCSI sur les systèmes basés sur SCSI et les drivers similaires devraient être compilés dans le noyau. En contraste, les autres, comme isofs, msdos, ou le son, qui ne sont pas requis pour le démarrage du système, devraient être compilés comme modules.// | ||
+ | |||
+ | Mais notez que ce n'est pas forcément une règle stricte à respecter. Les drivers scsi ne sont pas forcément intégrés au noyau. Il faut alors que le ramdisk intègre les drivers et que le noyau les monte tout de suite après. Idemment, les drivers son peuvent être intégrés au noyau sans problème. C'est même obligatoire pour certaines cartes. Le problème est que s'il y a des mises à jour d'alsa par exemple, il faut recompiler le noyau, alors qu'une mise à jour du module correspondant est plus rapide. | ||
+ | |||
+ | === Ou sont situés tous ces fichiers ? === | ||
+ | |||
+ | * Les sources du noyau sont situés dans ''/ | ||
+ | * Le noyau est situé dans le repertoire ''/ | ||
+ | * Les modules kernel sont situés dans ''/ | ||
+ | |||
+ | === Quels fichiers composent le noyau ? === | ||
+ | |||
+ | Le noyau est composé de 3 parties : | ||
+ | * **vmlinuz** est l' | ||
+ | * **System.map** est le fichier qui contient les symboles noyau requis par les modules pour assurer le lancement avec succès des fonctions du noyau. | ||
+ | * **initrd** - //initial ram disk// - est un fichier qui charge les drivers compilés en modules nécessaire au démarrage du noyau. | ||
+ | |||
+ | Ces trois fichiers sont dépendants et chacun est régénéré à chaque compilation. | ||
+ | |||
+ | ====Comment savoir ce dont j'ai besoin ?==== | ||
+ | |||
+ | Il existe 3 commandes de base permettant de savoir ce que son matériel a dans le ventre. | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Il vous sera sans doute nécessaire de faire une petite analyse de votre système afin de déterminer quels modules peuvent être compilés en dur, si vous souhaiter alléger votre noyau en incluant uniquement les modules correspondants à votre système ou si vous voulez gagner du temps à la compilation. | ||
+ | |||
+ | Notez que vous pouvez sans vous poser de questions compiler tous les modules livrés avec les sources pour éviter les mauvaises surprises (oubli d'un module), au prix d'un temps de compilation plus long et d'un espace sur le disque dur légèrement réduit. | ||
+ | |||
+ | Pour savoir quels modules sont chargés sur mon système, j'ai l' | ||
+ | | ||
+ | lsmod|grep nomdumodule | ||
+ | | ||
+ | C'est très simple, ça mange pas de pain, et pourtant c'est à peu près tout ce dont on a besoin ;-) | ||
+ | |||
+ | =====Compilation et installation===== | ||
+ | |||
+ | ==== Compiler le noyau ==== | ||
+ | |||
+ | Vous serez heureux d' | ||
+ | |||
+ | $ make | ||
+ | |||
+ | Et allez vous préparer un café. | ||
+ | |||
+ | astuce : Si vous voulez continuer à vous servir de votre ordinateur pendant la compilation, | ||
+ | |||
+ | $ nice -n 19 make | ||
+ | |||
+ | Si vous possédez un processeur dualcœur ou biprocesseur (et que vous ne souhaitez pas trop utiliser votre PC pendant la compilation), | ||
+ | |||
+ | $ make -j 2 | ||
+ | |||
+ | Certaines distributions, | ||
+ | |||
+ | make rpm | ||
+ | |||
+ | |||
+ | ==== Installer le noyau ==== | ||
+ | |||
+ | À partir de maintenant, les opérations devront être réalisées en root, ou avec sudo pour les dérivées d' | ||
+ | |||
+ | **Installation des modules** : | ||
+ | |||
+ | # make modules_install | ||
+ | |||
+ | **Installation du noyau** : | ||
+ | |||
+ | # make install | ||
+ | |||
+ | Exemple du contenu de /boot : | ||
+ | boot.0300 | ||
+ | boot.0800 | ||
+ | boot_message.txt | ||
+ | config -> config-2.6.23.12 | ||
+ | config-2.6.22.9 | ||
+ | config-2.6.23.12 | ||
+ | initrd.splash | ||
+ | map | ||
+ | README.initrd -> / | ||
+ | splash.bmp | ||
+ | System.map -> System.map-2.6.23.12 | ||
+ | System.map-2.6.22.9 | ||
+ | System.map-2.6.23.12 | ||
+ | vmlinuz -> vmlinuz-2.6.23.12 | ||
+ | vmlinuz-2.6.22.9 | ||
+ | vmlinuz-2.6.23.12 | ||
+ | |||
+ | |||
+ | === Installation via RPM === | ||
+ | Pour les systèmes supportant la manipulation ;-) | ||
+ | Installer maintenant votre paquet RPM du noyau comme ceci : | ||
+ | |||
+ | # cd / | ||
+ | # rpm -ivh kernel-< | ||
+ | |||
+ | Note pour les utilisateurs d' | ||
+ | |||
+ | ==== Réinitialisation du secteur de démarrage ==== | ||
+ | |||
+ | Il faut maintenant recréer le ram disk initial pour le nouveau noyau, sinon le système ne sera certainement pas capable de redémarrer le nouveau noyau. | ||
+ | |||
+ | # mkinitrd | ||
+ | |||
+ | Notons que cette commande recréer un nouveau ram disk pour chacun des noyaux en présence détectés dans ''/ | ||
+ | |||
+ | ==== Configurer le chargeur de démarrage ==== | ||
+ | Il est utile de créer un lien symbolique vers le nouveau kernel et d' | ||
+ | # cd /boot | ||
+ | # ln -sf vmlinux-x.x.xx.x vmlinuz | ||
+ | # ln -sf System.map-x.x.xx.x System.map | ||
+ | # ln -sf config-x.x.xx.x config | ||
+ | == Lilo == | ||
+ | Extrait d'un %%/ | ||
+ | # nouveau kernel | ||
+ | image = / | ||
+ | root = /dev/sda2 | ||
+ | label = Zenwalk | ||
+ | initrd = / | ||
+ | read-only | ||
+ | # ancien kernel y.y.yy.y | ||
+ | image = / | ||
+ | root = /dev/sda2 | ||
+ | label = Zenwalk-old1 | ||
+ | initrd = / | ||
+ | read-only | ||
+ | # ancien kernel z.z.zz.z | ||
+ | image = / | ||
+ | root = /dev/sda2 | ||
+ | label = Zenwalk-old2 | ||
+ | initrd = / | ||
+ | read-only | ||
+ | Bien sûr ici **%%root =%%** est un exemple et est à adapter à votre configuration. | ||
+ | Ensuite il suffit de réinstaller Lilo : | ||
+ | # lilo -v | ||
+ | |||
+ | == Grub == | ||
+ | |||
+ | Vérifiez le fichier ''/ | ||
+ | |||
+ | Une section-type se présente comme ceci : | ||
+ | |||
+ | title openSUSE 10.x | ||
+ | root (hd0,0) | ||
+ | kernel / | ||
+ | initrd / | ||
+ | |||
+ | Notez qu'en cas de besoin, Grub vous permet en tout temps de booter sur n' | ||
+ | |||
+ | =====Une dernière chose...===== | ||
+ | |||
+ | si vous voulez essayer le noyau fraîchement compilé... il faut redémarrer :-p | ||
+ | |||
+ | |||
+ | |||
+ | ===== Configurer le noyau ===== | ||
+ | |||
+ | |||
+ | **Note : Concernant le message d' | ||
+ | |||
opensuse/compilation_noyau.txt · Dernière modification : 2018/11/17 12:53 de 127.0.0.1