Portuguese (Brazilian)

Requisitos mínimos para compilar o Kernel

Introdução

Este documento foi projetado para fornecer uma lista das versões mínimas de software necessárias para executar a versão atual do kernel.

Este documento é originalmente baseado no meu arquivo ‘Changes’ para os kernels 2.0.x e portanto, deve créditos às mesmas pessoas que aquele arquivo (Jared Mauch, Axel Boldt, Alessandro Sigala e inúmeros outros usuários em toda a rede).

Requisitos Mínimos Atuais

Atualize para pelo menos estas revisões de software antes de pensar que encontrou um bug! Se não tiver certeza de qual versão está executando atualmente , o comando sugerido deve lhe informar. Para uma lista dos programas em seu sistema, incluindo as versões, execute ./scripts/ver_linux.

Novamente, tenha em mente que esta lista pressupõe que você já possui um kernel Linux em execução funcional. Além disso, nem todas as ferramentas são necessárias em todos os sistemas; obviamente, se você não possui nenhum hardware PC Card por exemplo, provavelmente não precisará se preocupar com o pcmciautils.

Programa

Versão mínima

Comando para verificar a versão

GNU C

8.1

gcc --version

Clang/LLVM (optional)

17.0.1

clang --version

Rust (optional)

1.85.0

rustc --version

bindgen (optional)

0.71.1

bindgen --version

GNU make

4.0

make --version

bash

4.2

bash --version

binutils

2.30

ld -v

flex

2.5.35

flex --version

gdb

7.2

gdb --version

bison

2.0

bison --version

pahole

1.22

pahole --version

util-linux

2.10o

mount --version

kmod

13

kmod -V

e2fsprogs

1.41.4

e2fsck -V

jfsutils

1.1.3

fsck.jfs -V

xfsprogs

2.6.0

xfs_db -V

squashfs-tools

4.0

mksquashfs -version

btrfs-progs

0.18

btrfs --version

pcmciautils

004

pccardctl -V

quota-tools

3.09

quota -V

PPP

2.4.0

pppd --version

nfs-utils

1.0.5

showmount --version

procps

3.2.0

ps --version

udev

081

udevadm --version

grub

0.93

grub --version || grub-install --version

mcelog

0.6

mcelog --version

iptables

1.4.2

iptables -V

openssl & libcrypto

1.0.0

openssl version

bc

1.06.95

bc --version

Sphinx [1]

3.4.3

sphinx-build --version

GNU tar

1.28

tar --version

gtags (opcional)

6.6.5

gtags --version

mkimage (opcional)

2017.01

mkimage --version

Python

3.9.x

python3 --version

GNU AWK (opcional)

5.1.0

gawk --version

Compilação do Kernel

GCC

Os requisitos da versão do gcc podem variar dependendo do tipo de CPU do seu computador.

Clang/LLVM (opcional)

A versão formal mais recente do clang e dos utilitários LLVM (de acordo com releases.llvm.org) é suportada para a compilação de kernels. Versões anteriores não têm funcionamento garantido, e poderemos remover do kernel soluções de contorno (workarounds) que eram utilizadas para suportar versões mais antigas. Por favor, veja a documentação adicional em Building Linux with Clang/LLVM.

Rust (opcional)

É necessária uma versão recente do compilador Rust.

Por favor, consulte Quick Start para obter instruções sobre como atender aos requisitos de compilação do suporte a Rust. Em particular, o alvo (target) rustavailable do Makefile é útil para verificar por que a cadeia de ferramentas (toolchain) Rust pode não estar sendo detectada.

bindgen (opcional)

O bindgen é utilizado para gerar os vínculos (bindings) Rust para o lado C do kernel. Ele depende da libclang.

Make

Você precisará do GNU make 4.0 ou superior para compilar o kernel.

Bash

Alguns scripts bash são usados para a compilação do kernel. É necessário o Bash 4.2 ou mais recente.

Binutils

O binutils 2.30 ou mais recente é necessário para compilar o kernel.

pkg-config

O sistema de compilação, a partir da versão 4.18, requer o pkg-config para verificar as ferramentas kconfig instaladas e para determinar as configurações de flags para uso em ‘make {g,x}config’. Anteriormente, o pkg-config já era utilizado, mas não era verificado nem documentado.

Flex

Desde o Linux 4.16, o sistema de compilação gera analisadores léxicos durante a compilação. Isso requer o flex 2.5.35 ou superior.

Bison

Desde o Linux 4.16, o sistema de compilação gera analisadores sintáticos durante a compilação. Isso requer o bison 2.0 ou superior

pahole

