Você está na página 1de 25

Como compilar um Kernel Linux passo a

passo [TUTORIAL COMPLETO] Diolinux


A compilao do Kernel algo cheio de msticas no mundo da tecnologia, mas na verdade ela no
chega a ser um processo "super" complicado, requer um pouco de ateno, sim, mas nada que
algumas tentativas e alguns Kernel Panic no deixem voc "manjador". Hoje vamos aprender como
compilar um Kernel para a sua distribuio.

Vamos falar um pouco sobre compilao de Kernel e se voc deve ou precisa fazer esse tipo de
coisa.
Como comentei antes, a compilao do Kernel est envolta em uma mstica muito grande onde
"apenas os entendidos" conseguem faz-lo, de fato, necessrio um pouco de conhecimento
avanado no seu hardware para otimizar o Kernel, mas no para compil-lo necessariamente.
Encare este tutorial de forma didtica, acredito que os maiores beneficiados sero os que querem
aprender um pouco mais sobre Linux e sobre informtica, a maior parte dos usurios (comuns e
avanados) no realmente necessitam de um Kernel compilado, digamos que este seja um "luxo"
que voc pode se dar ou no.
As distribuies Linux fazem um grande esforo para entregar para voc um Kernel genrico 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 me, memrias, etc, em fim, se
conhecer bem o seu Hardware, possvel ajustar alguns mdulos para deixar o Kernel mais enxuto
e otimizado. Em minha experincia a diferena no chega a ser gritante mas pode ajudar. Eu mesmo
costumo utilizar o Kernel oferecido pela distribuio que eu estiver utilizando, s vou pensar em
mudar caso algo no esteja funcionando adequadamente e isso pode ser feito de diversas formas,
compilando apenas uma delas.
Voc tambm pode querer usar um Kernel mais antigo em uma mquina mais velha tambm por
questo de melhor suporte ao hardware, se a sua distro no oferece este kernel, compilar ele pode
ser a nica soluo para trazer vida o seu "dinossauro de estimao".

Compilando o seu Kernel Linux


Linus Torvalds liberou no kernel.org recentemente o Kernel 4.12 que traz vrias melhorias e pelo
que me consta, melhores drivers de vdeo para placas da AMD o principal destaque. Se voc usa
Arch, Fedora, Manjaro, openSUSE Tumbleweed, verses instveis do Debian, entre outras distros
que costumam manter pacotes recentes, provavelmente voc receber esse Kernel muito em breve
(isso se j no recebeu), no entanto, outras distros tendem a usar o Kernel LTS para melhor
estabilidade, o Debian Stable, Ubuntu, Mint, entre outras. Estas mantm um Kernel em uma verso
mais "antiga" e muitas vezes uma verso modificada tambm, com incluso de drivers extras e
outras otimizaes e perfis que dizem respeito distro em especfico.
Leia tambm: Conhea o gestor de Kernel grfico para Ubuntu
Caso voc se sinta inseguro ao fazer este tipo de coisa, ou se for a primeira vez que voc vai fazer
isso, eu recomendo que voc se foque em quatro pontos.
1 - Leia todo o material antes de comear a fazer qualquer coisa.
Acredite, se voc no tiver pacincia para ler este artigo por completo, provavelmente voc no vai
ter pacincia para compilar o kernel. No tenha medo de aprender, este artigo no vai fugir de voc,
ento leia com calma mais de uma vez e use-o como guia no seu processo.

2 - Faa o processo no VirtualBox uma vez ao menos para voc entender como tudo funciona.
Aprenda a fazer testes antes de colocar as coisas em produo, aprenda a errar e tirar conhecimento
dos seus erros. Fazer a compilao no VirtualBox pode levar mais tempo por conta da potencia do
seu computador ficar dividida, mas permite que voc teste vrias coisas diferentes. Outra boa opo
voc testar em um computador de reserva que voc tenha, assim voc pode tentar otimizar o
kernel para ele.
3 - No tenha medo, mas seja responsvel.

Algumas pessoas acham que para compilar o kernel voc precisar ser o "Chuck Norris" no Linux,
mas a verdade que "qualquer um com o toddy em um quarto escuro" faz isso, basta prestar
ateno.
Se voc estiver fazendo em uma mquina virtual ou de testes, no h com o que se preocupar.
Na verdade, mesmo fazendo na sua mquina de trabalho, sabendo voltar ao "normal", no tem
muito com o que se preocupar tambm.
Uma vez o kernel compilado, entenda que tudo o que funciona e no funciona no seu sistema no
que diz respeito ao gerenciamento de hardware "culpa" sua, os patches de segurana, atualizaes
e coisas do tipo sero aplicados somente se voc o fizer. Provavelmente a sua distro continuar a
prover atualizaes no Kernel que ela traz por padro atravs do repositrio, mas no que diz
respeito ao kernel que voc compilar, bom, ele depende s de voc.
4 - Pegue o seu caf. Sempre tenha um caf!

