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

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

Então eu queria tentar construir o 2.6.39-4. Eu segui o procedimento emPágina "GitKernelBuild" da wiki do Ubuntu.

Resumindo, baixe o tar.bz2, extraia, copie minha configuração antiga, faça oldconfig e então

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

Tudo correu bem, estou usando este kernel agora, exceto uma pequena coisa: não consigo construir outros módulos, construir dkms etc.

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.

Nos kernels normais do Ubuntu, mesmo aqueles no mainline-ppa, existem três arquivos deb instalados. Por exemplo, para o mesmo kernel dolinha principal ppaexistem 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. Na verdade, depois de instalá-los, os pacotes ppa da linha principal 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 existe apenas uma pasta,

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

E em /lib/modules, há uma pasta

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

O verdadeiro problema, e a razão pela qual estou escrevendo esta postagem, é este link simbólico 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 está vinculado ao diretório onde construí o kernel - que, claro, pode não existir posteriormente. Isso faz com que outros módulos (por exemplo, vmware, virtualbox etc.) falhem na construção, pois não conseguem encontrar coisas importantes.

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

Responder1

Para responder à primeira perguntaPor que existem apenas dois pacotes?ouPor que não existem dois arquivos de cabeçalho?- quando são compilados cruzadamente, são empacotados para lidar com todos os casos de uso. Ao dividir os cabeçalhos em um maiortodospacote e um pacote menor específico do arco, você economiza largura de banda ao enviá-los aos usuários. Quando você está fazendo isso sozinho, você só precisa dele para um arco, então um arquivo de cabeçalho servirá.

Quanto ao link simbólico para o local de origem, tive o mesmo problema. Não encontrei uma boa solução além de gerar um linux_sourcepacote (basta adicioná-lo depois kernel_image kernel_headers) e, em seguida, corrigir o link simbólico manualmente.

Na verdade existeuma pergunta sobre esse lado das coisas já. A solução de longo prazo parece ser hackear um script executado após cada instalação do kernel que apenas corrige o símbolo.

informação relacionada