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
utilisateurs:hypathie:tutos:kernel-linux [22/08/2014 08:46]
Hypathie [Patch]
utilisateurs:hypathie:tutos:kernel-linux [24/08/2014 07:39] (Version actuelle)
Hypathie [Personnalisation du noyau]
Ligne 368: Ligne 368:
  
  
-=====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>​
 +
 +====Installer son noyau et ses modules ====
 +
 +<code root>​make install</​code>​
 +
 +Dans le fichier de ses sources (après ''​make all''​ ou ''​make''​)
 +-> Cela copie le monobloc dans /​boot\\ ​
 +-> copie du fichier "​system.map"​\\ ​
 +-> création et mise en place d'un initrd (si on ne l'a pas fait)\\ ​
 +-> modifie grub
 +
 +===le fichier system.map ===
 +
 +Il a été créé lors du ''​make all''​. Il fait une table de correspondance entre nom symbolique et leur adresse en mémoire.\\ ​
 +<​note>​
 +Il est bien de le copier :\\
 +(en root)\\
 +
 +-> **''​cp System.map /​boot/​system.map-xxx''​**\\
 +
 +-> **''​rm /​boot/​System.map''​**\\
 +
 +-> **''​ln -s /​boot/​System.map-version-de-son-kernel /​bootSystem.map''​**\\
 +</​note>​
 +
 +Si on a voulu séparer les différentes opération et qu'on a pas fait de ''​make install''​ dans le fichier de source, on ajoute enfin les modules.
 +
 +<code root>​make modules_install</​code> ​
 +
 +Cela installe tous les modules dans /​lib/​modules/​n°kernel-version.\\
 +
 +**Opération indispensable avant de créer un initrd car pour le faire c'est dans /​lib/​modules/​n°kernel-version que **mkinitrd** ou **mkinitramfs** il trouve les infos nécessaires pour créer un initrd.**
 +
 +====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.\\ ​
 +
 +
 +Quelques outils pour créer un initrd :\\ 
 +
 +  * mkinitrd (distrib à base de Redhat)
 +  * mkinitramfs (db)
 +
 +=== mkinitrd===
 +
 +<​code>​mkinitrd /​boot/​initrd-XXXX.img n°du-kernel-version</​code>​
 +
 +-> On donne le nom qu'on veut pour son initrd\\ ​
 +-> Par exemple : ''​mkinitrd ./​mon-initrd.img $(uname -r)''​\\ ​
 +-> ''​$(uname -r)''​ : pour le kernel actuel.\\ ​
 +-> il se crée un initrd pour la version instalée de /boot : ''​vmlinuz-3.2.0-4-amd64''​\\ ​
 +-> Depuis /boot : ./​mon-initrd.img 3.2.0-4-amd64\\ ​
 +-> faire un uname -r\\ pour voir celle installée\\ ​
 +-> Pour faire un initrd pour une autre, faire un make install avant (voir plus bas).
 +
 +<​note>​
 +** ''​-f''​** pour écraser l'​ancien.\\ ​
 +Mais mieux veut faire ''​mv initramfs-xxx.img ~/''​\\
 +
 +** ''​--preload <​module>''​** : définir un module qui sera chargé avant le module SCSI au démarrage (utile pour certains drivers du disque dur, ou certains système de fichier.\\ ​
 +
 +** ''​image-version''​** : ajoute le nom du kernel au chemin de l'​initrd ​ ce qui permet d'​avoir par exemple la création de initramfs-xxxx.img\\ ​
 +
 +**''​--with=<​module>''​** : pour personnalisé,​ ajouter des modules après le SCSI
 +</​note>​
 +
 +===mkinitramfs ===
 +
 +<​code>​mkinittramfs -o /​boot/​initramfs-xxxx.img n°kernel-version</​code>​
 +
 +<​note>​
 +**''​-o''​** : pour indiquer le fichier de sortie\\
 +**''​-d''​** fichier de config : permet de détecter les drivers des systèmes de fichier dont il a besoin, par défaut c'est initramfs.\\ ​
 +**''​-k''​** : ne pas supprimer le fichier temporaire qui a servi pendant ​ la création.\\ ​
 +**''​-v''​** : verbose\\ ​
 +**''​-r''​** root : pour définir la partition racine (on peut définir ici ce qu'on a définit dans grub2)\\ ​
 +**''​--supported-host-version=version-spécifiée''​** : avant de lancer mkinitramfs,​ vérifier si le programme peut créer une image pour la version spécifiée.\\ ​
 +**''​--supported-target-version=version-target''​** : vérifier si une target est supportée\\ ​
 +
 +Quand on fait ''​mkinitramfs -o /​boot/​initrd.img n°version'',​ ce n° de version signifie "va chercher dans /​lib/​modules/​n°version,​ créé lors de l'​installation des modules avec ''​make modules_install''​. ​
 +</​note>​
 +
 +Par exemple : <code root>​mkintramfs -o mon-initrd.img $(uname -r)</​code>​
 +
 +====Configuration de Grub ====
 +
 +===Legacy ===
 +
 +
 +
 +===Grub2===
  
  
utilisateurs/hypathie/tutos/kernel-linux.1408689984.txt.gz · Dernière modification: 22/08/2014 08:46 par Hypathie

Pied de page des forums

Propulsé par FluxBB