Estou confuso sobre a compilação do kernel, (corrijam se eu estiver errado ou podem adicionar mais detalhes no meu resumo) pelos minhas buscas até o momento tive um entendimento que o kernel é escrito em algumas linguagens e elas são compiladas para o hardware entender isso é o básico tem os arquivos do tipo makefile que indicam os compiladores e assim vai, porem queria compreender qual é o compilador como ele é chamado qual a localização se temos acesso para utilizar no usuario tambem (exemplo: estou escrevendo em C tem o compilador gcc do kernel utilizo ele pra rodar o que eu escrevi em um arquivo, vi no kernel que tem um python3 em um arquivo “makefile” e consegui verificar a versao do python pelo meu terminal como se tivesse instalado sendo que nem nunca escrevi algo para python) se é alterar o kernel em utilização no momento como é a relação da inicialização assim que a BIOS aciona o kernel puxa as linguagens e o compilador pro computador entender e assim vai.
O kernel é compilado em binário, isso é, ele é estático depois de compilado. Nesse arquivo que mostraste estão meio que definições das variáveis para o make, que gerencia a compilação.
Aí estão descritas as variáveis e definições para o make, de várias coisas que podem ser necessárias para o processo de compilação, tipo o compilador de C (nesse caso GCC), o compilador de Rust, linguagens de script como bash, perl, python etc., além de métodos de compressão utlizados (gzip, xz, lzma etc.).
Enfim, o kernel não é compilado toda vez que o sistema inicia, ele só carrega o que já foi compilado (normalmente o kernel vem como um pacote qualquer nas distribuições usuais, já compilado, assim como os “outros programas”).
Numa instalação linux usual, se tu fores em /boot encontrarás algo como vmlinuz e initrd, sendo vmlinuz uma versão básica do kernel para dar prosseguimento ao boot e carregar na memória a imagem presente em /boot/initrd (algo em português como disco de inicialização em ram) que se encarregará de prosseguir o boot.
Não se altera o kernel em execução no momento. Para carregar um kernel modificado é necessário reiniciar a máquina.
Acho que a dúvida está presente porque vc está tentando entender o arquivo Makefile através do exemplo do kernel, que é extremamente extenso.
A dica é começar com Makefile de um programa pequeno ou mesmo com algum tutorial. A base é que ele é uma receita escrito em linguagem de programação shell script, ou seja, precisa saber pelo menos o básico sobre programação em shell script para poder entender o arquivo Makefile.
Respondendo sucintamente a pergunta: O comando do compilador (para compilar arquivos C) no caso do kernel é definido pela variável $(CC). Pode ser configurado para compilar com o gcc ou com clang. Pelas configurações será setada a variável $(LLVM), que vai decidir se no bloco ifneq ($(LLVM,))
será usado
CC = $(LLVM_PREFIX)clang$(LLVM_SUFFIX)
ou
CC = $(CROSS_COMPILE)gcc
Muito obrigado.
Obrigado vi alguns tutoriais com o makefile e consegui relacionar com oq disse tambem, muito obrigado.
Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.