Chcę jawnie załadować moduł (powiedzmy netconsole
) na etapie initrd, podobnie jak /etc/modules
w głównej procedurze uruchamiania systemu.
Najpierw sprawdziłem, czy initrd w moim systemie zawiera już poszukiwany moduł (patrz Dodatek).
Zajrzałem do /initrd.img
(to jest skompresowane archiwum cpio, więc aby je szybko przejrzeć, zrobiłem to zcat /initrd.img > initrd.cpio
i zajrzałem do niego mc
). Szukałem wywołań modprobe
skryptów i zorientowałem się, że moduły wymienione w /conf/modules
(tutaj /
jest katalog główny initrd) są automatycznie ładowane przez load_modules()
funkcję z /scripts/functions
(wywoływaną przez /init
).
Ale jakie byłoby standardowe narzędzie w systemie Ubuntu do aktualizacji /conf/modules
initrd?
(BTW, podczas studiowania kodu initrd Ubuntu, zauważyłem, że netconsole
w /init
skrypcie jest jakieś specjalne wsparcie , które mogę wykonać na moje potrzeby, ale i tak moje pytanie jest bardziej ogólne, dotyczące dowolnego innego niestandardowego modułu .)
dodatek
Jak powiedziałem powyżej: najpierw sprawdziłem, czy initrd w moim systemie zawiera już poszukiwany moduł (a mianowicie netconsole
). Oto jak:
# 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
#
A także sprawdziłem, że zawiera już potrzebny sterownik sieci:
# 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
zawarte winitramfs-tools
robi mniej więcej to samo, cozcat /initrd.img ..
zilustrowane tutaj polecenie.