Antes de tudo, entenda que o Kernel é desenvolvido pela
Kernel.org. O topo máximo desta cadeia é o
Sr. Linus Torvalds, criador do kernel Linux. Todas as revisões e quem bate o martelo para lançar um Kernel, é ele.
Em meu equipamento, estou utilizando um Debian Stretch com Kernel 4.9.0-3 e estarei atualizando para o Kernel 4.12.4. Este modo de compilação serve para qualquer distribuição.
Para realizar o download do Kernel, clique link para
aqui e selecione a opção "Latest Stable Kernel".
Veja que, na parte de baixo, há uma lista de versões mais antigas do Kernel. Você pode tentar compilar qualquer uma delas baixando o tarball.
Dependências
Dependências para compilar o Kernel:
Obs.: as dependências abaixo são para distribuições Debian-based, ou seja, se você usa RedHat-based ou Slackware-based, precisa identificar os pacotes equivalentes a estes.
- Build-essential: Este é um pacotão de compiladores. Ele contém o make, gcc, gcc++, dpkg-dev, etc. É necessário porque vamos instalar o make, comando que vai entender as instruções e compilar o Kernel.
- libssl-dev: Librarie de segurança que utiliza o protocolo SSL.
- libncurses5-dev: Necessário para criar uma interface gráfica para criação do arquivo de configuração do Kernel. Neste caso, instalando somente esta lib pode não funcionar, então, sugiro instalar todo o pacote do ncurses.
Vamos lá:
sudo su
# apt-get install build-essential libssl-dev ncurses* -y
Agora, vamos extrair o Kernel baixado:
# cd /home/mateus/Downloads
# tar xvf linux-4.12.4.tar.xz
Uma pasta "Linux-4.12.4" foi criada. Vamos acessá-la e verificar o que consta dentro:
# cd linux-4.12.4.
# ls --color
Agora, vamos configurar o Makefile para compilarmos posteriormente (se você não sabe o que é um Makefile, leia este
artigo:
# make menuconfig
Uma tela como esta será aberta. Nela, é possível personalizar o que você deseja ou não compilar deste Kernel, personalizando conforme sua necessidade:
Obs.: o comando
make config faz a mesma coisa que o
make menuconfig, porém, sem interface gráfica.
Depois de finalizado este processo, um arquivo ".config" será criado e o arquivo Makefile será modificado com as instruções que selecionamos na interface gráfica acima.
Agora vamos, de fato, compilar o Kernel:
# make -j4
Obs.: se você não sabe o que o parâmetro "-j" faz, leia este
artigo.
Este processo demora bastante, se você não usar a opção "-j". Então, meu amigo, vá ver um filme, tomar um café, correr com sua namorada.
Depois de finalizado, vamos compilar os módulos:
# make modules
Após compilar, vamos instalar os módulos:
# make modules_install
E, para finalizar, vamos instalar o Kernel com os módulos compilados:
# make install
Processo finalizado. Vamos testar?
Reinicie o equipamento e acesse as opções avançadas de boot:
Você verá o seu Kernel antigo e o Kernel novo (default):
Depois de iniciar o Linux, é possível verificar se o Kernel foi compilado com o seguinte comando:
# uname -a
Informações extras sobre a compilação de Kernel
Existe outra forma de compilar o Kernel?
Existe outra variação para compilar e instalar o Kernel utilizando o
make bzImage. A diferença é que você terá que criar o arquivo Initrd manualmente e depois adicionar uma entrada de boot no Grub. Aqui, temos um exemplo no blog do
Diolinux.
Como desinstalar o Kernel
Se você quiser desinstalar o Kernel, você pode simplesmente deletar todos os arquivos que possuem a extensão do Kernel 4.12 dentro do diretório
/boot. Depois disso, deletar toda a pasta de módulos deste Kernel em
/lib/modules.
E, para finalizar, rodar o comando abaixo novamente para reescrever o menu de boot:
# update-grub
Qual a diferença entre make mrproper e make clean
Caso você queira iniciar o procedimento de compilação do zero, é interessante que você zere os arquivos e módulos já compilados (extensões ".o" e ".ko").
Para remover somente os arquivos de objeto (extensões ".o" e ".ko") você pode rodar o comando:
# make clean
Se você quiser remover todos os objetos e, ainda mais, remover o ".config", arquivos de dependência e todo o resto que o
make menuconfig (ou
make config) cria, você pode utilizar o comando:
# make mrproper
Obrigado e até a próxima!