compiler-kernel-5

Différences

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

Lien vers cette vue comparative

compiler-kernel-5 [2019/07/05 19:00]
crust
compiler-kernel-5 [2019/07/17 19:24]
Ligne 1: Ligne 1:
-====== Compiler un kernel 5  ====== 
- 
-Pour ceux qui veulent bénéficier d'un kernel 5 sans passer passer par un utilitaire graphique, un ppa, un kernel d'une autre distribution,​ etc afin que celui-ci sont réellement adapté à leur machine. 
- 
-How-to proposé pour le kernel 5.1.9, similaire pour les autres kernels. 
-Testé sur une MINT 18.3 à jour (aussi une DEBIAN SID), pas de raison que ce soit différent pour une MINT 19. 
-Section shell, ligne de commandes 
- 
- 
- 
-===== La machine de test ===== 
- 
-DELL LATITUDE E6410, Mint 18.3 
- 
- 
-<code bash>​libres09@libres09-Latitude-E6410 ~ $ hostnamectl ​ 
-.. 
-  Operating System: Linux Mint 18.3 
-            Kernel: Linux 4.10.0-38-generic 
-      Architecture:​ x86-64 
-</​code>​ 
- 
- 
-<code bash>​libres09@libres09-Latitude-E6410 ~ $ uname -a 
-Linux libres09-Latitude-E6410 4.10.0-38-generic #​42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 
-</​code>​ 
- 
- 
- 
-===== Préparer la machine ===== 
- 
-Installer les paquets nécessaires à la compilation 
- 
-<code bash>​sudo apt-get install libncurses-dev libssl-dev ​ libelf-dev</​code> ​ 
- 
- 
-===== Récupérer le dernier kernel ===== 
- 
- 
-Récupérer l'​archive contenant les sources du dernier kernel. 
- 
-Ces sources sont disponibles ici. [[http://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​|http://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​]] 
- 
-On travaillera dans le répertoire **kernel-5**. 
- 
-<code bash>​mkdir kernel5 
-cd kernel5 
-wget https://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​linux-5.1.9.tar.gz</​code>​ 
- 
-Récupérer aussi sa signature ( [[https://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​linux-5.1.9.tar.sign|https://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​linux-5.1.9.tar.sign]] ) permettra de tester l'​intégrité de l'​archive. 
- 
-Décompresser l'​archive 
- 
-<code bash>tar xvf linux-5.1.9.tar.gz 
-cd linux-5.1.9/</​code> ​ 
- 
-Copier le fichier de configuration d'un kernel 4 générique 
- 
-===== Le fichier .config ===== 
- 
- 
-<code bash>cp -v /​boot/​config-$(uname -r) .config</​code>​ 
- 
-Pour ceux qui veulent modifier des options de compilations : voir section plus bas. 
- 
-<code bash>​make menuconfig</​code>​ 
- 
-On s'​appuie sur le fichier de configuration d'un kernel 4 générique dans un premier temps pour ne pas avoir à remplir par nous mème toutes les options de la compilation. 
-Ce kernel ne sera pas le plus optimisé mais c'est le moyen le plus sûr pour que ça marche du premier coup. 
- 
-===== Lancer la compilation ===== 
- 
-Ce processus, en fonction des machines, prendra un certain temps. 
-Autant utiliser le nombre maximal de processeurs que l'on dispose. 
- 
-De combien de processeurs mon PC dispose-t-il ? 
- 
-<code bash>​echo $(nproc) 
-4</​code>​ 
- 
-Donc on peut lancer la compilation en les utilisant tous (choisir l'une des 2 lignes, elles font la même chose) 
- 
-<code bash> make -j $(nproc) 
- make -j 4</​code> ​ 
- 
-Pour n'​utiliser que 2 processeurs sur les 4, par exemple 
-<code bash> make -j 2</​code>​ 
- 
-La compilation d'un noyau est un processus relativement long. Sur ce i5, 4 cœurs, elle prend plus de 2 heures, donc prévoyez de l'​occupation. Elle peut tourner en arrière plan sans problème. 
-Généralement,​ pas de soucis particulier,​ au pire lire l'​erreur,​ il s'agit souvent d'un paquet de développement à installer (dont le nom est stipulé)... 
- 
- 
-===== Installation des modules de ce nouveau kernel ===== 
- 
-Une fois la compilation terminée, il faut installer tous les modules de ce noyau 
- 
-<code bash>​sudo make modules_install</​code>​ 
- 
- 
-Les modules sont installés ici 
- 
-<code bash>ls /​lib/​modules/​5.1.9/​ 
-build              modules.builtin ​     modules.devname ​ modules.symbols.bin 
-kernel ​            ​modules.builtin.bin ​ modules.order ​   source 
-modules.alias ​     modules.dep ​         modules.softdep 
-modules.alias.bin ​ modules.dep.bin ​     modules.symbols</​code>​ 
- 
- 
-===== Installation du kernel ===== 
- 
-On peut enfin installer le dernier kernel 
- 
-<code bash>​sudo make install</​code>​ 
- 
-On peut vérifier son installation 
- 
-<code bash>ls /boot 
-config-4.19.0-5-amd64 ​     initrd.img-4.9.0-9-amd64 ​  ​vmlinuz-4.19.0-5-amd64 
-config-4.9.0-9-amd64 ​      ​initrd.img-5.1.9 ​          ​vmlinuz-4.9.0-9-amd64 
-config-5.1.9 ​              ​System.map-4.19.0-5-amd64 ​ vmlinuz-5.1.9 
-config-5.1.9.old ​          ​System.map-4.9.0-9-amd64 ​  ​vmlinuz-5.1.9.old 
-grub                       ​System.map-5.1.9 
-initrd.img-4.19.0-5-amd64 ​ System.map-5.1.9.old</​code>​ 
- 
- 
-Les opérations suivantes sont obsolètes : sudo update-initramfs -c -k 5.0.0 && sudo update-grub . Donc on laisse tomber... 
- 
-===== Prise en charge du kernel 5 ===== 
- 
-Normalement il sera configuré comme kernel par défaut dès le redémarrage de la machine. 
-Donc on reboote 
- 
-<code bash>​sudo /​sbin/​reboot</​code> ​ 
- 
- 
-Et ça passe nickel: 
- 
-<code bash>​libres09@libres09-Latitude-E6410 ~/​kernel5/​linux-5.1.9 $ hostnamectl ​ 
-... 
-  Operating System: Linux Mint 18.3 
-            Kernel: Linux 5.1.9 
-      Architecture:​ x86-64</​code>​ 
- 
-<code bash>​libres09@libres09-Latitude-E6410 ~/​kernel5/​linux-5.1.9 $ uname -a 
-Linux libres09-Latitude-E6410 5.1.9 #1 SMP Tue Jun 18 10:36:54 CEST 2019 x86_64 x86_64 x86_64 GNU/​Linux</​code>​ 
- 
- 
-===== Personnaliser la compilation du kernel ===== 
- 
-Avant la compilation,​ on peut bien entendu personnaliser les options du fichier de configuration afin d'​optimiser ce kernel. 
- 
-__ Pour cela 3 utilitaires__ 
-  *     make menuconfig : pas besoin de serveur X, nickel pour du ssh par exemple, du tty 
-  *     make xconfig : le même mais avec interface graphique de Qt (nécessite un serveur X) 
-  *     make gconfig : le même mais avec interface graphique de GTK+ 2.0 (nécessite un serveur X) 
- 
- 
-Sur mon PC, par exemple, si je regarde quels drivers sont utiles pour ma carte graphique 
- 
-<code bash>​inxi -G 
-Graphics: 
-  Device-1: Intel Haswell-ULT Integrated Graphics driver: i915 v: kernel ​ 
-  Display: x11 server: X.Org 1.20.4 driver: modesetting unloaded: fbdev,​vesa ​ 
-  resolution: 1366x768~60Hz ​ 
-  OpenGL: renderer: Mesa DRI Intel Haswell Mobile v: 4.5 Mesa 18.3.6</​code> ​ 
- 
-Image 
- 
-Je remarque que le module nécessaire est le **__i915__**,​ je n'ai pas besoin des Nvidia, des AMD, il me suffit de ne pas les compiler pour gagner de la place... 
-Il suffit de naviguer dans le menu de configuration du kernel est de désactiver tout ce qui n'est pas nécessaire,​ aussi bien les drivers inclus au kernel que les modules. 
- 
-Idem, je peux enlever tous les drivers de la section Net, sauf celui de ma puce WIFI et carte Ethernet... Idem pour le son.... 
-C'est ainsi qu'on optimise... 
- 
-Marqués par une astérix (*****) : le driver sera inclus au kernel lui-même. Par besoin de le charger (modprobe). 
-Si marqué par un **M**, le driver sera compilé, mais ne sera pas inclus au kernel. Il faudra le charger pour le prendre en compte. On parle de module. 
- 
-Vu la taille des disques actuels, si vous n'​êtes pas sûr de vous, ne touchez pas aux options de configuration,​ celles issues de la copie du fichier .config d'un kernel existant et générique feront très bien l'​affaire. 
-Plus intéressant,​ sur des machines dont la place est restreinte, ou si la sécurité est un critère important, ou pour les systèmes embarqués. 
- 
-Faites attention, si vous supprimez un module important, exemple le support de l'​ext4,​ vous avez toutes les chances ne pas pouvoir démarrer le système. 
- 
- 
-Mon système plante ! Je suis perdu ! 
-Pas de soucis, rebooter ; depuis le grub sur le kernel précédent et revoyez vous configuration de compilation. 
- 
-===== Erreur de keyring à la config ===== 
- 
-<code bash>​CC ​     certs/​system_keyring.o 
-make[2]: *** No rule to make target '​debian/​certs/​benh@debian.org.cert.pem',​ needed by '​certs/​x509_certificate_list'​. ​ Stop. 
-Makefile:​951:​ recipe for target '​certs'​ failed 
-make[1]: *** [certs] Error 2</​code>​ 
- 
-si vous rencontrez cette erreur. 
-Vous pouvez corriger rapidement le fichier de configuration via cette commande sed 
- 
-<code bash>sed -ri '/​CONFIG_SYSTEM_TRUSTED_KEYS/​s/​=.+/​=""/​g'​ .config</​code>​ 
- 
-(j'ai rencontré cette erreur sous DEBIAN, pas sous MINT) 
- 
- 
- 
-===== Conclusion ===== 
- 
-Donc voilà. Donc vous voyez, plutôt que de piocher des kernels à droite à gauche, sans savoir ce qu'ils ont dans le ventre, il n'est pas compliqué de compiler le sien. 
- 
-__Approfondir__ 
-Changelog-5.0 : Voici les nouveautés / changements du noyau 5 : 
-[[https://​mirrors.edge.kernel.org/​pub/​linux/​kernel/​v5.x/​ChangeLog-5.0|https://​mirrors.edge.kernel.org/​pub/​linux/​kernel/​v5.x/​ChangeLog-5.0]] 
- 
-[[https://​www.kernel.org/​|The Linux Kernel]] 
- 
-===== Résumé ===== 
- 
-J'​avais dit quelques lignes, donc je respecte mon engagement 
- 
-<code bash>​wget https://​cdn.kernel.org/​pub/​linux/​kernel/​v5.x/​linux-5.1.9.tar.xz 
-tar xvf linux-5.1.9.tar.xz 
-cd linux-5.1.9/​ 
-cp -v /​boot/​config-$(uname -r) .config 
-make menuconfig 
-make -j $(nproc) 
-sudo make modules_install 
-sudo make install 
-sudo reboot</​code>​ 
  
  • compiler-kernel-5.txt
  • Dernière modification: 2019/07/17 19:24
  • (modification externe)