Come caricare un modulo in initrd?


13

Voglio caricare esplicitamente un modulo (diciamo, netconsole) durante la fase initrd, in modo simile alla /etc/modulesprocedura di avvio del sistema principale.

Innanzitutto, ho verificato che initrd nel mio sistema contenga già il modulo desiderato (vedere Appendice).

Ho esaminato /initrd.img(che è un archivio compresso di cpio, quindi per dare una rapida occhiata, l'ho fatto zcat /initrd.img > initrd.cpioe ci sono andato dentro mc). Ho cercato eventuali invocazioni modprobetra gli script e ho capito che i moduli elencati in /conf/modules(qui /è la radice di initrd) vengono caricati automaticamente dalla load_modules()funzione da /scripts/functions(chiamato da /init).

Ma quale sarebbe lo strumento standard nel sistema Ubuntu per l'aggiornamento /conf/modulesdi initrd?

(A proposito, durante il mio studio del codice di Ubuntu di Ubuntu, ho notato che c'è qualche supporto speciale netconsolenello /initscript, che potrei fare funzionare per le mie esigenze, ma comunque, la mia domanda è più generale, riguardante qualsiasi altro modulo personalizzato .)

Appendice

Come ho detto sopra: in primo luogo, ho verificato che initrd nel mio sistema contenga già il modulo desiderato (ovvero, netconsole). Questo è come:

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

E ho anche verificato che contiene già il driver di rete necessario:

# 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
Per riferimento futuro, lsinitramfsincluso in initramfs-toolsfa quasi lo stesso del zcat /initrd.img ..comando illustrato qui.
timss

Risposte:


14

Ho scoperto come aggiungere moduli a initrd in Ubuntu 14.04 Ho aggiunto i nomi dei moduli a / etc / initramfs-tools / modules. Ciò ha aggiunto i moduli al file initrd. Non dimenticare di aggiornare il file initrd (update-initramfs -u) dopo aver apportato modifiche a / etc / initramfs-tools / modules.


Come si definiscono i nomi dei moduli? Ora devo aggiungere il modulo ahci.ko? Quindi cosa dovrebbe essere incluso in quel file?
sandun dhammika,

@sandundhammikaahci
Ken Sharp,

3

Ubuntu usa initramfs-tools (vedi man initramfs-tools per un'introduzione) per gestire la creazione di initrd.

Per aggiungere un modulo netconsole in initrd e forzare il caricamento, crea un file in / etc / initramfs-tools / hooks (es. / Etc / initramfs-tools / hooks / netconsole) con il contenuto:

#! / Bin / sh
Prereq = ""
prereqs ()
{
   echo "$ PREREQ"
}

caso $ 1 in
prereqs)
   prereqs
   uscita 0
   ;;
esac

. / Usr / share / initramfs-tools / hook-funzioni

force_load netconsole

e renderlo eseguibile. Quindi eseguire:

update-initramfs -u

per aggiornare initrd del kernel più recente.


1
Ma non c'è un modo più semplice di aggiungere semplicemente il nome del modulo a /conf/modules? Dove devo metterlo per update-initramfs -uusarlo?
imz - Ivan Zakharyaschev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.