Compilação do Kernel

Obtenção, configuração, compilação e instalação de um novo kernel Linux. Os comandos no terminal podem ser executados, a grosso modo, na maioria das distribuições Linux.

[ Hits: 3.623 ]

Por: Buckminster em 29/09/2021


Configurando e otimizando



Execute:

# make menuconfig
(entra nas configurações do kernel)

Para entrar nas opções, dê Enter e para alterar de "M" para "*", e vice-versa, é só pressionar a barra de espaços. A opção "M" compila como módulo, a opção "*" compila embutido no kernel. A escolha vai de cada parâmetro. Como módulo não fará parte do "monólito" do kernel.

Para sair de uma opção, dê Esc duas vezes seguidas. Navegue com as setas de direção.

Vá em: Processor type and features (enter) → Processor Family (Generic-x86-64)

...navegue e marque (barra de espaços) a opção que corresponde ao processador da sua máquina. Ao dar barra de espaços o menu voltará automaticamente. No meu caso, marquei Core 2/newer Xeon, por ele ter quatro núcleos (Cores). Caso ficar na dúvida, deixe a opção padrão: Generic-x86-64

Mais abaixo, vá em "Timer frequency". Se a sua instalação for para servidor, marque a opção "100 HZ" (isso melhorará o tempo de resposta do servidor para as requisições). Para Desktop, deixe "250 HZ".

Retorne ao menu principal: Esc + Esc

Vá em: Networking support → Networking options → Network packet filtering framework (netfilter) → IP: Netfilter Configuration

E marque todas as opções relativas ao nf_tables. Esse parâmetro não tem a ver com otimização, mas com suporte ao nftables.

Tecle: Esc + Esc

Vá em IPv6: "Netfilter Configuration" e marque as duas opções do Nftables. Tecle: Esc + Esc

Vá em "IPv4/IPV6 bridge connection tracking support" e marque essa opção.

Volte ao menu principal dando ESC e cuidando até aparecer o menu principal "Linux/x86 5.13.10 Kernel Configuration".

Vá em "File Systems", marque os sistemas de arquivos utilizados com "*". No meu caso, ext4 (/boot) com btrfs (demais partições).

* Dica: para ext4, marque a primeira opção (The Extended 4 (ext4) filesystem) com "*", e deixe as 3 seguintes marcadas.

Caso você quiser, os parâmetros com os arquivos de sistemas os quais tem no seu sistema Linux você pode colocar "*" para compilar embutido no kernel, o suporte do kernel ao sistema de arquivos fica melhor, porém, quanto mais opções se coloca como "*" maior ficará o tamanho do kernel após a compilação. Alguns parâmetros é melhor ficarem como módulo (M).

Na dúvida, deixe como no padrão que já está ali.

Para o btrfs, ficaram marcadas as opções:
  • Btrfs filesystem support;
  • Btrfs POSIX Access Control Lists e
  • Btrfs will run sanity tests upon loading.
  • Btrfs debugging support

De acordo com os sistemas de arquivos que você tem no seu Linux (ext4, Btrfs etc) configure como queira.

Mais abaixo, vá em: "Network File Systems"

E se for servidor, coloque um "*" na opção "NFS server support".

Volte: Esc + Esc

Logo abaixo, vá em "Native language support" e marque com "*", as opções:
  • Codepage 860 (Portuguese)
  • ASCII (United States)
  • NLS ISO 8859-1 (Latin 1; Western European Languages)
  • LS UTF-8

Retorne ao menu principal selecionando EXIT. Após o último EXIT, aparecerá a janela "Do you wish...", deixe como: "Yes" e dê Enter.

Execute:

# ls -a

E veja se o arquivo ".config" foi gravado. Se não, repita a operação.

Agora, vamos alterar os arquivos necessários para otimizar a compilação de acordo com o processador da máquina:

# cc -march=native -E -v - &1 | grep cc1

Veja a saída desse comando, que beleza de novo:

/usr/lib/gcc/x86_64-linux-gnu/6/cc1 -E -quiet -v -imultiarch x86_64-linux-gnu - -march=sandybridge -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq [email protected]:/usr/src/linux-5.13.10# -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=sandybridge
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/6/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.


Para sair, dê enter.

Vamos alterar os arquivos (segue uma lista completa dos arquivos com as linhas a serem alteradas). É necessário alterar somente 3 arquivos (os 3 primeiros abaixo), porém, se você é paranoico e obcecado, altere os outros 10 também:

* IMPORTANTE: em todos os arquivos, altere as opções "march" para "-march=native", as opções "mcpu" para "-mcpu=native" e as opções "mtune" para "mtune=processador". Nesta última opção, "mtune", coloque o que aparecer na saída do comando cc -march=native -E -v - &1 | grep cc1. No meu caso ficou "-mtune=sandybridge".

Se a versão do GCC for 4.5.1, inclusive, para baixo, deixe "-mtune=generic". Como anteriormente instalamos e atualizamos a versão do GCC (o GCC, o G++ e o MAKE, entre outros, estão no pacotão "build-essential"), não precisa se preocupar muito com isso. A não ser que seu sistema e seu hardware sejam bem antigos.

Para ver a versão do GCC, digite:

# gcc --version

Para os arquivos abaixo utilize a busca do editor de texto, as linhas coloquei somente como parâmetro. Aconselho a alterar manualmente e não usar ctrl+c, ctrl+v.

Lista de arquivos:

