Як завантажити модуль в initrd?


13

Я хочу явно завантажити модуль (скажімо, 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/modulesinitrd?

(До речі, під час свого вивчення коду 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
# 

3
Для подальшої довідки, що lsinitramfsвходить у initramfs-toolsробить приблизно те саме, що zcat /initrd.img ..ілюстрована тут команда.
timss

Відповіді:


14

Я дізнався, як додати модулі до initrd в Ubuntu 14.04. Я додав назви модулів до / etc / initramfs-tools / module. Це додало модулі до initrd-файлу. Не забудьте оновити файл initrd (update-initramfs -u) після внесення змін у / etc / initramfs-tools / module.


Як ви визначаєте назви модулів? Тепер мені потрібно додати модуль ahci.ko? Отже, що слід включити до цього файлу?
Сандун Дамміка

@sandundhammikaahci
Ken Sharp

3

Ubuntu використовує initramfs-інструменти (див. Man initramfs-tools для вступу) для обробки створення initrd.

Щоб додати модуль netconsole в initrd та примусити його завантажити, створіть файл у / etc / initramfs-tools / hooks (тобто / etc / initramfs-tools / hooks / netconsole) із вмістом:

#! / бін / ш
PREREQ = ""
prereqs ()
{
   відлуння "$ PREREQ"
}

справа $ 1 в
попередні запитання)
   prereqs
   вихід 0
   ;;
есак

. / usr / share / initramfs-tools / гак-функції

net_load мережевої консолі

і зробити його виконуваним. Потім запустіть:

update-initramfs -u

оновити initrd найновішого ядра.


1
Але чи не існує простішого способу просто додати ім'я модуля /conf/modules? Де я повинен його поставити, update-initramfs -uщоб ним скористатися?
imz - Іван Захарящев
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.