Tamanho dos módulos dentro do initrd

1

No momento, estou tentando substituir manualmente o kernel no ubuntu-core em um dispositivo incorporado com um kernel personalizado. No entanto, quando tento atualizar o initrd, meu initrd se torna muito maior.

Aqui está o que eu fiz:

  • Extraia o initrd fornecido com o ubuntu
  • Faça uma lista de todos os módulos dentro do antigo initrd
  • obtenha os mesmos módulos do novo diretor do módulo em /lib/modules/new_kernel_version
  • adicione esses módulos ao initrd e remova os antigos

Se eu fizer isso, meu initrd se tornará bem maior que o original, então verifiquei os módulos individuais. Eu escolhi o driver do sistema de arquivos btrfs.ko como um exemplo. Então, comparando esses dois módulos, percebi que o que acabei de escolher no initrd era muito maior, o que causou a diferença de tamanho.

-rw-r--r-- 1 root root 999K Nov 14 15:06 btrfs.ko

Para o btrfs.ko no initrd enviado.

-rw-r--r-- 1 root root 7.2M Nov 14 15:08 btrfs.ko

Para o novo btrfs.ko .

O que é diferente entre esses dois módulos? Isso poderia ser causado por alguma configuração defeituosa para o novo kernel? Ao produzir o kernel eu copiei /proc/config.gz e usei make oldconfig para atualizá-lo, então todas as otimizações devem ser as mesmas para ambos os kernels.

Ou há algo mais que está sendo feito nos módulos antes de serem colocados no initrd? Talvez haja até mesmo uma maneira melhor de construir um novo initrd para o novo kernel no ubuntu.

Atualização:

Eu também testei com um initrd que eu criei do zero usando o comando mkinitrfs no Ubuntu, e ele tem a mesma diferença de tamanho que encontrei para o initrd que eu atualizei manualmente.

    
por LiKao 14.11.2012 / 16:20

1 resposta

2

Seus módulos possuem muitos símbolos e informações de depuração. O comando que você quer é strip --strip-unneeded .

    
por 14.11.2012 / 17:28