Tutoriais

Como compilar um Kernel Linux passo a passo [TUTORIAL … – Blog Diolinux

A compilação do Kernel é algo cheio de místicas no mundo da tecnologia, mas na verdade ela não chega

Como compilar um Kernel Linux passo a passo [TUTORIAL … – Blog Diolinux

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 única solução para trazer à vida o seu “dinossauro de estimação”. 😁
Veja também: Atualizar ou não atualizar o Kernel?
Já está ganhando coragem?
Linus Torvalds liberou no kernel.org recentemente o Kernel 4.12 que traz várias melhorias e pelo que me consta, melhores drivers de vídeo para placas da AMD é o principal destaque. Se você usa Arch, Fedora, Manjaro, openSUSE Tumbleweed, versões instáveis do Debian, entre outras distros que costumam manter pacotes recentes, provavelmente você receberá esse Kernel muito em breve (isso se já não recebeu), no entanto, outras distros tendem a usar o Kernel LTS para melhor estabilidade, o Debian Stable, Ubuntu, Mint, entre outras. Estas mantém um Kernel em uma versão mais “antiga” e muitas vezes uma versão modificada também, com inclusão de drivers extras e outras otimizações e perfis que dizem respeito à distro em específico.
Leia também: Conheça o gestor de Kernel gráfico 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 começar a fazer qualquer coisa.
Acredite, se você não tiver paciência para ler este artigo por completo, provavelmente você não vai ter paciência para compilar o kernel. Não tenha medo de aprender, este artigo não vai fugir de você, então leia com calma mais de uma vez e use-o como guia no seu processo.
2º – Faça o processo no VirtualBox uma vez ao menos para você entender como tudo funciona.
Aprenda a fazer testes antes de colocar as coisas em produção, aprenda a errar e tirar conhecimento dos seus erros. Fazer a compilação no VirtualBox pode levar mais tempo por conta da potencia do seu computador ficar dividida, mas permite que você teste várias coisas diferentes. Outra boa opção é você testar em um computador de reserva que você tenha, assim você pode tentar otimizar o kernel para ele.
3º – Não tenha medo, mas seja responsável.
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 atenção.
Se você estiver fazendo em uma máquina virtual ou de testes, não há com o que se preocupar. Na verdade, mesmo fazendo na sua máquina de trabalho, sabendo voltar ao “normal”, não tem muito com o que se preocupar também.
Uma vez o kernel compilado, entenda que tudo o que funciona e não funciona no seu sistema no que diz respeito ao gerenciamento de hardware é “culpa” sua, os patches de segurança, atualizações e coisas do tipo serão aplicados somente se você o fizer. Provavelmente a sua distro continuará a prover atualizações no Kernel que ela traz por padrão através do repositório, 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é! ☕
Pode ser chá também.
O primeiro passo é, sem dúvida, baixar o Kernel que você quer instalar. Observe sempre a versão, pois essa informação será importante no futuro. Neste exemplo vamos usar o mais recente (no momento), o Kernel 4.12. Acesse o kernel.org e baixe a versão mais recente disponível:
Clique no botãozão  amarelo e faça o download para o diretório que você quiser, por exemplo, a sua pasta Downloads. Para fins de organização (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:
Depois disso, abra o seu terminal e agora vamos começar a “brincadeira”. Já pegou um café aí (ou chá, se você estiver em processo de descafeinação)?
Este processo pode demorar um pouco, seja paciente, leia com atenção e tudo deverá ocorrer bem.
Antes de mais nada, vamos instalar alguns pacotes que serão úteis para a nossa compilação. No exemplo eu estou utilizando o Linux Mint, mas os comandos servirão 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 possível. Neste caso, podemos usar o “sudo” sem problemas:
Comando:
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:
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:
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 conteúdo do arquivo e direcioná-lo para o diretório desejado:
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:
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 descompactar arquivos, certo? 😂
Comandos:
Você deverá ver um diretório com o nome de “linux-4.12”.
Aqui vai uma dica que pode facilitar um pouco, e se ao invés 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 símbolo pra ele, assim você não precisa digitar mais de uma palavra ou perder tempo digitando mais caracteres:
Comando:
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:
E observe a presença do link “linux”.
Para mudarmos para dentro do diretório “linux”
Novamente para listar os arquivos contidos dentro da pasta.
Agora é que começa a compilação propriamente dita. O próximo passo é um dos mais importantes e determinantes da hora de compilar um Kernel Linux:
Comando:
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:
O que eu quero mudar neste arquivo é a descrição em EXTRAVERSION:
Navegue com o seu teclado até lá e coloque a informação que desejar, eu vou colocar diocomp1, que para mim significa “Diolinux Compilação 1”, afinal, como eu disse, eu posso fazer várias compilações do mesmo kernel e ir testando, assim na próxima 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:
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:
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:
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:
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: 
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:
Depois do processo terminar, você verá uma tela semelhante a esta:
Agora vamos instalar o Kernel que você acabou de compilar:
Comando:
Ao terminar de executar esta tarefa, você deverá ver uma imagem semelhante a esta:
Agora precisamos mudar de diretório para rodar mais um comando que vai criar a nossa imagem de inicialização do Kernel:
Comando:
Uma vez dentro deste diretório, rodaremos os seguintes comando:
Comandos:
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 é:
No meu exemplo ficou como na imagem acima:
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:
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:
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:
ou
Pronto meu amigo ou minha amiga, você acabou de compilar o Kernel Linux! Não foi tão difícil foi? 
É só preciso de um pouco de atenção e paciência. 😎
Como eu quero deixar as coisas mais completas, eu vou te ensinar a voltar para o kernel da sua distro e remover o seu kernel compilado, caso você queira. Existem várias formas de editar o GRUB para você escolher com qualquer kernel ou sistema você quer inicializar por padrão, mas vamos tomar de exemplo que por qualquer motivo você não queira mais o seu kernel compilado e você queira usar o a sua distro te oferece.
Reinicie o seu computador mais uma vez e na tela do GRUB selecione outra versão do Kernel que não seja a sua compilação, dê preferência pela mais recente, fora a sua.
No meu caso seria a versão “4.8.0-53-generic”, que é a entrada que está marcada logo acima no meu GRUB, selecione a opção e dê “enter”, assim você vai inicializar por este kernel. Essa dica é bacana em vários casos, existem opções de recuperação do sistema que aparecem ali que nem todos conhecem. Eu recomendo que você veja este vídeo onde eu expliquei como funcionam estas opções, vale a pena.
Seu sistema deve iniciar normalmente e está pronto para fazermos a remoção. Como nós fizemos a compilação “na unha”, como se diz, a remoção vai ter que ser também, existem alguns arquivos e diretórios que você precisa apagar, que são os arquivos do seu kernel compilado, são eles:
Entre como root novamente, como você fez para compilar e rode os seguintes comandos:
Comandos (como root):
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:
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:
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:
No meu exemplo ficou:
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:
ou
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.
No meu exemplo:
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.
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.
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? 😁

source

About Author

4tune

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *