logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

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
Dernière révision Les deux révisions suivantes
utilisateurs:hypathie:tutos:kernel-linux [22/08/2014 02:23]
martinux_qc [Introduction]
utilisateurs:hypathie:tutos:kernel-linux [22/08/2014 13:08]
Hypathie [Personnalisation du noyau]
Ligne 26: Ligne 26:
 <code root>​wget https://​www.kernel.org/​pub/​linux/​kernel/​v3.x/​linux-3.16.1.tar.xz</​code>​ <code root>​wget https://​www.kernel.org/​pub/​linux/​kernel/​v3.x/​linux-3.16.1.tar.xz</​code>​
 <code root>tar -xvJf linux-3.16.1.tar.xz</​code>​ <code root>tar -xvJf linux-3.16.1.tar.xz</​code>​
-<code root>​ls</​code+<code root>​ls</​code>
 <​code>​ <​code>​
 linux-3.16.1 ​ linux-3.16.1.tar.xz linux-3.16.1 ​ linux-3.16.1.tar.xz
Ligne 44: Ligne 44:
 </​code>​ </​code>​
  
-===Remarques sur Décompression/​Compression=== +=== Remarques sur Décompression/​Compression === 
-  * **Plusieurs ​programme ​de compression**\\ compression/​décompression d'un seul fichier à la fois:​\\ ​+ 
 +  * **Plusieurs ​programmes ​de compression**\\ compression/​décompression d'un seul fichier à la fois:​\\ ​
   * **gunzip** ; pour le format gz   * **gunzip** ; pour le format gz
   * **bzip2** ;  pour le format bz2.   * **bzip2** ;  pour le format bz2.
Ligne 147: Ligne 148:
   - ''​Documentation''​ : sur les fonctionnalités du kernel, très technique : dans cette documentation commencer par lire les fichiers "​INDEX"​ qui sont des résumés de chaque fichier de "​technique"​ de la doc.   - ''​Documentation''​ : sur les fonctionnalités du kernel, très technique : dans cette documentation commencer par lire les fichiers "​INDEX"​ qui sont des résumés de chaque fichier de "​technique"​ de la doc.
  
-=====Patch =====+===== Patch ===== 
 Un patch permet de modifier un logiciel existant.\\ Cela permet corriger un noyau manuellement,​ mais aussi de "​passer à une version supérieure"​.\\ ​ Un patch permet de modifier un logiciel existant.\\ Cela permet corriger un noyau manuellement,​ mais aussi de "​passer à une version supérieure"​.\\ ​
-Par exemple on a un version du noyau 3.8 et on se sert du patch pour la faire passer à la version 3.9.\\ Il y a aussi des patch pour modifier le comportement du kernel par exemple rt (temps réel).+Par exemple on a une version du noyau 3.8 et on se sert du patch pour la faire passer à la version 3.9.\\ Il y a aussi des patch pour modifier le comportement du kernel par exemple rt (temps réel). 
 + 
 +==== Patch correctif ==== 
 + 
 +=== Préparation d'une ancienne version à patcher===
  