Desde o Linux 5.2, se CONFIG_DEBUG_INFO_BTF estiver selecionado, o sistema de compilação gera BTF (BPF Type Format) a partir do DWARF no vmlinux, e um pouco depois para os módulos do kernel também. Isso requer o pahole v1.22 ou superior.

Ele pode ser encontrado nos pacotes dwarves ou pahole das distribuições, ou em https://fedorapeople.org/~acme/dwarves/.

Perl

Você precisará do perl 5 e dos seguintes módulos: Getopt::Long, Getopt::Std, File::Basename e File::Find para compilar o kernel.

Python

Várias opções de configuração o exigem: ele é necessário para as configurações padrão (defconfigs) de arm/arm64, CONFIG_LTO_CLANG, algumas configurações opcionais de DRM, a ferramenta kernel-doc e a geração da documentação (Sphinx), entre outros.

BC

Você precisará do bc para compilar kernels 3.10 ou superior.

OpenSSL

A assinatura de módulos e a manipulação de certificados externos utilizam o programa OpenSSL e a biblioteca de criptografia para realizar a criação de chaves e a geração de assinaturas.

Você precisará do openssl para compilar kernels 3.7 e superiores se a assinatura de módulos estiver habilitada. Você também precisará dos pacotes de desenvolvimento do openssl para compilar kernels 4.3 e superiores.

Tar

O GNU tar é necessário caso você deseje habilitar o acesso aos cabeçalhos do kernel via sysfs (CONFIG_IKHEADERS).

gtags / GNU GLOBAL (optional)

A compilação do kernel requer o GNU GLOBAL versão 6.6.5 ou superior para gerar arquivos de tags através de make gtags. Isso se deve ao uso da flag -C (--directory) pelo gtags.

mkimage

Esta ferramenta é utilizada ao gerar uma Flat Image Tree (FIT), comumente usada em plataformas ARM. A ferramenta está disponível através do pacote u-boot-tools ou pode ser compilada a partir do código-fonte do U-Boot. Veja as instruções em https://docs.u-boot.org/en/latest/build/tools.html#building-tools-for-linux

GNU AWK

O GNU AWK é necessário caso você deseje que a compilação do kernel gere dados de intervalo de endereços para módulos integrados (CONFIG_BUILTIN_MODULE_RANGES).

Utilitários de sistema

Mudanças de arquitetura