# vim /usr/src/.../...
(use teu editor de texto preferido)

1. /usr/src/linux-5.13.10/arch/x86/boot/compressed/Makefile - linha ~35, opção march=native;

2. /usr/src/linux-5.13.10/arch/x86/Makefile - linhas 25, 28, 123, 124, 127 e 128 (march); linhas 127, 129 e 130, (mtune);

3. /usr/src/linux-5.13.10/arch/x86/Makefile_32.cpu - tem várias linhas, utilize a busca do seu editor de texto. Neste arquivo tem duas opções que não devem ser mudadas: -mtune=$(1),$(2)) e -mcpu=$(1),$(2)), as outras pode mudar.

Neste último arquivo acima, atenção especial na linha 47 "cflags-$(CONFIG_X86_GENERIC += $(call tune,generic,$(call tune,i686))", que deverá ficar assim:

cflags-$(CONFIG_X86_GENERIC += $(call tune,sandybridge,$(call tune,sandybridge))

(coloque o correspondente ao teu processador)

Este arquivo de número 3 é o que otimizará a compilação para o processador da máquina.

A partir daqui, continue se quiser extrair mais, mas preste atenção para alterar os arquivos da forma certa.

Faça com calma, cuidado e divirta-se, se quiser, mas não é necessário. Veja bem, talvez ao entrar em algum arquivo abaixo você não encontre as opções, isso ocorre por causa das distribuições. Recomendo pular essa etapa.
  • /usr/src/Linux-3.10.7/arch/alpha/Makefile;
  • /usr/src/Linux-3.10.7/arch/arm/Makefile;
  • /usr/src/Linux-3.10.7/arch/avr32/Makefile;
  • /usr/src/Linux-3.10.7/arch/frv/Makefile;
  • /usr/src/Linux-3.10.7/arch/m68k/Makefile;
  • /usr/src/Linux-3.10.7/arch/mips/Makefile;
  • /usr/src/Linux-3.10.7/arch/parisc/Makefile;
  • /usr/src/Linux-3.10.7/arch/powerpc/Makefile;
  • /usr/src/Linux-3.10.7/arch/s390/Makefile;
  • /usr/src/Linux-3.10.7/arch/sparc/Makefile.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação
   3. Configurando e otimizando
   4. Compilando e otimizando
Outros artigos deste autor

Redes de Computadores · IPtables · Endereços IPs - Explicações básicas

Compilando o Squid3

Instalação do PAP (PostgreSL, Apache2 e PHP7) no Debian Jessie

VMD no Debian - Instalação e configuração

Compilação e instalação do Vim e habilitando a copiar e colar com o mouse

Leitura recomendada

Compilando o Kernel do OpenBSD 4.3 (GENERIC)

Compilando Kernel do Linux no Debian

Compilando ou atualizando um kernel Linux

Como instalar o bootsplash no Debian 3.1 Sarge a partir do zero

Atualizando o kernel no Slackware

  
Comentários
[1] Comentário enviado por lucasjosef23 em 01/10/2021 - 12:50h

Vou adaptar ao manual, que eu estou escrevendo, para o Slackware, gostei bastante Parabéns.

[2] Comentário enviado por cizordj em 01/10/2021 - 12:58h

"Leia todo o artigo antes de sair executando comandos"

e eu aqui já digitando uname -r

[3] Comentário enviado por nixus100 em 01/10/2021 - 15:04h


a

[4] Comentário enviado por nixus100 em 01/10/2021 - 15:04h


[3] Comentário enviado por nixus100 em 01/10/2021 - 15:04h


a



[5] Comentário enviado por sacioz em 01/10/2021 - 19:55h

Gostei muito...favoritado e lido relido...))

[6] Comentário enviado por mauricio123 em 02/10/2021 - 09:02h


Muito bom, vou fazer os testes para o Slackware também.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[7] Comentário enviado por Freud_Tux em 07/10/2021 - 23:05h

Dica favoritada com sucesso.

Valeus Buck ;)

-------------------------------------------------------------------------------------------------------------------------------------------------
"[...]Sou muito noob ainda usando o terminal, então preciso de ajuda "mastigada", pra operá-lo.
"Sou velho e meus dentes desgastados. Estude linux www.guiafoca.org";

" Ignorance is bliss, for learning is the highest joy. - High Elf Archer

[8] Comentário enviado por Buckminster em 09/10/2021 - 01:21h


[1] Comentário enviado por lucasjosef23 em 01/10/2021 - 12:50h

Vou adaptar ao manual, que eu estou escrevendo, para o Slackware, gostei bastante Parabéns.


Obrigado.

[9] Comentário enviado por Buckminster em 09/10/2021 - 01:22h


[5] Comentário enviado por sacioz em 01/10/2021 - 19:55h

Gostei muito...favoritado e lido relido...))



Obrigado.

[10] Comentário enviado por Buckminster em 09/10/2021 - 01:22h


[7] Comentário enviado por Freud_Tux em 07/10/2021 - 23:05h

Dica favoritada com sucesso.

Valeus Buck ;)

-------------------------------------------------------------------------------------------------------------------------------------------------
"[...]Sou muito noob ainda usando o terminal, então preciso de ajuda "mastigada", pra operá-lo.
"Sou velho e meus dentes desgastados. Estude linux www.guiafoca.org";

" Ignorance is bliss, for learning is the highest joy. - High Elf Archer


Estamos aí.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts