Como carregar um módulo no initrd?

9

Eu quero carregar explicitamente um módulo (digamos, netconsole ) durante o estágio initrd, da mesma forma que /etc/modules no procedimento de inicialização do sistema principal.

Primeiro, verifiquei se o initrd no meu sistema já contém o módulo desejado (consulte o Apêndice).

Eu olhei para /initrd.img (que é um arquivo cpio compactado, então, para dar uma rápida olhada nele, eu fiz zcat /initrd.img > initrd.cpio e entrei com mc ). Eu procurei por quaisquer invocações de modprobe entre os scripts, e descobri que os módulos listados em /conf/modules ( / é a raiz de initrd aqui) são automaticamente carregados pela função load_modules() de /scripts/functions (chamado por /init ).

Mas qual seria a ferramenta padrão no sistema Ubuntu para atualizar /conf/modules do initrd?

(BTW, durante meu estudo do código do initrd do Ubuntu, notei que há algum suporte especial para netconsole no script /init , que eu poderia fazer funcionar para minhas necessidades, mas enfim, 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 se 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
# 
    
por imz -- Ivan Zakharyaschev 21.09.2015 / 17:51

2 respostas

7

Eu descobri como adicionar módulos ao initrd no Ubuntu 14.04 Eu adicionei os nomes dos módulos em / etc / initramfs-tools / modules. Isso adicionou os módulos ao arquivo initrd. Não se esqueça de atualizar o arquivo initrd (update-initramfs -u) depois de fazer alterações em / etc / initramfs-tools / modules.

    
por Matthew Wolf 18.12.2015 / 03:46
3

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 (ou seja, / etc / initramfs-tools / hooks / netconsole) com o conteúdo:

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

case  in
prereqs)
   prereqs
   exit 0
   ;;
esac

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

force_load netconsole

e torná-lo executável. Então corra:

update-initramfs -u

para atualizar o initrd do kernel mais recente.

    
por user448115 21.09.2015 / 22:11