O kernel precisa ser compilado no mesmo ambiente dev que o userspace?

3

Digamos que meu espaço de usuário (pacotes) seja compilado com gcc 4.7 e libc6 2.13 (Debian Wheezy)

Posso compilar o kernel do linux sob diferentes ambientes de desenvolvimento, como gcc 6.3 e libc6 2.24 (isto é, sob o Debian Stretch)?

Eu sei que, diferentemente dos pacotes, o kernel não está vinculado a nenhuma biblioteca dinâmica. Então, teoricamente, não deve fazer diferença em que gcc e libc foram compilados.

Isso é verdade? Eu poderia ter problemas quando eu fizer isso? Poderia haver algumas incompatibilidades causadas por diferentes gcc versões?

Por outro lado, o mais recente gcc tem alguns recursos interessantes, melhor segurança. Então, talvez, o kernel deve ser compilado com o mais recente gcc ?

    
por Martin Vegter 19.10.2017 / 10:46

2 respostas

4

Como você aponta, a biblioteca C usada não tem impacto no kernel, o kernel não usa a biblioteca C. (Há um impacto indireto, pois é usado para criar ferramentas que o kernel usa durante o processo de criação, mas é extremamente improvável que isso afete o resultado final.)

O kernel pode ser construído com uma variedade de versões diferentes do compilador; De acordo com sua documentação, ele só precisa do GCC 3.2 ou posterior. Você também descobrirá que pode levar algum tempo para que o kernel ofereça suporte oficial às versões mais recentes do GCC e ainda mais tempo para que um kernel de distribuição o use. Por exemplo, o pacote do kernel do Debian Linux usa o GCC 6, e até tem pacotes dedicados para fornecer a versão correta do compilador ( linux-compiler-gcc-6-x86 em amd64 e i386 ). Não há conexão entre o compilador usado para o kernel e o compilador usado para userspace (nem existe necessariamente qualquer necessidade de usar o mesmo compilador para todos os programas antigos do espaço do usuário construídos com GCC 3 ou mesmo 2 ainda funcionam em sistemas modernos).

As novas versões do compilador fornecem mais recursos de segurança, mas o GCC 6 é bom o suficiente para a maioria, se não para todos os recursos de segurança usados no kernel.

    
por 19.10.2017 / 10:54
0

Você pode compilar o kernel com um toolchain diferente dos pacotes de espaço do usuário? Sim.

Um dos princípios fundamentais do kernel é a separação do espaço do usuário e do kernel. Existe uma interface bem definida entre os dois - a interface de chamada do sistema. Enquanto os programas de espaço do usuário respeitarem isso, não importa se eles são compilados usando o mesmo toolchain que o kernel. Ineed, muitos programas nem sequer são escritos em C ou assembly e usam compiladores e ambientes de tempo de execução totalmente diferentes, por ex. Programas Java em execução na JVM.

    
por 19.10.2017 / 10:49