Construindo um novo kernel vanilla - alguma confusão com os debs produzidos

2

Então eu queria tentar construir o 2.6.39-4. Eu segui o procedimento na página wiki do ubuntu "GitKernelBuild" .

Em suma, baixe o tar.bz2, extraia, copie minha configuração antiga, faça o oldconfig e, em seguida,

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Tudo correu bem, eu estou usando este kernel agora, exceto uma pequena coisa: Eu não posso construir outros módulos, construir dkms, etc Mais informações segue:

Os arquivos deb produzidos são dois:

linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb

Estou um pouco confuso com isso.

Em kernels normais do Ubuntu, mesmo aqueles no mainline-ppa, existem três arquivos deb que estão instalados. Por exemplo, para o mesmo kernel do mainline ppa existem estes pacotes:

linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb

Como você pode ver, existem dois pacotes de cabeçalho diferentes. De fato, depois de instalá-los, os pacotes mainline ppa criam um diretório em / lib / modules:

/lib/modules/2.6.39-02063904-generic

Nesse diretório, existe um link simbólico que aponta para os cabeçalhos -genéricos em / usr / src

/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic

Em / usr / src, existem dois diretórios diferentes para este kernel

/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904

Agora, aqui está o problema com meus dois pacotes:

Em / usr / src há apenas uma pasta,

/usr/src/linux-headers-2.6.39.4-custom

E sob / lib / modules, existe uma pasta

/lib/modules/linux-headers-2.6.39.4-custom

O verdadeiro problema, e a razão pela qual estou escrevendo este post, é esse link simbólico que é criado no diretório acima:

/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4

Como você pode ver, ele se conecta ao diretório onde eu construí o kernel - o que obviamente pode não existir depois. Isso faz com que outros módulos (por exemplo, vmware, virtualbox etc) não sejam compilados, pois não é possível encontrar coisas importantes.

Por que isso acontece? Como isso pode ser consertado? Por que existem dois e não três arquivos deb produzidos? Qual é o propósito desses 3 arquivos deb que os lançamentos oficiais têm, e como eles podem ser criados por outros?

    
por nickped 15.08.2011 / 01:58

1 resposta

1

Para responder à primeira pergunta Por que existem apenas dois pacotes? ou Por que não há dois arquivos de cabeçalho? - quando eles são compilados, eles são re empacotado para lidar com todos os casos de uso. Ao dividir os cabeçalhos em um pacote maior todos e em um arquivo menor específico, você economiza largura de banda, empurrando-os para os usuários. Quando você está fazendo isso sozinho, você só precisa de um arco para que um arquivo de cabeçalhos funcione.

Quanto ao link simbólico até o seu local de origem, tive o mesmo problema. Eu não encontrei uma boa solução além de também gerar um pacote linux_source (apenas adicione isso depois de kernel_image kernel_headers ) e então corrija o symlink manualmente.

Na verdade, há uma pergunta sobre este lado das coisas já . A solução de longo prazo parece estar invadindo um script que é executado após cada instalação do kernel que apenas corrige o symink.

    
por Oli 15.08.2011 / 03:16