Comeando a compilar o Kernel Linux


O primeiro passo , sem dvida, baixar o Kernel que voc quer instalar. Observe sempre a verso,
pois essa informao ser importante no futuro. Neste exemplo vamos usar o mais recente (no
momento), o Kernel 4.12. Acesse o
kernel.org
e baixe a verso mais recente disponvel:

Clique no botozo amarelo e faa o download para o diretrio que voc quiser, por exemplo, a sua
pasta Downloads. Para fins de organizao (afinal voc pode ter muitas pastas e arquivos ali),
sugiro que crie uma pasta com qualquer nome e coloque o arquivo que voc baixou dentro, vou usar
o nome "kernel" neste exemplo, conforme a imagem abaixo:
Veja o exemplo acima da pasta "kernel" dentro de "Downloads"
Depois disso, abra o seu terminal e agora vamos comear a "brincadeira". J pegou um caf a (ou
ch, se voc estiver em processo de descafeinao)?
Este processo pode demorar um pouco, seja paciente, leia com ateno e tudo dever ocorrer bem.
Antes de mais nada, vamos instalar alguns pacotes que sero teis para a nossa compilao. No
exemplo eu estou utilizando o Linux Mint, mas os comandos serviro para todas as distros baseadas
em Debian, incluindo o Ubuntu, lembrando que voc tem que fazer o processo como root ou
utilizando "sudo" onde for possvel. Neste caso, podemos usar o "sudo" sem problemas:

Comando:
sudo apt install build-essential libncurses5-dev

Os pacotes tem o mesmo nome em praticamente todas as distros, ento basta voc usar o
gerenciador de pacotes da sua. Alguns comandos que vamos utilizar so coisas bsicas do Bash,
como o "ls" para listar os arquivos e pastas nos diretrios e o "clear" para limpar a tela (ou
CTRL+L), ento, fique vontade para utiliz-los, como agora, voc deve estar com o seu terminal
cheio de informaes, apenas limpe a tela digitando: clear.
O nosso prximo passo extrair o contedo do arquivo compactado do Kernel que voc baixou
para uma pasta especfica.

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, porm, ele usa a compactao 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,
ento 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:

Agora vamos extrair o contedo do arquivo e direcion-lo para o diretrio desejado:


Dica: use o tab para autocompletar os comandos, por exemplo, ao invs de digitar linux-
4.12.tar.xz, apenas digite "li" e pressione tab. Funciona em vrios outros momentos tambm.

Comando:
tar -xvf linux-4.12.tar.xz -C /usr/src/
Se tiver dvidas sobre o comando tar, voc pode verificar a sua pgina de ajuda digitando: tar
--help. A extrao dever demorar alguns segundos, ento 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 grfico, mas metade da graa de compilar o Kernel est em usar comandos
at pra descompactar arquivos, certo?

Comandos:
cd /usr/src/

ls

Voc dever ver um diretrio com o nome de "linux-4.12".


Aqui vai uma dica que pode facilitar um pouco, e se ao invs de ficar digitando toda a vez "linux-
4.12" voc chamasse ele apenas de "linux" ou de "kernel", ou ainda de "meganfox"? Vamos criar
um link smbolo pra ele, assim voc no precisa digitar mais de uma palavra ou perder tempo
digitando mais caracteres:

Comando:

ln -s linux-4.12 linux

Olha que beleza? Agora quando voc acessar o diretrio "linux" ele vai entrar dentro de linux-4.12.
Se voc der um novo "ls" vai perceber a existncia de um diretrio chamado "linux". Vamos entrar
nele tambm:
Dica: O Linux "Case sentivive", isso significa que o seu sistema operacional diferencia letras
maisculas de minsculas, um diretrio chamado 'Linux" diferente de outro chamado "linux", que
por sua vez diferente de outro chamado "LInux" e por a vai. Ento preste ateno para digitar os
comandos e diretrios exatamente como so os seus nomes.

Comandos:
ls

E observe a presena do link "linux".


cd linux

Para mudarmos para dentro do diretrio "linux"


ls

Novamente para listar os arquivos contidos dentro da pasta.


Agora que comea a compilao propriamente dita. O prximo passo um dos mais
importantes e determinantes da hora de compilar um Kernel Linux:
Comando:
make menuconfig

Esse comando ir rodar e carregar uma espcie de interface onde voc poder fazer vrios ajustes,
se voc quiser, claro:
Dica: Nesta opo, voc pode escolher copiar o arquivo de configurao do seu kernel atual
tambm, bastando confirmar quando o utilitrio lhe pedir, entretanto, neste artigo ns vamos dar
uma explorada a mais nele.

