LPIC-2 tópico 201: Linux Kernel

Cristian Souza
6 min readApr 8, 2023

Continuando os nossos estudos para a certificação LPIC-2, neste artigo iremos abordar o Linux Kernel.

Linux Kernel

Quando falamos em Linux, a maioria das pessoas associa o nome às diferentes distribuições existentes (como Debian, Ubuntu, CentOS, Kali, entre outras). Porém, o Linux é na verdade um Kernel, ou seja, o núcleo do sistema operacional. É o Kernel que efetivamente gerencia o acesso aos recursos do hardware.

Entender o seu funcionamento é importante não só para a prova 201-450, mas também para compreender as bases da operação de sistemas operacionais modernos. Detalhes de arquitetura de computadores e sistemas operacionais podem fazer parte de uma outra postagem, pois aqui iremos nos concentrar nos tópicos da LPIC-2.

Entendendo o versionamento do Kernel

A versão atual do Kernel Linux pode ser obtida oficialmente em https://kernel.org. No momento da escrita deste artigo, a versão atual do Kernel é a 6.2.10.

Vamos entender o motivo de tais números:

6 → Versão.

2 → Release principal.

10 → Patch/release secundária.

Vale notar que o código fonte do Kernel fica localizado em /usr/src/linux. Normalmente esse arquivo é um link simbólico para o diretório que contém o código da versão atual do Kernel.

Imagem do Kernel

A imagem do Kernel fica localizada em /boot/vmlinuz. Esse é o Kernel em formato executável e comprimido utilizando o formato gzip.

Módulos

São arquivos de extensão .ko e servem para estender as funções do Kernel em execução. Estão localizados em /lib/modules.

Compilação do Kernel

A compilação do Kernel pode ser dividida em três etapas: configuração, a compilação propriamente dita e a instalação.

Configuração

Antes de compilar o Kernel, é necessário instalar o pacote build-essential. Após isso, descompacte o arquivo baixado do https://kernel.org em /usr/src e crie um link simbólico para o diretório.

Entre no diretório /usr/src/linux e digite o comando make menuconfig. Ele irá abrir uma tela para que você selecione as configurações da compilação. É comum que erros ocorram e que você tenha que instalar pacotes ausentes. No meu caso, tive que instalar os pacotes libncurses-dev, flex e bison.

Um ponto importante é que as opções marcadas com um “M” indicam que o item será instalado como um módulo do Kernel, enquanto o “*” indica que será um built-in do Kernel.

A configuração realizada fica salva no arquivo .config. Uma variável interessante e que pode ser cobrada na prova é a CONFIG_LOCALVERSION, que indica o nome da sua compilação.

Compilação

Compile a imagem do Kernel com o comando make -j2 bzImage. A opção -j indica que dois processos serão utilizados para a compilação, o que a torna mais rápida.

A imagem do Kernel fica localizada em arch/x86/boot/bzImage. Após a compilação dele, é necessário compilar também os módulos com o comando make -j2 modules.

Instalação

Para efetivamente realizar a instalação do novo Kernel, utilize o comando make modules_install seguido do make install.

O próprio make install se encarrega de executar comandos como o update-initramfs e o update-grub. O primeiro gera o arquivo initrd, que contém a estrutura inicial para carregamento do Kernel durante o processo de boot. Já o segundo atualiza os arquivos do bootloader.

Gerando pacotes

O processo de compilação é bastante demorado, o que o torna bem cansativo de ser feito manualmente em cada máquina da sua rede. Para facilitar esse processo, você pode utilizar o comando make deb-pkg (Debian) ou make rpm-pkg (Red Hat-based) para gerar um pacote instalável do Kernel.

Dessa forma, você pode facilmente o instalar em outras máquinas sem a necessidade de realizar uma nova compilação (similar ao que ocorre quando utilizamos o comando apt upgrade). O arquivo .deb resultante fica localizado em /usr/src.

Limpeza

Uma vez que o processo de compilação e instalação for concluído, você pode realizar uma limpeza com o comando make clean.

A opção clean limpa todos os arquivos compilados. Uma outra opção útil é a mrproper, que também limpa os arquivos de configuração.

Gerenciamento e solução de problemas do Kernel em tempo real

O exame 201-450 aborda alguns comandos para gerenciamento e solução de problemas no Kernel. Entre eles:

uname: apresenta informações sobre o Kernel.

uname -a # todas as informações
uname -s # Kernel name
uname -r # Kernel release
uname -v # versão da compilação

O uname captura tais informações em tempo real por meio de arquivos localizados em /proc/sys/kernel (e.g., version, ostype).

sysctl: este comando é responsável por configurar parâmetros do Kernel em tempo de execução (configurações permanentes podem ser adicionadas no arquivo /etc/sysctl.conf). No exemplo abaixo, estamos bloqueando tráfego ICMP direcionado à nossa máquina.

lspci: lê informações de dispositivos conectados ao barramento PCI. O parâmetro -s apresenta informações de um dispositivo em específico.

lsusb: lista dispositivos conectados ao barramento USB. O parâmetro -d apresenta informações de um dispositivo em específico.

dmesg: exibe informações referentes ao boot e execução do Kernel. As informações são obtidas do Kernel Ring Buffer.

Módulos do sistema

Os módulos do sistema ficam localizados em /lib/modules e separados por diretórios, um para cada versão do Kernel. Entre os comandos para se trabalhar com módulos, estão:

lsmod: lista os módulos carregados no sistema.

modinfo: apresenta informações detalhadas sobre o módulo especificado.

insmod e rmmod: utilizados para carregar ou remover módulos do sistema. Esses comandos precisam do caminho completo do módulo.

modprobe: também utilizado para carregar ou remover (opção -r) módulos do sistema. Entretanto, não precisa do caminho completo do módulo.

udevadm monitor: monitora eventos do udev (processo que gerencia ações relacionadas a dispositivos). As configurações do udev estão localizadas em /etc/udev/udev.conf e suas regras em /etc/udev/rules.d/ ou /lib/udev/rules.d.

Conclusão

Neste artigo abordamos o processo de compilação do Kernel, bem como comandos úteis para visualização de informações, alteração de parâmetros e gerenciamento de dispositivos em tempo real.

--

--