Chapitre 7. Compiler le noyau

Table des matières
7.1. Installer les sources du noyau
7.2. Clavier italien
7.3. Recompiler le noyau
7.4. Créer le fichier de configuration du noyau
7.5. Configurer le noyau
7.6. Générer les dépendances et recompiler
7.7. Si quelque chose se passe mal

Tôt ou tard, les utilisateurs de NetBSD voudront compiler un noyau à leur mesure. Cela apporte plusieurs avantages:

7.1. Installer les sources du noyau

Sysinst, le programme d'installation, ne copie pas les sources sur le disque dur, celles-ci doivent être extraites à la main. L'archive se trouve dans le répertoire source/sets et s'appelle syssrc.tgz.

# gzip -dc syssrc.tgz | (cd / ; tar xvf -)    

Soyez patient. Cette opération dure plusieurs minutes car l'archive contient des centaines de fichiers. Ceux-ci sont extraits dans le répertoire /usr/src/syset le lien symbolique sys pointe dessus. Les deux commandes suivantes ont donc le même effet:

# cd /usr/src/sys
# cd /sys
    

Une fois extraites les sources du noyau, vous pouvez gagner de l'espace disque en effaçant les répertoires des architectures qui ne vous concernent pas. Allez dans le répertoire /sys/arch puis effacez les répertoires dont vous n'avez pas besoin. Pour le portage i386, par exemple, ne conservez que le répertoire i386. Pour les autres architectures, il peut être nécessaire de conserver plusieurs répertoires source.

Lorsque les sources sont installées, vous pouvez créer votre noyau personnalisé: ce n'est pas aussi difficile que vous le pensez. En fait, un nouveau noyau peut être établi en quatre étapes décrites dans les sections suivantes.

7.2. Clavier italien

Avant de compiler le noyau, les utilisateurs italiens peuvent vouloir modifier la correspondance des touches pour l'adapter à leur clavier. Celle-ci est définie dans le fichier /sys/dev/pckbc/wskbdmap_mfii.c. Dans la configuration par défaut, quelques caractères utiles sont absents (comme les accolades ou le tilde). Voici une autre configuration:

