Escolar Documentos
Profissional Documentos
Cultura Documentos
[TUTORIAL COMPLETO]
• porDionatan Simioni
• 05/07/2017
• 18 minutos de leitura
A compilação do Kernel é algo cheio de místicas no mundo da tecnologia, mas na verdade ela não
chega a ser um processo “super” complicado, requer um pouco de atenção, sim, mas nada que algumas
tentativas e alguns Kernel Panic não deixem você “manjador”. Hoje vamos aprender como compilar
um Kernel para a sua distribuição.
Vamos falar um pouco sobre compilação de Kernel e se você deve ou precisa fazer esse tipo de
coisa.
Como comentei antes, a compilação do Kernel está envolta em uma mística muito grande onde “apenas
os entendidos” conseguem fazê-lo, de fato, é necessário um pouco de conhecimento avançado no seu
hardware para otimizar o Kernel, mas não para compilá-lo necessariamente.
Encare este tutorial de forma didática, acredito que os maiores beneficiados serão os que querem
aprender um pouco mais sobre Linux e sobre informática, a maior parte dos usuários (comuns e
avançados) não realmente necessitam de um Kernel compilado, digamos que este seja um “luxo” que
você pode se dar ou não.
As distribuições Linux fazem um grande esforço para entregar para você um Kernel genérico que
consiga lidar com praticamente qualquer hardware e ainda extraia um bom desempenho do seu
computador. Se você conhecer direito o seu processador, sua placa mãe, memórias, etc, em fim, se
conhecer bem o seu Hardware, é possível ajustar alguns módulos para deixar o Kernel mais enxuto e
otimizado. Em minha experiência a diferença não chega a ser gritante mas pode ajudar. Eu mesmo
costumo utilizar o Kernel oferecido pela distribuição que eu estiver utilizando, só vou pensar em mudar
caso algo não esteja funcionando adequadamente e isso pode ser feito de diversas formas, compilando é
apenas uma delas.
Você também pode querer usar um Kernel mais antigo em uma máquina mais velha também por
questão de melhor suporte ao hardware, se a sua distro não oferece este kernel, compilar ele pode ser a
Os pacotes tem o mesmo nome em praticamente todas as distros, então basta você usar o gerenciador
de pacotes da sua. Alguns comandos que vamos utilizar são coisas básicas do Bash, como o “ls” para
listar os arquivos e pastas nos diretórios e o “clear” para limpar a tela (ou CTRL+L), então, fique à
vontade para utilizá-los, como agora, você deve estar com o seu terminal cheio de informações, apenas
limpe a tela digitando: clear.
– Aprenda comandos de Bash aqui para facilitar a sua vida com o Terminal
O nosso próximo passo é extrair o conteúdo do arquivo compactado do Kernel que você baixou para
uma pasta específica.
Lembra que eu tinha comentado para colocarmos o arquivo dentro de uma pasta chamada “kernel”, que
por sua vez estava dentro da pasta “Downloads”? Vamos precisar ir até ela com o comando:
cd ~/Downloads/kernel/
Uma vez dentro dela, rode o “ls” para ver se o arquivo está ali. No nosso exemplo o arquivo se chama
linux-4.12.tar.xz, este tipo de arquivo é um arquivo compactado como qualquer outro .rar ou .zip,
porém, ele usa a compactação tar.xz, vamos precisar extrair os arquivos dele e vamos fazer pelo
terminal, assim já podemos direcioná-lo diretamente para a pasta /usr/src/ que é onde ele deve ficar
para continuarmos. À partir de agora, vamos entrar em modo root e fazer tudo desta forma, então rode
o comando:
su root
Digite a sua senha e você já deve estar como root, se você estiver usando o Bash, o indicativo para isso
é que você terá um “#” no lugar do “$” no terminal:
Dica: use o tab para autocompletar os comandos, por exemplo, ao invés de digitar linux-
4.12.tar.xz, apenas digite “li” e pressione tab. Funciona em vários outros momentos também.
Comando:
tar -xvf linux-4.12.tar.xz -C /usr/src/
Se tiver dúvidas sobre o comando tar, você pode verificar a sua página de ajuda digitando: tar –help.
A extração deverá demorar alguns segundos, então aguarde o processo terminar, quando isso acontecer
você deverá ver uma tela semelhante a esta:
Agora vamos conferir se realmente os arquivos foram parar no lugar certo. Até agora você poderia ter
feito tudo em modo gráfico, mas metade da graça de compilar o Kernel está em usar comandos até pra
Comandos:
cd /usr/src/
ls
Comando:
ln -s linux-4.12 linux
Olha que beleza? Agora quando você acessar o diretório “linux” ele vai entrar dentro de linux-4.12. Se
você der um novo “ls” vai perceber a existência de um diretório chamado “linux”. Vamos entrar nele
também:
Dica: O Linux é “Case sentivive”, isso significa que o seu sistema operacional diferencia letras
maiúsculas de minúsculas, um diretório chamado ‘Linux” é diferente de outro chamado “linux”, que
por sua vez é diferente de outro chamado “LInux” e por aí vai. Então preste atenção para digitar os
comandos e diretórios exatamente como são os seus nomes.
Comandos:
ls
Esse comando irá rodar e carregar uma espécie de interface onde você poderá fazer vários ajustes, se
você quiser, é claro:
Dica: Nesta opção, você pode escolher copiar o arquivo de configuração do seu kernel atual
também, bastando confirmar quando o utilitário lhe pedir, entretanto, neste artigo nós vamos dar uma
explorada a mais nele.
Aqui, para mim, vale o mesmo conceito do overlock. Você pode ir testando opções até encontrar
alguma que fique realmente estável e otimizada para você. Fica difícil eu dizer qualquer coisa aqui para
você configurar porque eu não sei exatamente qual o hardware você possui, quais dispositivos você
conecta no seu computador, não sei o modelo da sua placa mãe, etc, etc.
Vale muito à pena você fazer este processo várias vezes e conhecer o seu harware para fazer
modificações e testar como tudo vai funcionar. Aqui você pode habilitar e desabilitar drivers por
exemplo. Um exemplo que eu posso dar é que você pode, na sessão de drivers, desabilitar o suporte
para blobs de drivers proprietários no Kernel, desmarcando a opção, isso talvez agrade quem gosta
apenas de software livre.
Cabe a você explorar todas as essas opções (que são muitas), mas atenção, minha recomendação é:
Pesquise tudo o que você deseja alterar para entender o que a opção faz e entender a
consequência da sua ação, evite fazer esse tipo de coisa em máquinas de trabalho que não podem
ficar paradas e sempre mantenha um kernel extra que você sabe que funciona, como o que veio
junto com a sua distro, não o remova, assim você pode voltar pra ele caso tenha algum problema.
Estude o seu hardware e veja que recursos você pode habilitar e desabilitar.
Otimizar um Kernel para você e tê-lo estável por levar algum tempo e algumas tentativas de
compilações.
Dica: Leia com atenção a legenda que aparece nesta tela, ela te informa como você navega
pelos menus e como marcar e desmarcar as opções.
Como eu não sei qual o seu hardware e nós queremos continuar a nossa experiência com a compilação,
vamos apenas usar todas as opções que são padrão. Para isso, sem fazer nenhuma alteração, vamos até
a opção “Save” e pressionamos a tecla “Enter”.
Ao salvar uma nova tela aparecerá onde você pode escolher o nome do seu arquivo de configuração
(esse que você estava editando, ou não, no passo anterior), você pode deixar o padrão mais uma vez
“.config” e pressionar “enter” para confirmar:
Depois da configuração estar pronta, uma nova tela vai se abrir com uma única opção para sair, apenas
confirme pressionando “enter” mais uma vez.
Isso vai te levar para a primeira tela do menu de configuração, agora é só você sair, selecionando a
opção “Exit”:
Voltamos ao nosso terminal mais uma vez, você pode dar um “clear” para deixar ele limpo novamente.
O que vamos fazer agora é puramente para informação e praticidade.
Vamos alterar um pouco o nome do Kernel, nada demais, de “leve na neve”, só pra gente saber que essa
é a nossa versão compilada.
Uma informação importante que você pode inserir aqui é qual a versão da compilação que você está
fazendo, assim dá pra ir testando várias formas diferentes e iniciar pelo Kernel que você quiser depois
pelo GRUB.
Você pode usar aqui qualquer editar de texto (em modo texto ou gráfico), eu estava na intenção de usar
o VIM, porém, ele não vem instalado no Linux Mint (talvez na sua distro ele venha), em compensação
eu tenho pré instalado o nano e o vim.tiny (versão mais enxuta do dito cujo), que vai servir também,
afinal, eu só quero mudar uma linha no arquivo de configuração. Se você quiser pode instalar o VIM ou
qualquer outro.
Escolha o que você preferir e vamos editar o arquivo:
Comando:
vim.tiny /usr/src/linux/Makefile
Não esqueça dos dois pontos, o W serve para salvar a sua edição e o Q para sair. Se você quiser
aprender mais sobre o VIM e sobre o terminal, confira o nosso curso de Bash no Diolinux EAD, ele
tem um módulo bônus somente sobre o VIM.
Próximo passo, gerando a imagem bzImage:
Comando:
make bzImage
Se liga aí no “I” maiúsculo. Nesta parte eu tive esse problema, como você pode ver, só ocorreu no
Linux Mint/Ubuntu, no Debian foi de boa. Isso era a falta de um pacote no sistema que você resolve
com:
apt install libssl-dev
Essa parte demora meu jovem, então vá dar uma caminhada ou tomar aquele seu café, deixe apenas o
terminal trabalhando, procure fechar as outras aplicações pois a compilação consome recursos da
máquina, memória e processador especialmente, e quanto mais livre ela estiver, mais rápido tende a ser.
Sugestão, aproveita e assiste um episódio de Bates Motel na Netflix, a série é muito legal.
Ao terminar o processo, você deve ver uma tela semelhante a esta:
Se tudo deu certo, você deverá ter uma imagem dentro do diretório de boot, que é um subpasta dentro
da sua pasta “linux”, para verificar isso rode o seguinte comando:
ls /usr/src/linux/arch/x86_64/boot/
A arquitetura ali no meio do comando (x86_64) depende do tipo do kernel que você está compilando,
de 32 ou 64 bits. Você deverá ver algo como isto:
O próximo passo vai compilar os módulos do seu Kernel, o que inclui os drivers que você selecionou lá
no menu de configuração:
Comando:
make modules
Dependendo da quantidade de módulos habilitados esse processo também pode demorar pra caralho
um bocado, espere pacientemente. (Ou fique louco, mas acho que isso não vai ajudar em nada). No
meu caso demorou pouco mais de 1 hora e meia, mas isso depende da potência do seu hardware. Ao
término você deverá ver uma tela como esta:
É bom você deixar um bom espaço livre também na sua partição / ou na /usr, dependendo de como
você particionou, essa compilação genérica gerou quase 14 GB de dados.
Agora com os modulos compilados, vamos precisar instalá-los:
Comando:
make install
Ao terminar de executar esta tarefa, você deverá ver uma imagem semelhante a esta:
Alguns erros que aparecem nessa tela ocorrem por conta do VirtualBox
Agora precisamos mudar de diretório para rodar mais um comando que vai criar a nossa imagem de
inicialização do Kernel:
Comando:
cd /boot
Comandos:
ls /lib/modules/
Esse comando vai servir pra termos certeza do nome do nosso kernel, como você pode ver na segunda
linha da imagem acima, o kernel que compilamos tem o nome de “4.12.0diocomp1”, vamos precisar
deste nome no comando a seguir, que é:
mkinitramfs -o initrd.img-4.12(use o tab para completar) (nome do kernel)
Preste atenção, pois este comando deve ser rodado dentro do diretório /boot.
Este comando não deve te retornar nada no terminal, ele apenas vai “rodar”, por assim dizer.
Estamos chegando perto do final, precisamos fazer com que o GRUB reconheça o nosso novo kernel
para que possamos reiniciar a máquina utilizando ele, para que isso aconteça é necessário atualizar a
lista de sistemas/kernels que estão listadas no menu do GRUB (Aquele carinha que aparece na
inicialização do computador).
Esse passo pode variar um pouco de acordo com o sistema que você estiver utilizando, Debian,
Ubuntu, Mint, etc tem uma shell script nativo do sistema que faz essa atualização através do comando:
Comando:
update-grub
Eventualmente a sua distro pode ter outro método de fazer este mesmo passo, então vale a pena
consultar a documentação do sistema caso o comando não funcione.
Repare na imagem acima, nós já temos a imagem do kernel e do initrd encontradas com a nossa
compilação, esse comando não demora muito e ao terminar, nós já temos tudo pronto para começar a
utilizar e testar o nosso kernel compilado.
Agora você pode reiniciar o computador para testar o novo Kernel compilado por você mesmo, se
funcionar eu sei que você vai estar se sentindo um Elliot da vida, mas vamos para o teste definitivo.
Reinicie como você preferir, se quiser fazer pelo terminal, apenas digite:
reboot
Se o seu computador tem apenas um sistema operacional instalado, ele deve carregar automaticamente
o seu kernel, caso ele seja o mais recente instalado, caso você tenha mais de um sistema, você verá o
GRUB, onde fica fácil de você identificar se o seu novo kernel está listado para iniciar.
Caso o GRUB não apareça para você, basta ficar pressionando a tecla “Shift” na inicialização do
computador, depois selecione o modo avançado e você verá uma imagem semelhante a esta, com o seu
kernel como opção para inicializar.
Bastar pressionar “enter” para inicializar pelo Kernel desejado.
Se tudo deu certo, seu computador vai funcionar normalmente, uma vez na área de trabalho você pode
conferir se você está usando o Kernel correto rodando o seguinte comando:
Comando:
uname -romi
ou
uname -r
Pronto meu amigo ou minha amiga, você acabou de compilar o Kernel Linux! Não foi tão difícil foi?
/boot/initrdNOME-DO-SEU-KERNEL
/boot/System-mapNOME-DO-SEU-KERNEL
/boot/config-NOME-DO-SEU-KERNEL
/lib/modules/NOME-DO-SEU-KERNEL/
/var/lib/initramfs-tools/NOME-DO-SEU-KERNEL/ ou /var/lib/initramfs/NOME-DO-SEU-
KERNEL/
Entre como root novamente, como você fez para compilar e rode os seguintes comandos:
Comandos (como root):
cd /boot
Vamos entrar em /boot para limpar os arquivos ali primeiro, depois use o “ls” para listar os arquivos e
diretórios dentro desta pasta, assim você pode ver o nome do kernel que você compilou, fica fácil de
reconhecer por conta da modificação que fizemos no nome “lá atrás”, quanto editamos o arquivo de
configuração. Todos os arquivos tem a versão do nosso kernel compilado (4.12 no nosso exemplo) e as
informações que colocamos em EXTRAVERSION, no exemplo eu coloquei diocomp1.
Para remover vamos usar o comando ”rm”, como está na imagem acima, sendo assim, o comando
ficaria:
rm vmlinuz-4-12.0diocomp1 inird.img-4.12.0diocomp1 System.map-4.12.0diocomp1
config-4.12.0-diocomp1
Lembre de colocar a SUA VERSÃO do kernel, com o nome que você deu pra ele.
Rodando o comando e dando um novo “ls” você verá que os arquivos foram apagados:
Precisamos remover mais algumas coisas ainda antes de atualizamos o GRUB novamente.
Precisamos mudar de diretório primeiro:
Comandos:
cd /lib/modules/
Primeiro mudamos para o diretório dos módulos, uma vez dentro dele, rodando o “ls” para vermos o
conteúdo novamente. Certamente você encontrará outro diretório com o nome da sua compilação do
kernel, no exemplo temos “4.12.0diocomp1”, temos de removê-lo também:
rm -rf NOME_DO_SEU_KERNEL
Repare que diferente de quanto apagamos os arquivos no diretório /boot, aqui usamos um parâmetro
para o “rm”, o “-rf”, ele serve para apagar pastas e arquivos de forma recursiva, se você usar apenas o
“rm”, o comando não consiguirá apagar a pasta porque ela não está vazia.
Se você der um novo “ls” depois de apagar a sua pasta, você verá que ela não existe mais.
Agora só falta apagar mais um arquivo.
Comandos:
cd /var/lib/initramfs/
ou
cd /var/lib/initramfs-tools/
Aqui eu tive uma “surpresa”, da última vez que eu tinha compilado um kernel o diretório se chamava
apenas de “initramfs”, mas acabei descobrindo que ele ganhou um sufixo extra “initramfs-tools”, não
sei dizer quando isso mudou, mas pesquisando eu encontrei referências de 2014/2015, também não sei
dizer se isso é uma particularidade do Linux Mint, que eu estou usando neste tutorial, de qualquer
forma achei o diretório e você também o achará.
Dentro dele você pode dar mais um “ls” para ver o há por ali, mais uma vez você deve encontrar o seu
kernel compilado, basta remover o arquivo como você fez com os arquivos em /boot.
rm NOME_DO_SEU_KERNEL
No meu exemplo:
rm 4.12.0diocomp1
Depois, precisamos atualizar o GRUB novamente para que ele remova a entrada do kernel compilado,
caso contrário ao tentar iniciar o computador por ele você terá uma bela tela de erro.
update-grub
Ao fazer a atualização do GRUB, repare que o kernel compilado sumiu das entradas. Ao reiniciar você
pode até olhar no GRUB para conferir que o kernel compilado não existe mais.
Se tiver ainda dúvidas, ao chegar na sua área de trabalho consulte novamente via terminal:
Como você pode ver, voltamos ao kernel generic.
Finalizando
Este é provavelmente um dos maiores tutoriais que eu já pude escrever aqui no blog e também um dos
assuntos mais “complexos” abordados. A maior parte das vezes que vi tutoriais à respeito do assunto
eles não eram tão “passo a passo” e raramente ensinavam a remover o kernel compilado, espero que eu
tenha conseguido cumprir o meu objetivo de desmistificar um pouco essa questão e mostrar que não é
tão complicado quanto a maior parte das pessoas pensa.
Não precisa ser nenhum gênio para compilar um kernel, como você pôde ver, entretanto, a parte
diferencial pode ser a otimização para o seu hardware e neste caso você terá de fazer um estudo
particular sobre a sua situação e entender o que você pode alterar que poderá te dar algum benefício.
Eu escrevi este artigo com muita dedicação e carinho, porém, ele não está isento de erros, mesmo que
eu tenha conferido algumas vezes todo o processo (em mais de uma distro), caso você encontre erros de
português, erros no processo da compilação ou tenha sugestões, use os comentários para colaborar e
engrandecer o material, certamente será de grande ajuda.
Compartilhe para os seus amigos como forma de pagamento pelo conteúdo e até a próxima!
Matamos mais um leão, hein?