-====Patch correctif ==== 
-===Préparation d'une ancienne version à patcher=== 
 aller sur [[https://​www.kernel.org/​pub/​]] -> "​linux"​ puis v3.x -> cliquer sur "Last modified"​. aller sur [[https://​www.kernel.org/​pub/​]] -> "​linux"​ puis v3.x -> cliquer sur "Last modified"​.
  
Ligne 248: Ligne 252:
 </​note>​ </​note>​
  
-===Lancer un test de patch===+===Lancer un test avant d'​appliquer un patch===
  
 <​code>​patch -p1 --dry-run < fichier-du-patch</​code>​ <​code>​patch -p1 --dry-run < fichier-du-patch</​code>​
  
 Par exemple :  Par exemple : 
-<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.13</​code>​+<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.12</​code>​
 Il est demandé "​Reversed (or previous applied) patch detected)! Assume -R? [n]"​\\ ​ Il est demandé "​Reversed (or previous applied) patch detected)! Assume -R? [n]"​\\ ​
-Il faut taper **''​y''​** pour avancer jusqu'​au bout. Ce message apparaît quand on applique un patch d'une version supérieure ou q'un a déjà appliqué ​le patch, ou autre erreur. +Il faut taper **''​y''​** pour avancer jusqu'​au bout. Ce message apparaît quand on applique un patch d'une version supérieure ou qu'on a déjà appliqué ​un patch, ou autre erreur. 
-Cette version ​déjà été patchée. On supprime le dossier source "​linux-3.8"​ et on décompresse "​linux-3.8.tar.xz"​.+Cette version ​avait déjà été patchée. On supprime le dossier source "​linux-3.8"​ et on décompresse "​linux-3.8.tar.xz"​.
  
 On essaie à nouveau :  On essaie à nouveau : 
-<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.13</​code>​+<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.12</​code>​
  
 C'est ok donc on lance la commande : C'est ok donc on lance la commande :
  
-<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.13</​code>​+<code root>cd linux-3.8 && patch -p1 --dry-run < ../​patch-3.8.12</​code>​
  
-===Revenir à une version antérieure ("​dé-patcher"​) ===+====Revenir à une version antérieure ("​dé-patcher"​) ​====
  
-<​code>​zcat patch-version | patch -p0 -R</​code>​+<​code>​patch -p0 -R < ./​patch-version-à-retirer/code>
  
-===Effectuer une sauvegarde avant le patch=== +Par exemple, à la version "​linux-3.8",​ 
-<​code>​patch -B oldfile-p0 patch-file</​code>​+<​code ​root>cd linux-3.8</code> 
 +<code>​make kernelversion</​code>​ 
 +<​code>​3.8.0</​code>​
  
-Récupération ​de la sauvegarde : +  *le patch-3.8.13((''​cd linux-3.8''​ puis ''​patch -p1 < ../​patch-3.8.13''​ puis ''​make kernelversion''​ on a bien ''​3.8.13''​)) 
-<​code>​diff -ur linux-version oldfiles/​linux-version > recover-version-patch</​code>​+ 
 +Pour passer ​de la version linux-3.8.13 à la version linux-3.8.0,​ on fait : 
 + 
 +<code root>/​usr/​src/​linux-3.8#​ patch -p1 -R < ../​patch-3.8.13</​code>​ 
 + 
 +Et voilà : 
 +<code root>​make kernelversion</​code>​ 
 +<​code>​3.8.0</​code>​ 
 + 
 + 
 +====Effectuer une sauvegarde ​avant d'​appliquer un patch==== 
 +===Création d'une sauvegarde des sources à patcher=== 
 + 
 +<​code>​patch -p0 -B fichier-sauvegarde/​ -b < ./​patch-version</​code>​ 
 + 
 +Par exemple, avant d'​appliquer un patch, 
 + 
 +<code root>cd linux-3.8 && mkdir save-linux-3.8</​code>​ 
 + 
 +  * Puis on applique le patch ainsi : 
 +<code root>​patch -p1 -B save-linux-3.8/​ -b < ../​patch-3.8.13</​code>​ 
 + 
 +**On vérifie la nouvelle version** : 
 +<code root>​make kernelversion</​code>​ 
 +<​code>​3.8.13</​code>​ 
 + 
 +Et on a une sauvegarde des sources de "​linux-3.8.0":​ 
 +<code root>ls save-linux-3.8/</​code>​ 
 +<​code>​arch Documentation ​ include lib  ​ net     sound 
 +block drivers ​       ipc Makefile ​ scripts ​  ​tools 
 +crypto fs  ​      ​kernel mm  ​ security ​ virt</​code>​ 
 + 
 +===Revenir à la version "​linux-3.8.0"​ avec la sauvegarde :=== 
 + 
 +  * créer un dossier de sauvegarde des modifications ​
 +<​code>​diff -ur linux-version oldfiles/​linux-version > fichier-de-récupération-du-patch</​code>​ 
 + 
 +>"​fichier-de-récupération-du-patch"​ est un fichier contenant une comparaison entre la sauvegarde de linux-3.8.0 et le dossier actuel (les sources patchée en linux-3.8.13). 
 +> -r : indiquer des répertoires 
 +> -u :  
 + 
 +Par exemple : 
 +<code root>cd /​usr/​src/</​code>​ 
 +<code root>​diff -ur . ./​save-linux-3.8/​ > patch-save</​code>​ 
 + 
 +  * Se servir de ce fichier de comparaison pour récupérer l'​ancienne ​version ​du noyau : 
 + 
 +<code root>​patch ​-p0 < ./patch-save</​code>​ 
 + 
 +**Vérifier** : 
 +<code root>​make kernelversion</​code>​ 
 +<​code>​3.8.0</​code>​ 
 + 
 +====Autre méthode pour créer une sauvegarde lors de l'​application d'un patch==== 
 + 
 +Il s'agit d'​appliquer le patch en demandant la création d'un dossier "​Makefile.orig"​ dans le dossier le nouveau dossier des sources patché. 
 + 
 +Par exemple, application à la version linux-3.8.0 
 +<code root>​make kernelversion</​code>​ 
 +<​code>​3.8.0</​code>​ 
 + 
 +du patch-3.8.13 : 
 +<code root>​patch -p1 -b < ../​patch-3.8.13</​code>​ 
 + 
 +Vérification de la nouvelle version du noyau: 
 +<code root> make kernelversion</​code>​ 
 +<​code>​3.8.13</​code>​ 
 + 
 +Le fichier "​Makefile.orig"​ a été créé dans le dossier des sources : 
 +<code root>​ls</​code>​ 
 +<​code>​arch  ​      ​drivers Kbuild ​      ​Makefile.orig ​  ​samples  ​     usr 
 +block  ​      ​firmware ​ Kconfig ​     mm       save-linux-3.8 ​ virt 
 +COPYING ​       fs kernel ​      ​net  ​     scripts 
 +CREDITS ​       include lib       patch-save ​     security 
 +crypto  ​      init MAINTAINERS ​ README  ​     sound 
 +Documentation ​ ipc Makefile ​    ​REPORTING-BUGS ​ tools</​code>​ 
 + 
 +===Récupération de la version originale à partir de ce dossier "​Makefile.orig"​=== 
 + 
 +Il faut utiliser un script shell. 
 +<code bash> 
 +for i in $(find linux-3.8 | grep "​orig"​) 
 +do 
 +DOSSIER=$(echo $i | sed '​s/​\.orgig//'​) 
 +mv -f $i $DOSSIER 
 +done 
 +</​code>​
  
-===Conserver les fichiers d'​origine === 
  
-<​code>​patch -b -p0 < fichier-patch</​code>​ 
 =====Personnalisation du noyau ===== =====Personnalisation du noyau =====
 +
 +====La commande make====
 +
 +Elle permet le nettoyage ; la configuration ; la compilation ; l'​installation.
 +
 +<code user>​make [ -f makefile] [options ] ... [cibles]</​code>​
 +
 +La cible définit l'​action.\\ ​
 +Par exemple pour un nettoyage :
 +<code user>​make mrproper</​code
 +
 +===Choisir les composant en fonction du matériel ===
 +Pour connaître son matériel voir : lspci ; lsmod
 +
 +===Préparer son kernel ===
 +Avoir décompresser : "​linux-3.16.1.xz"​
 +<code user>cd /​usr/​src/​linux-3.16.1/</​code>​
 +
 +  * Le nettoyer :
 +
 +<code root>​make mrproper</​code>​
 +
 +<​note>​
 +<​code>​make mrproper</​code>​
 +
 +>​supprime tous, fichiers de configuration et fichiers générés, il ne conserve que la source. Il faut l'​utiliser avant la compilation.
 +
 +<​code>​make clean</​code>​
 +
 +>​Supprime les fichiers .o issus d'une éventuelle compilation précédente et d'​autres fichiers inutiles, ne laisse que ceux nécessaires à la construction des modules.
 +
 +<​code>​make distclean</​code>​
 +
 +>​Supprime les fichiers de sauvegarde des éditeurs, les patchs.
 +</​note>​
 +
 +===Configurer ===
 +
 +La configuration permet de créer un fichier .config
 +
 +<code root>​apt-get install ncurses-dev</​code>​
 +
 +Puis :
 +<code root>/​usr/​src/​linux-3.16.1#​ make menuconfig</​code>​
 +
 +{{http://​pix.toile-libre.org/​upload/​original/​1408700611.png?​400}}
 +
 +-> choisir **Save**\\ ​
 +
 +{{http://​pix.toile-libre.org/​upload/​original/​1408700663.png?​400}}
 +
 +-> choisir **Ok**\\ ​
 +-> puis "​Configuration written to .config"​ : choisir "​Exit"​ pour l'​instant.\\ ​
 +-> Retour au premier écran : "​Exit"​
 +
 +<​code>​ls -a</​code>​
 +<​code>​
 +. COPYING firmware ​   ipc      .mailmap  ​ README  ​ sound
 +.. CREDITS fs  ​   Kbuild ​  ​MAINTAINERS ​ REPORTING-BUGS ​ tools
 +arch crypto .gitignore ​ Kconfig ​ Makefile  ​ samples  ​ usr
 +block Documentation include ​    ​kernel ​  ​mm  ​ scripts  ​ virt
 +.config ​ drivers init  ​   lib      net   security</​code>​
 +
 +-> On a un fichier **.config** : composé d'un ensemble de clés=valeurs.\\ ​
 +La clé indique la fonctionnalité,​ et la valeur "​y"​ pour activer la fonctionnalité;​ valeur "​m"​ pour mettre la fonctionnalité en module. ​
 +
 +===Définir .config avec make config===
 +
 +On peut soit l'​éditer,​ soit utiliser **''​make config''​**.\\ ​
 +Avec make config, il demande fonctionnalité par fonctionnalité si on veut l'​ajouter.\\ ​
 +**y** pour l'​ajouter\\
 +**N** pour ne pas l'​activer\\
 +**?** pour avoir des infos sur la fonctionnalité.\\ ​
 +
 +Pour sortir :
 +<​code>​Stop</​code>​
 +
 +===Définir avec menuconfig ===
 +
 +<code root>​make menuconfig</​code>​
 +On sélectionne la catégorie qu'on souhaite modifier.\\ ​
 +Par exemple on sélectionne "​Network"​ puis <​entrée>​\\ ​
 +
 +{{http://​pix.toile-libre.org/​upload/​original/​1408702370.png?​300}}
 +
 +On ajoute ce qu'on veut avec "​shift+y"​ (ça met un "​*"​ ou "​shift+m"​ (ça met un "​M"​) ou "​shift+n"​ (ça met un emplacement vide). ​
 +
 +Ou **?** pour avoir la doc de la fonctionnalité.
 +
 +===On peut le faire avec make xconfig ===
 +Idem avec interface graphique.
 +
 +===Avec make gconfig ===
 +Pour les librairies GTK. 
 +
 +====Compilation du noyau ====
 +__Résumé :__
 +
 +  -vérifier les dépendances **''​make dep''​** (pour les noyau 2.2 et 2.4 seulement)
 +  -nettoyer (voir ci-dessus)
 +  -compiler le monobloc
 +  -compiler les modules
 +  -installer les modules
 +
 +====compiler le monobloc ====
 +Dans le fichier décompresser des sources qui a été nettoyé :
 +
 +<code root>/​usr/​src/​linux-3.16.1#​ make</​code>​
 +
 +ou 
 +
 +<code root>/​usr/​src/​linux-3.16.1#​ make all</​code>​
 +
 +-> il construit le monobloc et les modules
 +
 +===afficher que les erreurs issues de la compilation ===
 +
 +<code root>/​usr/​src/​linux-3.16.1#​ make all | grep -iw "​error"</​code>​
 +
 +C'est long ! Mais la compilation terminée, on a un "​vmlinux"​ ; un monobloc qui peut être lancé par le bootloader.
 +
 +===Pour compiler le monobloc sans les modules ===
 +
 +<​code>​make [bzImage [zImage] ]</​code>​
 +
 +-> bzImage ou zImage selon le type de monobloc
 +
 +===Compiler les modules ===
 +Après avoir fait un **''​make bzImage''​**;​\\ ​
 +On fait un :
 +
 +<​code>​make modules</​code>​
 +
 +
 +====Créer un package (plutôt que de compiler le noyau)====
 +
 +  * Pour CentOs **''​make rpm''​**\\ une fois créé **''​rpm fichier-créé-avec-make-rpm''​**
 +
 +
 +  * Pour Debian **''​make-kpkg kernel_image''​**
 +===Avec debian===
 +
 +  *Installer kpkg :
 +<code root>​apt-get install kernel-package</​code>​
 +
 +Puis dans le dossier des sources, par exemple "/​usr/​src/​linux-3.16.1"​
 +
 +  * Créer le paquet :
 + 
 +<code root>​make-kpkg kernel_image</​code>​
 +
 +
 +====INITial Ram Disk ====
 +Grub2 lance le kernel linux "​vmlinux"​ mais peut avoir besoin de module pour lancer le système de fichiers.\\ ​
 +Le INTial Ram Disk (ou **initrd** système de fichiers virtuel) se charge en mémoire vive (cramfs ou squashfs) qui sert de racine temporaire pour le kernel, qui peut alors aller chercher dans le système de fichiers du noyau ce dont il a besoin.
 +
 +Mais si depuis la compilation le matos a changé, on ajoute les modules nécessaires dans un INITial Ram Disk qu'on crée pour cela, plutôt que de re-compiler un noyau.\\ ​
 +
 +
 +===Créer un initrd ===
 +Quelques outils :
 +
 +  * mkinitrd (distrib à base de Redhat)
 +  * mkinitramfs (db)
 +
 +
 +
 +
  
  
utilisateurs/hypathie/tutos/kernel-linux.txt · Dernière modification: 24/08/2014 07:39 par Hypathie

Pied de page des forums

Propulsé par FluxBB