static const keysym_t pckbd_keydesc_it[] = {
...
KC(8),   KS_7,          KS_slash,       KS_braceleft,
KC(9),   KS_8,          KS_parenleft,   KS_bracketleft,
KC(10),  KS_9,          KS_parenright,  KS_bracketright,
KC(11),  KS_0,          KS_equal,       KS_braceright,
KC(12),  KS_apostrophe, KS_question,    KS_grave,
KC(13),  KS_igrave,     KS_asciicircum, KS_asciitilde,
KC(26),  KS_egrave,     KS_eacute,      KS_bracketleft, KS_braceleft,
KC(27),  KS_plus,       KS_asterisk,    KS_bracketright,KS_braceright,
...    

La définition ci-dessus définit la correspondance suivante:

TouchesCaractères
Alt Gr + 7{
Alt Gr + 8[
Alt Gr + 9]
Alt Gr + 0}
Alt Gr + '`
Alt Gr + ì~
Alt Gr + é[
Alt Gr + +]
Shift + Alt Gr + è{
Shift + Alt Gr + +}

Pilote de console : à partir de la version 1.4, NetBSD utilise le pilote multiplateforme wscons pour gérer l'écran, le clavier et la souris. Les précédentes versions utilisent pccons ou pcvt. Pour plus de détails, reportez-vous au Chapitre 12.

7.3. Recompiler le noyau

Pour recompiler le noyau, vous devez avoir installé les compilateurs (comp.tgz).

Etapes de base pour compiler le noyau

  1. Créer ou modifier le fichier de configuration

  2. Configurer le noyau

  3. Générer les dépendnces

  4. Construire ("Make") le noyau

  5. Installer le noyau

7.4. Créer le fichier de configuration du noyau

Note : Les répertoires de cette section sont spécifiques de i386. Les utilisateurs des autres architectures devront substituer les répertoires appropriés (généralement les sous-dossiers de arch).

Le fichier de configuration du noyau définit le type, le nombre et les caractéristiques des périfériques supportés ainsi que divers autres options. Ces fichiers se trouvent dans le répertoire /sys/arch/i386/conf. Le plus simple est de dupliquer un fichier existant et de le modifier. La plupart du temps, le meilleur choix sur la plupart des plateformes est la configuration GENERIC. Dans ce fichier, des commentaires décrivent les options. Une description plus complète se trouve dans la page de manuel options(4).

# cd /sys/arch/i386/conf/
# cp GENERIC MON-NOYAU
# vi MON-NOYAU
    

Noms de noyaux : historiquement, ceux-ci s'écrivent tout en majuscule.

La modification d'un fichier de configuration du noyau se divise en trois opérations basiques:

  1. gestion de périfériques ajoutée ou retirée du noyau (par exemple, le SCSI peut être enlevé s'il n'est pas utile).

  2. activation ou désactivation de services (par exemple, activer la gestion du client NFS, la compatibilité Linux...)

  3. règlage des paramètres du noyau.

Les lignes commençant par un "#" sont des commentaires. Les lignes sont activées en enlevant le "#" ou désactivée en l'ajoutant. De cette manière, il est toujours possible de revenir sur une modification.

Les indications données par la commande dmesg peuvent être utilisées pour savoir quelles lignes peuvent être désactivées. Pour tout ligne de type:

<XXX> at <YYY>    

à la fois XXX et YYY doivent être actifs dans le fichier de configuration. Vous devrez sans doutes expérimenter un peu avant de trouver la configuration minimale mais sur les machines démunies de SCSI et de PCMCIA, vous pouvez diviser la taille du noyau par deux.

Vous pouvez aussi examiner les options du fichier et désactiver celles dont vous n'avez pas besoin. Chacune est accompagnée d'une brève description qui est souvent suffisante pour comprendre de quoi il s'agit. Un grand nombre d'entre elles possède une description plus détaillée dans la page de manuel options(4). Une fois terminé, vous devez paramètrer correctement la gestion du clavier national ainsi que l'heure locale de l'horloge CMOS. Par exemple, pour l'Italie:

options RTC_OFFSET=-60
...
options PCKBD_LAYOUT="KB_IT"    

Le script perl adjustkernel, qui se trouve sur http://www.feyrer.de/Misc/adjustkernel, analyse les indications de la commande dmesg et genère automatiquement un fichier de configuration minimum. L'installation de nouveaux logiciels est décrite au Chapitre 8. Si vous voulez installer Perl dès maintenant, téléchargez le paquetage pré-compilé perl-5.00404.tgz et tapez la commande suivante:

# pkg_add perl-5.00404.tgz    

Perl est désormais installé, configuré et prêt à fonctionner. Pas moyen de faire plus simple...

Lancez le script avec:

# cd /sys/arch/i386/conf
# perl adjustkernel GENERIC > MYKERNEL
    

J'ai essayé ce script, il marche très bien, m'évitant une longue édition à la main. Attention, le script ne configure que les périfériques présents. Vous devez configurer le reste des options à la main (comme l'émulation Linux...)

7.5. Configurer le noyau

Lorsque vous avez fini de modifier le fichier de configuration (que nous avons appelé MON-NOYAU), tapez la commande suivante:

# config MON-NOYAU    

Si MON-NOYAU ne contient pas d'erreurs, le programme config crée les fichiers nécessaires à la compilation sinon, il vous faudra les corriger avant de relancer le programme.

7.6. Générer les dépendances et recompiler

Cela se fait en tapant les commandes suivantes:

# cd ../compile/MON-NOYAU
# make depend
# make
    

Il peut arriver que la compilation s'arrête suite à des erreurs. Celles-ci peuvent avoir plusieurs origines mais les plus courantes proviennent du fichier de configuration et que config n'a pas détecté. Parfois le problème vient du matériel (barette mémoire défectueuse): la compilation sollicite le système beacoup plus que le font les applications. Une autre erreur typique provient du fait qu'une option B est active et a besoin d'une option A qui est inactive.

Une compilation complète peut prendre de quelques minutes à plusieurs heures suivant le matériel. Voici quelques exemples:

CPURAM (MB)Durée approx.
486 DX2 50201 heure
P1669615 minutes
PIII1285 minutes
68030/2584 heures

La commande "make" établie le fichier netbsd du répertoire de compilation: celui-ci doit être copié dans le répertoire racine après avoir sauvegardé la précédente version:

# mv /netbsd /netbsd.old
# mv netbsd /
    

La personnalisation peut considérablement réduire la taille du noyau. Dans l'exemple suivant, netbsd.old est le noyau installé et netbsd le nouveau noyau.

-rwxr-xr-x  1 root  wheel  1342567 Nov 13 16:47 /netbsd
-rwxr-xr-x  1 root  wheel  3111739 Sep 27 01:20 /netbsd.old    

Le nouveau noyau est mis en service après avoir redémarré:

# reboot    

7.7. Si quelque chose se passe mal

Lorsque l'ordinateur est redémarré, il peut arriver que le nouveau noyau ne se comporte pas de la façon voulue ou bien qu'il ne démarre pas du tout. Pas de panique, si cela arrive, redémarrez avec l'ancien noyau sauvegardé et enlevez le nouveau (il vaut mieux redémarrer en "mono-utilisateur").