Je souhaite explicitement charger un module (par exemple, netconsole
) au cours de l'étape initrd, de la même manière que /etc/modules
dans la procédure de démarrage du système principal.
Tout d’abord, j’ai vérifié que l’initrd de mon système contenait déjà le module souhaité (voir l’Annexe).
J'ai examiné /initrd.img
(qui est une archive compressée de cpio, donc pour y jeter un coup d'œil rapide, j'ai écrit zcat /initrd.img > initrd.cpio
et y est entré avec mc
). J'ai recherché tous les invocations de modprobe
parmi les scripts et j'ai découvert que les modules répertoriés dans /conf/modules
(/
est la racine d'initrd ici) sont automatiquement chargés par la fonction load_modules()
de /scripts/functions
(appelée par /init
).
Mais quel serait l'outil standard dans le système Ubuntu pour mettre à jour /conf/modules
de l'initrd?
(En passant, lors de mon étude du code de l'initrd d'Ubuntu, j'ai remarqué qu'il y avait un support particulier pour netconsole
dans le script /init
, que je pourrais faire fonctionner pour mes besoins, mais de toute façon, ma question est plus générale, pour tout autre module personnalisé.)
Comme je l’ai dit plus haut: d’abord, j’ai vérifié que l’initrd de mon système contenait déjà le module souhaité (à savoir, netconsole
). C'est ainsi:
# zcat /initrd.img | cpio --extract --verbose --list | fgrep netconsole
-rw-r--r-- 1 root root 25372 Aug 31 20:59 lib/modules/3.19.0-28-generic/kernel/drivers/net/netconsole.ko
109504 blocks
#
Et aussi j'ai vérifié qu'il contient déjà le pilote réseau nécessaire:
# ls -ld /sys/class/net/eth0/device/driver
lrwxrwxrwx 1 root root 0 Sep 21 15:34 /sys/class/net/eth0/device/driver -> ../../../../bus/pci/drivers/sky2
# zcat /initrd.img | cpio --extract --verbose --list | fgrep sky2
-rw-r--r-- 1 root root 92948 Aug 31 20:49 lib/modules/3.19.0-28-generic/kernel/drivers/net/ethernet/marvell/sky2.ko
109504 blocks
#
J'ai découvert comment ajouter des modules à l'initrd dans Ubuntu 14.04. J'ai ajouté les noms des modules à/etc/initramfs-tools/modules. Cela a ajouté les modules au fichier initrd. N'oubliez pas de mettre à jour le fichier initrd (update-initramfs -u) après avoir modifié le fichier/etc/initramfs-tools/modules.
Ubuntu utilise initramfs-tools (voir man initramfs-tools pour une introduction) pour gérer la création de initrd.
Pour ajouter un module netconsole dans initrd et forcer son chargement, créez un fichier dans/etc/initramfs-tools/hooks (c'est-à-dire/etc/initramfs-tools/hooks/netconsole) avec le contenu suivant:
#!/bin/sh PREREQ = "" prereqs () { echo "$ PREREQ" } cas $ 1 dans conditions préalables) conditions préalables sortie 0 ;; esac . /usr/share/initramfs-tools/hook-functions force_load netconsole
et le rendre exécutable. Puis lancez:
update-initramfs -u
mettre à jour l'initrd du noyau le plus récent.