Compilation du noyau

Mise à jour : Debian 9.4

Ce document décrit comment compiler un noyau pour un système debian.

Référence

1 - Installation des prérequis

Installer les outils nécessaires à la compilation du noyau :

# aptitude install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

2 - Téléchargement des sources du noyau

Deux origines sont envisagées pour les sources du noyau

2.1 - Utilisation des sources officielles (kernel.org)

Le noyau 4-15 est pris comme exemple.

$ wget -c https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/snapshot/linux-4.15.tar.gz
.....
linux-4.15.tar.gz [<=> ] 152,14M 667KB/s in 6m 31s

2018-04-29 12:31:07 (399 KB/s) - « linux-4.15.tar.gz » sauvegardé [159526686]
$ tar xvzf linux-4.15.tar.gz
$ cd linux-4.15

2.2 - Utilisation de la version debian

Le noyau 4-9 debian est pris comme exemple

# aptitude install linux-source-4.9
$ tar xaf /usr/src/linux-source-4.9.tar.xz
$ cd linux-source-4.9

3 - Configuration du noyau

Cette étape permet de sélectionner les options du noyau et les modules à inclure (externes ou internes). Elle utilise la commande make dont les options sont disponibles avec

$ make help

3.1 - Création du fichier de configuration

3.1.1 Création interactive

$ make config

Les réponses sont du type Y/n/m. Taper la touche "Entrée" pour accepter la valeur par défaut.

Cette solution est à éviter compte-tenu du nombre de questions !

3.1.2 Création à partir d'un fichier existant

 cp /boot/config-$(uname -r) .config
$ make olddefconfig
$ make oldconfig
$ make listnewconfig

3.2 - Modification du fichier de configuration

3.2.1 Utilisation d'un menu

Il est possible de modifier les options du fichier de configuration en utilisant un menu

$ make menuconfig
# aptitude install libglade2-dev libgtk2.0-dev
$ make gconfig
# aptitude install libqt4-dev
$ make xconfig

3.2.2 - Utilisation de la ligne de commande

Via le script ./scripts/config, il est possible de définir en ligne de commande les options de la configuration dont on connaît le nom.

Les principales commandes sont :

commands:
--enable|-e option Enable option
--disable|-d option Disable option
--module|-m option Turn option into a module
--set-str option string
Set option to "string"
--set-val option value
Set option to value
--undefine|-u option Undefine option
--state|-s option Print state of option (n,y,m,undef)
$ ./scripts/config -s DEBUG_INFO
n
./scripts/config -d NOM_OPTION
./scripts/config -e NOM_OPTION

3.2.3 - Exemple

Kernel hacking  ---> Compile-time checks and compiler options  ---> Compile the kernel with debug info

ou bien

./scripts/config -d DEBUG_INFO

4 - Compilation

4.1 Préalable

Voir https://debian-facile.org/doc:systeme:kernel:compiler

$ ./scripts/config -d CONFIG_MODULE_SIG_ALL -d CONFIG_MODULE_SIG_KEY -d CONFIG_SYSTEM_TRUSTED_KEYS
$ ./scripts/config -d DEBUG_INFO

4.2 Compilation

4.2.1 Lancement de la compilation

Lancer la compilation (durée environ 1 heure pour un processeur i5 - 4 coeurs - 2,4GHz), qui permettra de construire les différents paquets et documents du nouveau noyau

$ make deb-pkg
$ make deb-pkg -j"$(nproc)" LOCALVERSION=-custom KDEB_PKGVERSION=1

4.2.2 Déroulement de la compilation

Additional X.509 keys for default system keyring (SYSTEM_TRUSTED_KEYS) [] (NEW)

Entrer la valeur par défaut en tapant sur la touche "Entrée".

Les fichiers sont créés dans le répertoire supérieur. Ils comprennent notamment, les paquets pour installer le noyau et les en-têtes du nouveau noyau.

$ ls .. |grep .deb$
linux-headers-4.15.0-custom_1_amd64.deb
linux-image-4.15.0-custom_1_amd64.deb
linux-libc-dev_1_amd64.deb

5 Installation

5.1 - Installation

Installer les en-têtes, puis le noyau

# dpkg -i ../linux-headers-4.15.0-custom_1_amd64.deb
# dpkg -i ../linux-image-4.15.0-custom_1_amd64.deb

L'initrd est généré et l'entrée correspondant au nouveau noyau est ajouté à grub

5.2 - Désinstallation

# aptitude purge linux-image-4.15.0-custom linux-headers-4.15.0-custom

ou

# dpkg -P ../linux-headers-4.15.0-custom_1_amd64.deb ../linux-image-4.15.0-custom_1_amd64.deb

6 - Redémarrage

# reboot
$ uname -r
4.15.0-custom
# dmesg -k -l "emerg,alert,crit,err"
[ 8.661426] Error: Driver 'pcspkr' is already registered, aborting...
# dkms status |grep $(uname -r)
bbswitch, 0.8, 4.15.0-custom, x86_64: installed
nvidia-current, 384.111, 4.15.0-custom, x86_64: installed