Как загрузить модуль в initrd?
Я хочу явно загрузить модуль (скажем, netconsole
) на этапе initrd, аналогично /etc/modules
в основной процедуре запуска системы.
Сначала я проверил, что initrd в моей системе уже содержит нужный модуль (см. Приложение).
Я смотрел в /initrd.img
(это сжатый архив cpio, поэтому для быстрого ознакомления я сделал zcat /initrd.img > initrd.cpio
и вошел внутрь mc
). Я искал любые призывы modprobe
среди сценариев, и выяснили, что модули, перечисленные в /conf/modules
(/
здесь корень initrd) автоматически загружается load_modules()
функция от /scripts/functions
(вызывается /init
).
Но что будет стандартным инструментом в системе Ubuntu для обновления /conf/modules
из initrd?
(Кстати, во время изучения кода initrd в Ubuntu я заметил, что существует некоторая специальная поддержка netconsole
в /init
сценарий, который я мог бы сделать работу для своих нужд, но в любом случае, мой вопрос более общий, касающийся любого другого пользовательского модуля.)
аппендикс
Как я сказал выше: во-первых, я проверил, что initrd в моей системе уже содержит требуемый модуль (а именно, netconsole
). Вот как:
# 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
#
А также я проверил, что он уже содержит необходимый сетевой драйвер:
# 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
#
2 ответа
Я обнаружил, как добавлять модули в initrd в Ubuntu 14.04. Я добавил имена модулей в / etc / initramfs-tools / modules. Это добавило модули в файл initrd. Не забудьте обновить файл initrd ( update-initramfs -u) после внесения изменений в / etc / initramfs-tools / modules.
Ubuntu использует initramfs-tools (см. Введение в man initramfs-tools) для управления созданием initrd.
Чтобы добавить модуль netconsole в initrd и принудительно загрузить его, создайте файл в /etc/initramfs-tools/hooks (т.е. /etc/initramfs-tools/hooks/netconsole) с содержимым:
#! / Bin / ш PREREQ="" PreReqs() { echo "$PREREQ" } дело 1 в PreReqs) PreReqs выход 0;; ESAC , / USR / доли / initramfs-инструменты / крючок-функции принудительная загрузка netconsole
и сделать его исполняемым. Затем запустите:
update-initramfs -u
обновить initrd новейшего ядра.