Arquivo (produtos) de uma compilação cruzada do kernel

1

Quando o kernel é compilado cruzado (por exemplo, make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- ), quais são os arquivos recém-criados e seus significados?

Não estou procurando uma explicação detalhada de cada novo arquivo, apenas procurando obter uma visão geral conceitual da estrutura e do propósito de arquivos especiais.

Em paralelo, estou fazendo uma compilação do kernel com versões git para ver quais novos arquivos chegarão. Será atualizada assim que for feita.

    
por TheMeaningfulEngineer 07.01.2014 / 12:04

1 resposta

3

I'm not looking for a detailed explanation of each new file, just looking to get a conceptual overview of the structure and purpose of special files.

Há apenas dois que você precisa se preocupar, [src]/arch/[your arch]/boot/bzImage - que é o kernel 1 - e [src]/System.map , que é menos importante, mas provavelmente algo que você quer instalar corretamente . Ele contém a tabela de símbolos do kernel, usada na depuração (incluindo erros registrados / oops) para (por exemplo) mapear endereços para nomes de funções. Então, não é necessário, mas é útil.

System.map deve ser instalado em /boot como System.map-[release string] em que "string de lançamento" é o que esse kernel reporta via uname -r .

A maioria dos outros arquivos gerados durante a compilação são arquivos de objetos intermediários mais ou menos comuns ( .o ); eles são internos ao processo de construção. Pode haver centenas ou milhares deles, e se você está curioso sobre um em particular, veja o arquivo .c correspondente (claro, se você não fala C, provavelmente não há muito a se interessar), etc Esses arquivos são deixados para trás no diretório de construção; o kernel não liga ou instala nenhuma biblioteca. Existem também algumas ferramentas executáveis construídas, mas, novamente, elas são internas ao processo. Eles não têm uso subsequente e não são instalados em nenhum lugar.

As únicas coisas instaladas além do bzImage e System.map são os vários .ko files; estes são os módulos que entram em /lib/modules/[release string] .

Se você está curioso sobre qualquer coisa, o melhor lugar para começar é grep -R no diretório [src]/Documentation . Se você quiser uma perspectiva sobre os arquivos de documentação individuais, verifique as listagens em [src]/Documentation/00-INDEX .

1. E, presumindo que os drivers apropriados estão integrados (para que você não precise de um initramfs), isso é tudo o que você realmente precisa. O kernel é um executável binário singular, autônomo, bare-metal . É apenas um arquivo , embora possa carregar componentes modulares (arquivos .ko) durante a execução.

    
por 07.01.2014 / 15:49