Economizando tempo durante a compilação do Kernel

2

Eu tenho que demonstrar uma prática onde eu tenho que fazer o meu próprio módulo, adicionar este módulo a uma fonte do kernel e implementar a chamada do sistema. Estou usando o kernel 3.16 no Ubuntu, mas demora cerca de duas horas para instalar o kernel a partir do código-fonte.

É possível remover alguma parte do kernel (como drivers desnecessários, etc) da fonte para economizar tempo, já que não usarei esse kernel recém-instalado para uso regular? Se sim, como?

    
por 7_R3X 11.04.2016 / 16:47

2 respostas

5

As instruções a seguir se aplicam à construção de um kernel a partir do upstream. Pessoalmente acho isso mais simples. Eu não sei como obter uma árvore com os patches do Ubuntu aplicados, prontos para construir assim.

(1) Teoricamente, a maneira como você constrói os núcleos de maneira mais razoável timespans para testes devem ser

cp /boot/config-'uname -r' .config

você não precisa ativar nada mais recente, por isso - só o problema é isso quebra se eles renomearam coisas:

make oldnoconfig

agora desabilite todos os módulos que não estão atualmente carregados. (Faço Certifique-se de ter todos os seus dispositivos USB que você precisa conectar ...):

make localmodconfig

Funcionou para mim recentemente, então pode ser útil. Não tão bem o da vez anterior eu tentei.

Acho que consegui de uma hora a dez minutos. Mesmo depois de make localmodconfig , ele ainda está criando quantidades loucas de coisas que eu não preciso. OTOH realmente encontrar e desativar esse material (por exemplo, em make xconfig ) leva um tempo também (e ainda mais se você por engano desativar algo que você fazer precisa).

Acho que vale a pena saber que existe, não é garantido que você fique feliz.

(2) Mas na verdade você não precisa de compilações de duas horas para cada modificação em seu "módulo". (Ele realmente precisa ser construído se você estiver implementando uma nova chamada de sistema). make apenas irá recompilar seus arquivos modificados e integrá-los em um binário do kernel. Portanto - para a situação específica que você descreve - seria mais simples aceitar a compilação inicial de duas horas. Acertar o Kconfigs é apenas uma dor.

É útil fazer Kconfigs (por exemplo, os mínimos), no entanto, se você quiser portar diferentes versões do kernel, faça git bisect , teste diferentes opções de compilação, etc.

    
por 11.04.2016 / 17:52
2

Se você está construindo repetidamente o kernel na mesma máquina, o ccache pode ajudar bastante, especialmente se você estiver usando um VM. Na minha experiência, compilações limpas sucessivas do mesmo projeto em uma VM serão criadas em metade do tempo como uma compilação que não usava o ccache. Você precisará de algum espaço extra em disco para armazenar os arquivos de objetos salvos da primeira construção. Além disso, a primeira compilação com o ccache habilitado demorará um pouco mais (talvez 5-10% mais) enquanto estiver gravando todos os arquivos de objeto na pasta ~/.ccache .

Eu tenho algo parecido com isso em um script de configuração para nossas máquinas de construção:

sudo apt-get install ccache
for binary in gcc g++ cc c++ i686-linux-gnu-g++ i686-linux-gnu-gcc x86_64-linux-gnu-gcc x86_64-linux-gnu-g++
do
    if [[ -e /usr/bin/$binary ]]
    then
        sudo ln --symbolic /usr/bin/ccache /usr/local/bin/$binary
        test $? -eq 0 || echo error: symlinking $binary to ccache
    fi
done
echo "If you have the space, you may want to increase your ccache size with \"ccache -s 5G\" (or however much space you can afford)"
    
por 11.04.2016 / 18:02