Bagaimana cara memuat modul di initrd?

13

Saya ingin memuat modul secara eksplisit (katakanlah, netconsole) selama tahap initrd, mirip dengan /etc/modulesdalam prosedur startup sistem utama.

Pertama, saya memeriksa bahwa initrd di sistem saya sudah berisi modul yang diinginkan (lihat Lampiran).

Saya telah melihat ke dalam /initrd.img(yang merupakan arsip cpio terkompresi, jadi untuk melihat sekilas ke dalamnya, saya telah melakukan zcat /initrd.img > initrd.cpiodan masuk ke dalamnya dengan mc). Saya telah mencari setiap doa di modprobeantara skrip, dan telah menemukan bahwa modul yang terdaftar di /conf/modules( /adalah initrd's root di sini) secara otomatis diambil oleh load_modules()fungsi dari /scripts/functions(dipanggil oleh /init).

Tetapi apa yang akan menjadi alat standar dalam sistem Ubuntu untuk memperbarui /conf/modulesinitrd?

(BTW, selama studi saya tentang kode initrd Ubuntu, saya melihat bahwa ada beberapa dukungan khusus untuk netconsoledi /initscript, yang saya mungkin membuat pekerjaan untuk kebutuhan saya, tapi tetap, pertanyaan saya adalah lebih umum, mengenai modul kustom lainnya .)

Lampiran

Seperti yang saya katakan di atas: pertama, saya memeriksa bahwa initrd di sistem saya sudah berisi modul yang diinginkan (yaitu, netconsole). Begini caranya:

# 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
# 

Dan saya juga memeriksa bahwa itu sudah berisi driver jaringan yang diperlukan:

# 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
# 
imz - Ivan Zakharyaschev
sumber
3
Untuk referensi di masa mendatang, lsinitramfstermasuk dalam initramfs-toolsdo kira-kira sama dengan zcat /initrd.img ..perintah yang diilustrasikan di sini.
timss

Jawaban:

14

Saya menemukan cara menambahkan modul ke initrd di Ubuntu 14.04 Saya menambahkan nama-nama modul ke / etc / initramfs-tools / modules. Ini menambahkan modul ke file initrd. Jangan lupa untuk memperbarui file initrd (update-initramfs -u) setelah Anda membuat perubahan pada / etc / initramfs-tools / modules.

Matthew Wolf
sumber
Bagaimana Anda mendefinisikan nama modul? Sekarang saya perlu menambahkan modul ahci.ko? Jadi apa yang harus dimasukkan dalam file itu?
sandun dhammika
@sandundhammikaahci
Ken Sharp
3

Ubuntu menggunakan initramfs-tools (lihat man-initramfs-tools untuk perkenalan) untuk menangani pembuatan initrd.

Untuk menambahkan modul netconsole di initrd dan memaksa memuatnya membuat file di / etc / initramfs-tools / hooks (yaitu / etc / initramfs-tools / hooks / netconsole) dengan konten:

#! / bin / sh
PREREQ = ""
prereqs ()
{
   gema "$ PREREQ"
}

case $ 1 in
prereqs)
   prereq
   keluar 0
   ;;
esac

. / usr / share / initramfs-tools / hook-functions

force_load netconsole

dan membuatnya dapat dieksekusi. Lalu lari:

update-initramfs -u

untuk memperbarui initrd kernel terbaru.


sumber
1
Tetapi bukankah ada cara yang lebih sederhana untuk hanya menambahkan nama modul /conf/modules? Di mana saya harus meletakkannya untuk update-initramfs -umenggunakannya?
imz - Ivan Zakharyaschev