compilando o kernel do Linux com não-gcc
-
22-09-2019 - |
Pergunta
O kernel do Linux foi escrito para compilar com o gcc e usa muitos hacks pequenos e feios do gcc.Quais compiladores podem compilar o kernel do Linux, exceto o gcc?
Aquele que pode, é o compilador Intel.Qual versão mínima é necessária para a compilação do kernel?
Também havia um compilador Tiny C, mas ele era capaz de compilar apenas versões reduzidas e especialmente editadas do kernel.
Existem outros compiladores capazes de construir o kernel?
Solução 2
Há um processo contínuo de envio de patches LLVMLinux no kernel vanilla (2013-2014).
O LLVMLinux é um projeto da The Linux Foundation: http://llvm.linuxfoundation.org/ para permitir que o kernel vanilla seja construído com LLVM.Muitos patches são preparados por Behan Webster, líder do projeto LLVMLinux.
Há um artigo da LWN sobre o projeto de maio de 2013https://lwn.net/Articles/549203/ "LFCS:O projeto LLVMLinux"
O status atual do projeto LLVMLinux é rastreado na página http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues
Coisas (basicamente gcc-ismos) já eliminadas do kernel:* Variáveis de Registros Expícios (não C99) * VLAIs (recurso não documentado GCC compatível com C99 "Matrizes de comprimento variável em estruturas") como struct S { int array[N];}
ou mesmo struct S { int array[N]; int array_usb_gadget[M]; }
onde n e m são argumentos de função não constante * Funções aninhadas (recurso ADA portado para desenvolvedores C por GCC/GNAT;não permitido em C99) * Algum GCC/Gas Magic, como segmentos especiais, ou macro
Coisas a serem feitas:* Uso de __builtin_constant_p
integrado para implementar magia assustadora como BUILD_BUG_ON(!__builtin_constant_p(offset));
A boa notícia sobre o LLVMLinux é que após seus patches o kernel não apenas se torna compilável com LLVM+clang, mas também mais fácil de construir por outros compiladores não-GCC, porque o projeto mata muito código não C99 como o VLAIS, criado pelo autor do gadget usb, por hackers de netfilter e por hackers de subsistemas de criptografia;também funções aninhadas são eliminadas.
Outras dicas
Informações sobre o Outsadot: você precisa corrigir o kernel para compilar usando o Intel CCBaixe o Patch Linux Kernel para compilador Intel®
Veja também É possível compilar o kernel Linux com algo diferente do GCC Para mais links e informações
Nas fontes mais recentes:http://forums.fedoraforum.org/showthread.php?p=1328718
Em suma, você não pode, porque o código do kernel foi escrito para aproveitar a semântica do compilador do GCC ... e entre o kernel e o código compilado, o relacionamento é muito forte, ou seja, deve ser compilado com o GCC ... já que O GCC usa arquivos de objeto 'ELF' (formato de vinculação incorporado), o kernel deve ser criado usando o formato do código do objeto. A menos que você possa invadir para trabalhar com outro compilador - ele pode muito bem compilar, mas pode não funcionar, pois os compiladores do Windows produzem código de PE, pode haver resultados inesperados, o que significa que o kernel pode não inicializar!