O DevFS tornou-se obsoleto em favor do udev (https://www.kernel.org/pub/linux/utils/kernel/hotplug/)

O suporte a UIDs de 32 bits já está implementado. Divirta-se!

A documentação das funções do Linux está migrando para a documentação embutida (inline), por meio de comentários com formatação especial próximos às suas definições no código-fonte. Esses comentários podem ser combinados com arquivos ReST no diretório Documentation/ para criar uma documentação enriquecida, que pode então ser convertida para arquivos PostScript, HTML, LaTeX, ePUB e PDF. Para converter do formato ReST para o formato de sua escolha, você precisará do Sphinx.

Util-linux

Novas versões do util-linux oferecem suporte no fdisk para discos maiores, suporte a novas opções para o mount, reconhecimento de mais tipos de partição e outras funcionalidades interessantes. Você provavelmente vai querer atualizar.

Ksymoops

Se o impensável acontecer e o seu kernel sofrer um oops, você pode precisar da ferramenta ksymoops para decodificá-lo, mas na maioria dos casos, não será necessário. É geralmente preferível compilar o kernel com CONFIG_KALLSYMS para que ele produza dumps legíveis que possam ser usados no estado em que se encontram (isso também gera uma saída melhor do que a do ksymoops). Se por algum motivo o seu kernel não for compilado com CONFIG_KALLSYMS e você não tiver como recompilar e reproduzir o oops com essa opção, você ainda poderá decodificá-lo com o ksymoops.

Mkinitrd

Estas mudanças no layout da árvore de arquivos /lib/modules também exigem que o mkinitrd seja atualizado.

E2fsprogs

A versão mais recente do e2fsprogs corrige diversos bugs no fsck e no debugfs. Obviamente, é uma boa ideia atualizar.

JFSutils

O pacote jfsutils contém os utilitários para o sistema de arquivos. Os seguintes utilitários estão disponíveis:

  • fsck.jfs - inicia a reprodução (replay) do log de transações, além de verificar e reparar uma partição formatada em JFS.

  • mkfs.jfs - cria uma partição formatada em JFS.

Outros utilitários de sistema de arquivos também estão disponíveis neste pacote.

Xfsprogs

A versão mais recente do xfsprogs contém os utilitários mkfs.xfs, xfs_db e xfs_repair, entre outros, para o sistema de arquivos XFS. Ele é independente de arquitetura e qualquer versão a partir da 2.0.0 deve funcionar corretamente com esta versão do código do kernel XFS (recomenda-se a versão 2.6.0 ou posterior, devido a algumas melhorias significativas).

PCMCIAutils

O PCMCIAutils substitui o pcmcia-cs. Ele configura corretamente os sockets PCMCIA na inicialização do sistema e carrega os módulos apropriados para dispositivos PCMCIA de 16 bits, caso o kernel esteja modularizado e o subsistema de hotplug seja utilizado.

Quota-tools

O suporte a UIDs e GIDs de 32 bits é necessário caso você deseje utilizar o formato de cota versão 2 mais recente. O quota-tools versão 3.07 e superiores possuem esse suporte. Utilize a versão recomendada ou superior da tabela acima.

Intel IA32 microcode

Um driver foi adicionado para permitir a atualização do microcódigo Intel IA32, acessível como um dispositivo de caracteres comum (misc). Se você não estiver usando o udev, você poderá precisar de:

mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode

você poderá precisar executar os comandos acima como root antes de poder usar isso. Você provavelmente também desejará obter o utilitário de espaço de usuário microcode_ctl para utilizar em conjunto com este driver.

udev

O udev é uma aplicação de espaço de usuário para popular o diretório /dev dinamicamente, apenas com entradas para dispositivos de fato presentes no sistema. O udev substitui a funcionalidade básica do devfs, permitindo ao mesmo tempo a nomeação persistente de dispositivos.

FUSE

Necessita do libfuse 2.4.0 ou posterior. O mínimo absoluto é a versão 2.3.0, mas as opções de montagem direct_io e kernel_cache não funcionarão.

Redes

Mudanças gerais

Caso você tenha necessidades avançadas de configuração de rede, você deve provavelmente considerar o uso das ferramentas de rede do iproute2.

Filtro de Pacotes / NAT

O código de filtragem de pacotes e NAT utiliza as mesmas ferramentas da série anterior de kernels 2.4.x (iptables). Ele ainda inclui módulos de retrocompatibilidade para o ipchains (estilo 2.2.x) e o ipfwadm (estilo 2.0.x).

PPP

O driver PPP foi reestruturado para suportar multilink e permitir que opere sobre diversas camadas de mídia. Se você utiliza PPP, atualize o pppd para, no mínimo, a versão 2.4.0.

Se você não estiver usando o udev, você deve possuir o arquivo de dispositivo /dev/ppp, o qual pode ser criado por:

mknod /dev/ppp c 108 0

como root.

NFS-utils

Em kernels antigos (2.4 e anteriores), o servidor NFS precisava conhecer qualquer cliente que pretendesse acessar arquivos via NFS. Essa informação era fornecida ao kernel pelo mountd quando o cliente montava o sistema de arquivos, ou pelo exportfs na inicialização do sistema. O exportfs obtinha informações sobre clientes ativos a partir de /var/lib/nfs/rmtab.

Esta abordagem é bastante frágil, pois depende da integridade do rmtab, o que nem sempre é fácil, particularmente ao tentar implementar fail-over. Mesmo quando o sistema está funcionando bem, o rmtab sofre com o acúmulo de muitas entradas antigas que nunca são removidas.

Com kernels modernos, temos a opção de fazer o kernel informar ao mountd quando recebe uma requisição de um host desconhecido, permitindo que o mountd forneça as informações de exportação apropriadas ao kernel. Isso remove a dependência do rmtab e significa que o kernel só precisa conhecer os clientes ativos no momento.

Para habilitar esta nova funcionalidade, você precisa:

mount -t nfsd nfsd /proc/fs/nfsd

antes de executar o exportfs ou o mountd. Recomenda-se que todos os serviços NFS sejam protegidos da internet em geral por um firewall, sempre que possível.

mcelog

Em kernels x86, o utilitário mcelog é necessário para processar e registrar eventos de machine check quando opção CONFIG_X86_MCE está ativada. Eventos de machine check são erros relatados pela CPU. O processamento desses eventos é fortemente recomendado.

Documentação do Kernel

Sphinx

Por favor, consulte Using Sphinx for kernel documentation para detalhes sobre os requisitos do Sphinx.

rustdoc

O rustdoc é utilizado para gerar a documentação para código Rust. Por favor, consulte General Information para mais informações.

Obtendo software atualizado

Compilação do kernel

gcc

Clang/LLVM

Rust

bindgen

Make

Bash

Binutils

Flex

Bison

OpenSSL

System utilities

Util-linux

Kmod

Ksymoops

Mkinitrd

E2fsprogs

JFSutils

Xfsprogs

Pcmciautils

Quota-tools

Intel P6 microcode

udev

FUSE

mcelog

Redes

PPP

NFS-utils

Iptables

Ip-route2

OProfile

Kernel documentation

Sphinx