Thu Mar 30 10:06:42 2017 UTC

Compiler et installer son propre noyau

Introduction

Cet article peut s'appliquer à toute autre distribution.

Si vous avez décidé de compiler vous-même votre noyau, cet article vous explique sommairement comment compiler et installer un noyau personnalisé.

Il existe beaucoup de raisons de vouloir compiler son propre noyau. Avoir un noyau optimisé en taille et pour son propre matériel est sans doute la raison la plus fréquente.

Si vous êtes sur NuTyX, assurez-vous d'avoir installé le jeu de paquets de dévelopement:

get cards.devel

Vérifier la machine qui utilisera le futur kernel

On va commencer par prendre connaîssance de son matériel avec la commande:

lspci
00:00.0 Host bridge: Intel Corporation Atom Processor D2xxx/N2xxx DRAM Controller (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Atom Processor D2xxx/N2xxx Integrated Graphics Controller (rev 09)
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 2 (rev 02)
00:1c.2 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 3 (rev 02)
00:1d.0 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #1 (rev 02)
00:1d.1 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #2 (rev 02)
00:1d.2 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #3 (rev 02)
00:1d.3 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #4 (rev 02)
00:1d.7 USB controller: Intel Corporation NM10/ICH7 Family USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation NM10 Family LPC Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation NM10/ICH7 Family SATA Controller [AHCI mode] (rev 02)
00:1f.3 SMBus: Intel Corporation NM10/ICH7 Family SMBus Controller (rev 02)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 05)                                                       
02:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)                                                                              
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5209 PCI Express Card Reader (rev 01)

On retiendra donc:

  • processeur Atom
  • Audio device Intel
  • Controlleur SATA Intel
  • Carte réseau: Realtek RTL8101E/RTL8102E
  • Carte graphique. Intel Atom Processor D2xxx/N2xxx

Voici un résumé de ce que l'on va faire. Il faut savoir que les étapes 4 et 5 peuvent être refaites à l'infini (dans le cas où le noyau ne booterai pas par exemple). Voici les différentes étapes à suivre:

Télécharger les sources du noyau

Pour pouvoir compiler un noyau, il faut donc commencer par récupérer les sources d'une version de noyau. Au moment de l'écriture de l'article, la version 4.9 est disponible. Nous allons donc prendre le risque de le compiler...

Ouvrez un terminal et tapez la commande:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.tar.xz

Les sources commencent à se télécharger dans votre dossier personnel

--2012-09-01 17:49:53--  http://www.kernel.org/pub/linux/kernel/v4.0/linux-4.9.tar.xz
Résolution de www.kernel.org... 149.20.4.69, 149.20.20.133
Connexion vers www.kernel.org|149.20.4.69|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 82259123 (78M) [application/x-bzip2]
Sauvegarde en : «linux-4.9.tar.bz2»

100%[=============================>] 82.259.123  2,55M/s   ds 37s     

2012-09-01 17:50:31 (2,13 MB/s) - «linux-4.9.tar.xz» sauvegardé [82259123/82259123]

Extraire les sources du noyau

On extrait les sources du noyau téléchargées:

tar xf linux-4.9.tar.xz

Après quelques minutes, le prompt sera à nouveau disponible et les sources du noyau seront en place. Se rendre dans le dossier du noyau et taper les commandes magiques pour configurer les options qui nous semblent utiles. Pour pouvoir compiler le noyau, il faut être dans le dossier sources de celui-ci, tapez dans votre console:

Se rendre dans le dossier des sources

cd linux-4.9

Nous sommes maintenant prêt à lancer quelques commandes magiques.

Je vous conseille pour commencer histoire de se faire une idée des possibilitées du makefile d'utiliser la commande:

make help|more

Elle vous donnera TOUTES les options qui vous sont disponibles pour la compilation du noyau et de ses modules.

Cleaning targets:
  clean           - Remove most generated files but keep the config and
                    enough build support to build external modules
  mrproper        - Remove all generated files + config + various backup files
  distclean       - mrproper + remove editor backup and patch files

Configuration targets:
  config          - Update current config utilising a line-oriented program
  nconfig         - Update current config utilising a ncurses menu based program
  menuconfig      - Update current config utilising a menu based program
  xconfig         - Update current config utilising a QT based front-end
  gconfig         - Update current config utilising a GTK based front-end
  oldconfig       - Update current config utilising a provided .config as base
  localmodconfig  - Update current config disabling modules not loaded
  localyesconfig  - Update current config converting local mods to core
  silentoldconfig - Same as oldconfig, but quietly, additionally update deps
  defconfig       - New config with default from ARCH supplied defconfig
  savedefconfig   - Save current config as ./defconfig (minimal config)
  allnoconfig     - New config where all options are answered with no
  allyesconfig    - New config where all options are accepted with yes
  allmodconfig    - New config selecting modules when possible
  alldefconfig    - New config with all symbols set to default
  randconfig      - New config with random answer to all options
  listnewconfig   - List new options
  oldnoconfig     - Same as silentoldconfig but sets new symbols to their default value

......
....

Je vous ai mis que le début Wink. On va donc commencer par s'assurer que les sources sont propres et dépourvus de toute partie de code déjà compilée.