Aqui, para mim, vale o mesmo conceito do overlock. Voc pode ir testando opes at encontrar
alguma que fique realmente estvel e otimizada para voc. Fica difcil eu dizer qualquer coisa aqui
para voc configurar porque eu no sei exatamente qual o hardware voc possui, quais dispositivos
voc conecta no seu computador, no sei o modelo da sua placa me, etc, etc.
Vale muito pena voc fazer este processo vrias vezes e conhecer o seu harware para fazer
modificaes 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 sesso de drivers, desabilitar o suporte
para blobs de drivers proprietrios no Kernel, desmarcando a opo, isso talvez agrade quem gosta
apenas de software livre.
Cabe a voc explorar todas as essas opes (que so muitas), mas ateno, minha recomendao :
Pesquise tudo o que voc deseja alterar para entender o que a opo faz e entender a
consequncia da sua ao, evite fazer esse tipo de coisa em mquinas de trabalho que no
podem ficar paradas e sempre mantenha um kernel extra que voc sabe que funciona, como o
que veio junto com a sua distro, no 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 estvel por levar algum tempo e algumas tentativas de
compilaes.
Dica: Leia com ateno a legenda que aparece nesta tela, ela te informa como voc navega
pelos menus e como marcar e desmarcar as opes.
Como eu no sei qual o seu hardware e ns queremos continuar a nossa experincia com a
compilao, vamos apenas usar todas as opes que so padro. Para isso, sem fazer nenhuma
alterao, vamos at a opo "Save" e pressionamos a tecla "Enter".
Ao salvar uma nova tela aparecer onde voc pode escolher o nome do seu arquivo de configurao
(esse que voc estava editando, ou no, no passo anterior), voc pode deixar o padro mais uma vez
".config" e pressionar "enter" para confirmar:

Depois da configurao estar pronta, uma nova tela vai se abrir com uma nica opo para sair,
apenas confirme pressionando "enter" mais uma vez.
Isso vai te levar para a primeira tela do menu de configurao, agora s voc sair, selecionando a
opo "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 informao e praticidade.
Vamos alterar um pouco o nome do Kernel, nada demais, de "leve na neve", s pra gente saber que
essa a nossa verso compilada.
Uma informao importante que voc pode inserir aqui qual a verso da compilao que voc
est fazendo, assim d pra ir testando vrias formas diferentes e iniciar pelo Kernel que voc quiser
depois pelo GRUB.
Voc pode usar aqui qualquer editar de texto (em modo texto ou grfico), eu estava na inteno de
usar o VIM, porm, ele no vem instalado no Linux Mint (talvez na sua distro ele venha), em
compensao eu tenho pr instalado o nano e o vim.tiny (verso mais enxuta do dito cujo), que vai
servir tambm, afinal, eu s quero mudar uma linha no arquivo de configurao. 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

O que eu quero mudar neste arquivo a descrio em EXTRAVERSION:


Navegue com o seu teclado at l e coloque a informao que desejar, eu vou colocar diocomp1,
que para mim significa "Diolinux Compilao 1", afinal, como eu disse, eu posso fazer vrias
compilaes do mesmo kernel e ir testando, assim na prxima vez que fizer poderei colocar
diocomp2 e assim por diante, ficando mais simples para identificar cada uma.
Para salvar e sair no VIM voc deve pressionar a tecla "ESC" at que a palavra "INSERT" suma ali
de baixo, e digitar:
:wq

No esquea dos dois pontos, o W serve para salvar a sua edio 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 mdulo bnus somente sobre o VIM.
Prximo passo, gerando a imagem bzImage:
Comando:
make bzImage

Se liga a no "I" maisculo. 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, ento v dar uma caminhada ou tomar aquele seu caf, deixe apenas
o terminal trabalhando, procure fechar as outras aplicaes pois a compilao consome recursos da
mquina, memria e processador especialmente, e quanto mais livre ela estiver, mais rpido tende a
ser. Sugesto, aproveita e assiste
um episdio de Bates Motel na Netflix
, a srie 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 diretrio 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 prximo passo vai compilar os mdulos do seu Kernel, o que inclui os drivers que voc
selecionou l no menu de configurao:

Comando:
make modules

Dependendo da quantidade de mdulos habilitados esse processo tambm pode demorar pra
caralho um bocado, espere pacientemente. (Ou fique louco, mas acho que isso no vai ajudar em
nada). No meu caso demorou pouco mais de 1 hora e meia, mas isso depende da potncia do seu
hardware. Ao trmino voc dever ver uma tela como esta:

bom voc deixar um bom espao livre tambm na sua partio / ou na /usr, dependendo de como
voc particionou, essa compilao genrica gerou quase 14 GB de dados.
Agora com os modulos compilados, vamos precisar instal-los:

Depois do processo terminar, voc ver uma tela semelhante a esta:


