Quero carregar explicitamente um módulo (digamos netconsole
) durante o estágio initrd, da mesma forma que /etc/modules
no procedimento principal de inicialização do sistema.
Primeiro, verifiquei se o initrd no meu sistema já contém o módulo desejado (consulte o Apêndice).
Eu examinei /initrd.img
(que é um arquivo cpio compactado, para dar uma rápida olhada nele, eu fiz zcat /initrd.img > initrd.cpio
e entrei nele mc
). Procurei por invocações modprobe
dentre os scripts e descobri que os módulos listados em /conf/modules
( /
é a raiz do initrd aqui) são carregados automaticamente pela load_modules()
função de /scripts/functions
(chamada por /init
).
Mas qual seria a ferramenta padrão no sistema Ubuntu para atualizar /conf/modules
o initrd?
(BTW, durante meu estudo do código do initrd do Ubuntu, notei que há algum suporte especial netconsole
no /init
script, que eu poderia fazer para atender às minhas necessidades, mas, de qualquer forma, minha pergunta é mais geral sobre qualquer outro módulo personalizado .)
Apêndice
Como eu disse acima: primeiro, verifiquei se o initrd no meu sistema já contém o módulo desejado (ou seja, netconsole
). É assim:
# 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 também verifiquei que ele já contém o driver de rede necessário:
# 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
#
lsinitramfs
incluído eminitramfs-tools
faz o mesmo que ozcat /initrd.img ..
comando ilustrado aqui.Respostas:
Eu descobri como adicionar módulos ao initrd no Ubuntu 14.04. Adicionei os nomes dos módulos em / etc / initramfs-tools / modules. Isso adicionou os módulos ao arquivo initrd. Não esqueça de atualizar o arquivo initrd (update-initramfs -u) depois de fazer alterações em / etc / initramfs-tools / modules.
fonte
ahci
O Ubuntu usa o initramfs-tools (veja man initramfs-tools para uma introdução) para lidar com a criação do initrd.
Para adicionar um módulo netconsole no initrd e forçar o carregamento, crie um arquivo em / etc / initramfs-tools / hooks (por exemplo, / etc / initramfs-tools / hooks / netconsole) com o conteúdo:
e torná-lo executável. Então corra:
update-initramfs -u
para atualizar o initrd do kernel mais recente.
fonte
/conf/modules
? Onde devo colocá-loupdate-initramfs -u
para usá-lo?