Table des matières

Patcher les sources du noyau

Sujet : application d'un “patch” aux sources du noyau (kernel)
Niveau : Difficile
Auteur : Swebian (7 novembre 2004), révisé le 4 décembre 2006

Introduction

Pourquoi patcher son noyau ? Il y existe plusieurs raisons qui poussent les utilisateurs à mettre à jour leur noyau manuellement. En effet il peut s'agir d'ajout de fonctionnalités manquantes au noyau de base, qu'un utilisateur particulier a besoin. Parfois les patchs sont incorporés dans le noyau Linux lorsque leur état de maturation est parfaite. Il existe des patchs pour ajouter du support de matériel exotique, de nouveaux systèmes de fichiers ou encore accélérer le démarrage du noyau.

Comment appliquer un patch ?

La réponse à cette question dépend fortement de la composition du patch, spécialement du répertoire à partir duquel le patch à été créé. De manière général, les patches sont créés contre la racine de l'arborescence des sources (/usr/src/linux) et la suite de ce tutorial le considère comme tel. Il est donc important de créer un lien symbolique du répertoire des sources vers le dossier /usr/src/linux. Pour réaliser cela, on peut par exemple le faire comme ça:

$ cd /usr/src 
$ ln -s kernel2681 linux

Par exemple, vous venez de dépaqueter un tarball du nouveau noyau 2.6.8.1 et vous voulez y appliquer dessus le patch “grille_pain” (exemple fictif) qui vous permettra de faire tourner votre tout nouveau grille-pain grâce à Linux Very Happy, on fera donc comme ceci :

$ cd /usr/src/linux
$ bzip2 -dc /usr/src/grille_pain-1.0.0.bz2 | patch -p1 --dry-run

J'ai utilisé l'option –dry-run qui permet de contrôler que l'application du patch se fasse correctement. Ce qui peut parfois sauver la vie lorsque un mauvais patch ne s'est que partiellement greffé sur vos sources. L'option -p1 enlève une partie des noms de répertoire pour chaque fichier modifié (voir la page man patch(1) pour plus de détails sur cette option). Maintenant qu'on à controllé le fait qu'il ait dû s'appliquer correctement, on lance la commande:

bzip2 -dc /usr/src/grille_pain-1.0.0.bz2 | patch -p1

pour l'appliquer. C'est terminé !

C'est en fait très simple avec les patches standards. On peut même utiliser le script linux/scripts/patch-kernel qui se trouve dans les sources du noyau, qui nous permet de faire automatiquement les patches pour nous.

La situation avec les autres patches n'est pas toujours très simple. Par exemple les patchs linux “prepatches” (qu'on trouve dans pub/linux/kernel/testing) ne sont pas incrémentatifs.

Effacer un patch (restaurer les sources)

Vous avez appliqué des patches qui ne vous convenaient pas et vous souhaitez maintenant les enlever. Il suffit de passer l'option -R à la commande patch, avec le même fichier de patch, afin d'enlever les modifications dans vos sources.