¿Cómo cargar un módulo en initrd?

13

Quiero cargar explícitamente un módulo (digamos netconsole) durante la etapa initrd, de manera similar al /etc/modulesprocedimiento de inicio del sistema principal.

Primero, verifiqué que el initrd en mi sistema ya contiene el módulo deseado (ver Apéndice).

He /initrd.imginvestigado (que es un archivo comprimido de cpio, así que para echarle un vistazo rápido, lo he hecho zcat /initrd.img > initrd.cpioy he entrado en él mc). He buscado cualquier invocación de modprobeentre los scripts, y he descubierto que los módulos enumerados en /conf/modules( /es la raíz de initrd aquí) se cargan automáticamente por la load_modules()función from /scripts/functions(llamado por /init).

Pero, ¿cuál sería la herramienta estándar en el sistema Ubuntu para actualizar /conf/modulesel initrd?

(Por cierto, durante mi estudio del código del initrd de Ubuntu, noté que hay un soporte especial para netconsoleel /initscript, que podría hacer que funcione para mis necesidades, pero de todos modos, mi pregunta es más general, con respecto a cualquier otro módulo personalizado .)

Apéndice

Como dije anteriormente: primero, verifiqué que el initrd en mi sistema ya contiene el módulo deseado (es decir, netconsole). Así es como:

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

Y también verifiqué que ya contiene el controlador de red necesario:

# 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
fuente
3
Para referencia futura, lsinitramfsincluido en initramfs-toolshace casi lo mismo que el zcat /initrd.img ..comando ilustrado aquí.
timss

Respuestas:

14

Descubrí cómo agregar módulos al initrd en Ubuntu 14.04. Agregué los nombres de los módulos a / etc / initramfs-tools / modules. Esto agregó los módulos al archivo initrd. No olvide actualizar el archivo initrd (update-initramfs -u) después de haber realizado cambios en / etc / initramfs-tools / modules.

Matthew Wolf
fuente
¿Cómo define los nombres de los módulos? ¿Ahora necesito agregar el módulo ahci.ko? Entonces, ¿qué se debe incluir en ese archivo?
sandun dhammika
@sandundhammikaahci
Ken Sharp
3

Ubuntu usa initramfs-tools (vea man initramfs-tools para una introducción) para manejar la creación de initrd.

Para agregar un módulo netconsole en initrd y forzar la carga, cree un archivo en / etc / initramfs-tools / hooks (es decir / etc / initramfs-tools / hooks / netconsole) con el contenido:

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

caso $ 1 en
requisitos previos)
   requisitos previos
   salida 0
   ;;
esac

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

force_load netconsole

y hacerlo ejecutable. Entonces corre:

update-initramfs -u

para actualizar el initrd del kernel más nuevo.


fuente
1
¿Pero no hay una manera más simple de simplemente agregar el nombre del módulo /conf/modules? ¿Dónde debo ponerlo para update-initramfs -upoder usarlo?
imz - Ivan Zakharyaschev