Je veux charger explicitement un module (disons netconsole
) pendant la phase 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 dans mon système contient déjà le module voulu (voir l'annexe).
J'ai examiné /initrd.img
(qui est une archive compressée cpio, donc pour y jeter un coup d'œil, je l'ai fait zcat /initrd.img > initrd.cpio
et je suis allé à l'intérieur avec mc
). J'ai recherché toutes les invocations modprobe
parmi les scripts, et j'ai compris que les modules répertoriés dans /conf/modules
( /
c'est la racine d'initrd ici) sont automatiquement chargés par la load_modules()
fonction depuis /scripts/functions
(appelé par /init
).
Mais quel serait l'outil standard dans le système Ubuntu pour mettre à jour /conf/modules
l'initrd?
(BTW, lors de mon étude du code de l'initrd d'Ubuntu, j'ai remarqué qu'il existe un support spécial pour netconsole
le /init
script, que je pourrais faire fonctionner pour mes besoins, mais de toute façon, ma question est plus générale, concernant tout autre module personnalisé .)
appendice
Comme je l'ai dit ci-dessus: d'abord, j'ai vérifié que l'initrd dans mon système contient déjà le module voulu (à 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 j'ai également 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
#
lsinitramfs
inclus dansinitramfs-tools
fait à peu près la même chose que lazcat /initrd.img ..
commande illustrée ici.