* Cette commande n'est à faire qu'à la première tentative de compilation du noyau. Il n'est plus necessaire de taper cette commande ci-dessous si vous souhaitez recompiler le noyau pour diverses raisons
make mrproper

Aucun message ne doit apparaître. Nous allons maintenant lancer l'outil de configuration afin de choisir le minimum d'options necessaire pour avoir un noyau fonctionnel. J'ai volontairement choisi l'interface non graphique en effet, vous pouvez la lancer dans une chroot, une console graphique ou non.

Configurer les options de compilation

L'équipe de Linuxfromscratch recommande de déactiver la variable LC_ALL:

LC_ALL= make menuconfig

Vous voici devant le menu principal de configuration du noyau:

Configuration menu principal

Dans cet article, je ne vais que choisir les options indispensables au bon amorçage du noyau et donc optenir un nombre de modules plus petit. Il faut savoir que le noyau disponible en binaire en contient plus de 5000.

Naviguez à travers tous les menus et activez UNIQUEMENT les options mentionés ci-dessous. Comme vous pouvez le voir nous déactivons tous les modules, puisque ils ne sont pas necessaires dans une configuration minimaliste:

General Setup
Kernel compression mode (Gzip)
(NuTyX) Default hostname
Support for paging of anonymous memory
System V IPC
POSIX Message Queues
(18) Kernel log buffer size
Namespaces support
Enable loadable module support
Enable the block layer
IO Schedulers ---> CFQ I/O scheduler
Default I/O scheduler (CFQ)
Processor type and features
Processor family (Atom) Ajustez en fonction de votre microprocesseur
High Memory Support (4GB)
Memory model (Flat Memory))
(4096) Low address space to protect from user allocation
(64) Amount of low memory, in kilobytes, to reserve for the BIOS
(0x2000000) Alignment value to which kernel should be aligned
Power management and ACPI options
Bus options (PCI,etc)
PCI Support PCI access mode (Any)
Executable file formats / Emulations
Kernel support for ELF binaries
Networking support
Networking options Packet socket
Unix domain socket
TCP/IP networking
Device Drivers
Generic Driver Options Maintain a devtmpfs filesystem to mount at /dev
Automount devtmpfs at /dev, after the kernel mounted the rootfs
Userspace firmware loading support
Block devices
SCSI device support SCSI device support
legacy /proc/scsi/ support
SCSI disk support
SCSI generic support
Serial ATA and Parallel ATA Drivers ATA ACPI support
AHCI SATA support
Network device support Network core driver support
Ethernet driver support Realtek devicesRealtek RTL-8139 C+ PCI Fast Ethernet Adapter support (Ajustez en fonction de votre carte réseau)
Realtek RTL-8129 PCI Fast Ethernet Adapter support
Input device support Generic input layer (need for keyboard, mouse ..)
Mouse interface
Provide legacy /dev/psaux device
(1024) Horizontal screen resolution
(768) Vertical screen resolution
Event interface
Keyboards AT keyboard
Mice PS/2 mouse
Miscellaneous devices User level driver support
USB support Support for Host-side USB
USB announce new devices
Enable USB persist by default
xHCI HCD (USB 3.0) support
EHCUI HCD (USB 2.0) support
Root Hub Transaction Translators
Improved Transaction Translator scheduling
Generic EHCI driver for a platform device
UHCI HCD (most Intel and VIA) support
USB Mass Storage support
Firmware Drivers
File systems
The Extended 3 (ext3) filesystem (Ajustez en fonction de votre système de fichiers)
Ext3 POSIX Access Control Lists
Ext3 Security Labels
Kernel hacking
Early printk
Security options
Cryptographic API
AES cipher algorithms
Virtualization
Library routines
CRC32/CRC32c functions

Une fois la configuration terminée, vous chosissez l'option Exit jusqu'au retour au prompt de la console.

Un nouveau message vous demande si vous souhaitez sauvergarder votre configuration, chosissez simplement l'option de défaut Yes.

Un joli message apparait dans votre terminal Cool:

#
# configuration written to .config
#


* End of the configuration.
* Execute 'make' to start the build or try 'make help'

Compiler le noyau

La compilation du noyau peut commencer. Tapez dans la console:

make -j4

La compilation est démarrée, si vous avez plus ou moins de processeurs à disposition, adaptez la valeur -j4 à votre nombre de processeurs.

Compilation en cours

Quelques minutes (ou quelques heures plus tard, ... Vous voilà avec un noyau prêt à être utilisé.

Kernel: arch/x86/boot/bzImage is ready  (#1)

Créer une nouvelle entrée dans le fichier /boot/grub/grub.cfg

Il ne nous reste plus qu'à ajouter la bonne entrée dans le fichier de configuration /boot/grub/grub.cfg de grub 2.0.

menuentry "NuTyX avec noyau experimental sur /dev/sda2" {
  set root=(hd0,2)
  linux /home/thierry/linux-3.17.4/arch/x86/boot/bzImage root=/dev/sda2 ro quiet
}

Et voilà de cette façon, vous pourrez toujours choisir au démarrage de votre NuTyX sur quel noyau celle-ci doit être lancée.

Et surtout, pour expérimenter d'autres options de votre noyau fonctionnel (ou pas), c'est très simple. Vous taperez donc toujours les 4 mêmes commandes:

cd linux-4.9
make menuconfig
make -j4
sudo make modules_install

Et c'est tout Cool