Agora vamos instalar o Kernel que voc acabou de compilar:

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 diretrio para rodar mais um comando que vai criar a nossa imagem de
inicializao do Kernel:
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 :
Este comando no deve te retornar nada no terminal, ele apenas vai "rodar", por assim dizer.
Estamos chegando perto do final, precisamos fazer com que o GRUB reconhea o nosso novo
kernel para que possamos reiniciar a mquina utilizando ele, para que isso acontea necessrio
atualizar a lista de sistemas/kernels que esto listadas no menu do GRUB (Aquele carinha que
aparece na inicializao 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 atualizao atravs do
comando:
Comando:
update-grub

Eventualmente a sua distro pode ter outro mtodo de fazer este mesmo passo, ento vale a pena
consultar a documentao do sistema caso o comando no funcione.
Repare na imagem acima, ns j temos a imagem do kernel e do initrd encontradas com a nossa
compilao, esse comando no demora muito e ao terminar, ns j temos tudo pronto para comear
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 fcil de voc identificar se o seu novo kernel est listado para
iniciar.
Caso o GRUB no aparea para voc, basta ficar pressionando a tecla "Shift" na inicializao do
computador, depois selecione o modo avanado e voc ver uma imagem semelhante a esta, com o
seu kernel como opo 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
Pronto meu amigo ou minha amiga, voc acabou de compilar o Kernel Linux! No foi to difcil
foi?
s preciso de um pouco de ateno e pacincia.
Reinicie o seu computador mais uma vez e na tela do GRUB selecione outra verso do Kernel que
no seja a sua compilao, d preferncia pela mais recente, fora a sua.
Seu sistema deve iniciar normalmente e est pronto para fazermos a remoo. Como ns fizemos a
compilao "na unha", como se diz, a remoo vai ter que ser tambm, existem alguns arquivos e
diretrios que voc precisa apagar, que so os arquivos do seu kernel compilado, so eles:
Vamos entrar em /boot para limpar os arquivos ali primeiro, depois use o "ls" para listar os arquivos
e diretrios dentro desta pasta, assim voc pode ver o nome do kernel que voc compilou, fica fcil
de reconhecer por conta da modificao que fizemos no nome "l atrs", quanto editamos o arquivo
de configurao. Todos os arquivos tem a verso do nosso kernel compilado (4.12 no nosso
exemplo) e as informaes 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:
Lembre de colocar a SUA VERSO 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 diretrio primeiro:

Comandos:
cd /lib/modules/

Primeiro mudamos para o diretrio dos mdulos, uma vez dentro dele, rodando o "ls" para vermos o
contedo novamente. Certamente voc encontrar outro diretrio com o nome da sua compilao do
kernel, no exemplo temos "4.12.0diocomp1", temos de remov-lo tambm:

rm -rf NOME_DO_SEU_KERNEL

No meu exemplo ficou:

rm -rf 4.12.0diocomp1/
Repare que diferente de quanto apagamos os arquivos no diretrio /boot, aqui usamos um parmetro
para o "rm", o "-rf", ele serve para apagar pastas e arquivos de forma recursiva, se voc usar apenas
o "rm", o comando no consiguir apagar a pasta porque ela no est vazia.
Se voc der um novo "ls" depois de apagar a sua pasta, voc ver que ela no existe mais.
Agora s falta pagar 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 diretrio se
chamava apenas de "initramfs", mas acabei descobrindo que ele ganhou um sufixo extra "initramfs-
tools", no sei dizer quando isso mudou, mas pesquisando eu encontrei referncias de 2014/2015,
tambm no sei dizer se isso uma particularidade do Linux Mint, que eu estou usando neste
tutorial, de qualquer forma achei o diretrio e voc tambm 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 contrrio ao tentar iniciar o computador por ele voc ter uma bela tela de erro.

update-grub
Ao fazer a atualizao do GRUB, repare que o kernel compilado sumiu das entradas. Ao reiniciar
voc pode at olhar no GRUB para conferir que o kernel compilado no existe mais.

Se tiver ainda dvidas, 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 tambm um
dos assuntos mais "complexos" abordados. A maior parte das vezes que vi tutoriais respeito do
assunto eles no eram to "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 questo e
mostrar que no to complicado quanto a maior parte das pessoas pensa.
No precisa ser nenhum gnio para compilar um kernel, como voc pde ver, entretanto, a parte
diferencial pode ser a otimizao para o seu hardware e neste caso voc ter de fazer um estudo
particular sobre a sua situao e entender o que voc pode alterar que poder te dar algum benefcio.
Eu escrevi este artigo com muita dedicao e carinho, porm, ele no est isento de erros, mesmo
que eu tenha conferido algumas vezes todo o processo (em mais de uma distro), caso voc encontre
erros de portugus, erros no processo da compilao ou tenha sugestes, use os comentrios para
colaborar e engrandecer o material, certamente ser de grande ajuda.