8.3.1. Installation du noyau
Construire le noyau implique un certain nombre d'étapes
— configuration, compilation et installation. Pour
connaître les autres méthodes que celle employée par ce livre pour
configurer le noyau, lisez le fichier README
contenu dans les sources du noyau.
Préparez la compilation en lançant la commande suivante :
make mrproper
Ceci nous assure que le répertoire du noyau est propre. L'équipe du
noyau recommande le lancement de cette commande avant chaque
compilation du noyau. Vous ne devez pas supposer que le répertoire
des sources est propre juste après avoir été déballé.
Configurez le noyau via l'interface par menu. Pour des informations
d'ordre général sur la configuration du noyau, consultez
http://www.fr.linuxfromscratch.org/view/astuces/kernel-configuration-fr.txt.
BLFS offre aussi quelques informations complémentaires concernant
les besoins particuliers de configuration pour les paquets en
dehors de LFS :
http://www.fr.linuxfromscratch.org/view/blfs-7.6-systemdlongindex.html#kernel-config-index.
Vous pouvez trouver des informations supplémentaires sur la
configuration et la construction du noyau sur http://www.kroah.com/lkn/
Note
Un bon point de départ pour effectuer la configuration du noyau
est de lancer make
defconfig. Cela opérera une configuration de base
de bonne qualité en prenant en compte l'architecture actuelle de
votre système.
Soyez sure d'activer ou désactiver les fonctionnalités suivantes
ou le système ne démarrera pas correctement dans les deux
cas :
General setup --->
[*] open by fhandle syscalls [CONFIG_FHANDLE]
[ ] Auditing support [CONFIG_AUDIT]
[*] Control Group support [CONFIG_CGROUPS]
Processor type and features --->
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Networking support --->
Networking options --->
<*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers --->
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
<*> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
[*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]
Note
Même si "Le Protocole IPv6" n'est pas strictement nécéssaire, il
est fortement recommandé par les dévelopeurs de systemd.
Voici pourquoi on vise les éléments de configuration
ci-dessus :
-
Support for
uevent helper
-
L'activation de cette option peut interférer avec la gestion
de périphériques quand on utilise Edev/Eudev.
-
Maintain a
devtmpfs
-
Ceci créera des nœuds de périphérique automatiquement,
générés par le noyau même sans Udev. Udev fonctionne alors
sur cette base pour gérer les droits et l'ajout de liens
symboliques. Cet élément de configuration est nécessaire pour
tous les utilisateurs d'udev/eudev.
make LANG=<valeur_LANG_du_hote>
LC_ALL= menuconfig
Voici la signification des paramètres de
make :
-
LANG=<valeur_LANG_de_l_hote>
LC_ALL=
-
Ceci rend identique les paramétrages régionaux à ceux
utilisés sur l'hôte. C'est indispensable pour que l'interface
de menuconfig soit correctement dessinée sur la console texte
de Linux en UTF-8.
Assurez-vous de remplacer <valeur_LANG_de_l_hote>
par la valeur de la variable $LANG
de votre hôte. Si elle n'est pas paramétrée, vous pouvez
utiliser à la place les valeurs $LC_ALL
ou $LC_CTYPE
de l'hôte.
Sinon, make oldconfig
peut être plus approprié dans certaines situations. Voir le fichier
README
pour plus d'informations.
Si vous le désirez, vous pouvez sauter la configuration du noyau en
copiant le fichier de configuration, .config
, du système hôte (en supposant qu'il est
disponible) dans le répertoire linux-3.16.2
tout juste déballé. Néanmoins, nous
ne recommandons pas cette option. Il est souvent meilleur
d'explorer tous les menus de configuration et de créer la
configuration du noyau à partir de zéro.
Compilez l'image du noyau et les modules :
make
Si vous utilisez des modules du noyau, il peut être nécessaire de
les configurer dans le fichier /etc/modprobe.d
. Des informations au sujet de la
configuration du noyau et des modules se trouvent à la
Section 7.3, « Manipulation des périphériques et modules
sur un système LFS » et dans le répertoire linux-3.16.2/Documentation
de la documentation du
noyau. Enfin, modprobe.d(5)
pourrait
aussi être intéressant.
Installez les modules si la configuration du noyau les
utilise :
make modules_install
Une fois la compilation du noyau terminée, des étapes
supplémentaires sont encore nécessaires pour terminer
l'installation. Certains fichiers ont besoin d'être copiés dans le
répertoire /boot
.
Le chemin vers l'image du noyau pourrait varier suivant la
plateforme utilisée. Vous pouvez changer le nom du fichier
ci-dessous selon votre goût, mais la nomenclature du nom de fichier
devrait ressembler à vmlinuz
pour être compatible avec le paramétrage automatique du processus
de démarrage décrit dans la section à venir. La commande suivante
présuppose une architecture x86 :
cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.16.2-lfs-7.6-systemd
System.map
est un fichier de symboles
pour le noyau. Il cartographie les points d'entrée de chaque
fonction dans l'API du noyau, ainsi que les adresses de ses
structures de données pendant l'exécution. Il sert de référence
lors des investigations sur les problèmes de noyau. Lancez la
commande suivante pour installer le fichier de symboles :
cp -v System.map /boot/System.map-3.16.2
Le fichier de configuration du noyau .config
produit à l'étape make menuconfig ci-dessus
contient toutes les options de configuration choisies pour le noyau
qui vient d'être compilé. Conserver ce fichier est une bonne idée
pour pouvoir s'y référer plus tard :
cp -v .config /boot/config-3.16.2
Installez la documentation du noyau Linux :
install -d /usr/share/doc/linux-3.16.2
cp -r Documentation/* /usr/share/doc/linux-3.16.2
Il est important de noter que les fichiers dans le répertoire des
sources du noyau n'appartiennent pas à root. Chaque fois qu'un paquet est
déballé par l'utilisateur root (comme on a fait dans chroot), les
fichiers ont les ID de l'utilisateur et du groupe de l'empaqueteur
sur son système hôte. En principe ce n'est pas un problème car
l'arborescence des sources est supprimée après l'installation. En
revanche, l'arborescence de Linux est souvent conservée longtemps.
Du coup, il y a des chances que tout ce que l'ID de l'utilisateur
ayant déballé le paquet a utilisé ne soit affecté à quelqu'un
d'autre sur la machine. Cette personne pourrait alors avoir un
droit d'écriture sur les sources du noyau.
Si vous conservez l'arborescence des sources du noyau, lancez
chown -R 0:0 sur le
répertoire linux-3.16.2
pour vous
assurer que tous les fichiers appartiennent à root.
Avertissement
Certaines documentations du noyau recommandent de créer un lien
symbolique à partir de /usr/src/linux
pointant vers le répertoire des
sources du noyau. Ceci est spécifique aux noyaux antérieurs à la
série 2.6 et ne doit pas
être réalisé sur un système LFS car il peut poser des problèmes
pour les paquets que vous souhaitez construire une fois votre
système LFS de base complet.
Avertissement
Les en-têtes du répertoire système include
(/usr/include
) devraient toujours être celles avec lesquelles
Glibc a été compilé, à savoir, les en-têtes de santé installées
au Section 6.7,
« Linux-3.16.2 API Headers ». Donc, elles ne
devraient jamais être
remplacées par les en-têtes du noyau brut ou par d'autres
en-têtes de santé expurgées du noyau.
8.3.2. Configuration
de l'ordre de chargement des modules Linux
La plupart du temps, les modules Linux sont chargés
automatiquement, mais il faut parfois des directives
supplémentaires. Le programme qui charge les modules, modprobe ou insmod, utilise /etc/modprobe.d/usb.conf
à cette fin. Il faut
créer ce fichier afin que, si les pilotes USB (ehci_hcd, ohci_hcd
et uhci_hcd) ont été construits en module, ils soient chargés dans
le bon ordre ; ehci_hcd doit être chargé avant ohci_hcd et
uhci_hcd afin d'éviter un avertissement au moment du démarrage.
Créez un nouveau /etc/modprobe.d/usb.conf
en lançant ce qui
suit :
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin /etc/modprobe.d/usb.conf
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
# Fin de /etc/modprobe.d/usb.conf
EOF