Gerenciar Módulos do Kernel no Linux

CompTIABeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá as técnicas fundamentais para gerenciar módulos do kernel em um ambiente Linux. Você explorará como listar os módulos carregados no momento para visualizar os componentes ativos do sistema e inspecionar módulos individuais para entender seus detalhes, como finalidade, dependências e outros parâmetros.

Com base nessas habilidades de inspeção, você praticará o descarregamento e o carregamento dinâmico de módulos do kernel em execução. Por fim, você aprenderá como configurar o sistema para carregar um módulo específico do kernel automaticamente durante a inicialização, garantindo que funcionalidades essenciais estejam disponíveis sem a necessidade de intervenção manual após um reinício.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 95%. Ele recebeu uma taxa de avaliação positiva de 100% dos alunos.

Listar e Inspecionar Módulos do Kernel com lsmod e modinfo

Nesta etapa, você aprenderá como listar os módulos do kernel carregados atualmente e inspecionar seus detalhes. O kernel do Linux é modular, o que significa que partes de sua funcionalidade podem ser carregadas ou descarregadas sob demanda. Essas partes carregáveis dinamicamente são chamadas de módulos do kernel e geralmente correspondem a drivers de dispositivos, drivers de sistemas de arquivos ou chamadas de sistema.

Primeiro, vamos visualizar o status de todos os módulos do kernel carregados no momento no kernel do seu sistema. O comando lsmod fornece uma lista limpa e legível. Como a lista pode ser bastante longa, enviaremos sua saída para o utilitário less para facilitar a navegação.

Execute o seguinte comando no seu terminal:

lsmod | less

Você verá uma lista de módulos. A saída é organizada em três colunas: Module, Size e Used by.

  • Module: O nome do módulo do kernel.
  • Size: O tamanho do módulo em bytes.
  • Used by: O número de outros módulos ou processos que utilizam este módulo no momento, seguido por uma lista dos módulos dependentes.

Sua saída será semelhante a esta:

Module                  Size  Used by
nls_iso8859_1          16384  1
nls_cp437              20480  1
vfat                   20480  1
fat                    69632  1 vfat
...

Você pode percorrer a lista usando as teclas de seta. Pressione q para sair do visualizador less e retornar ao prompt de comando.

Agora que você sabe como listar módulos, vamos obter informações detalhadas sobre um específico. O comando modinfo exibe vários detalhes sobre um módulo do kernel, como o nome do arquivo, licença, descrição, autor e dependências.

Vamos inspecionar o módulo parport, que está relacionado à porta paralela.

modinfo parport

O comando exibirá informações detalhadas sobre o módulo parport.

filename:       /lib/modules/x.x.x-xx-generic/kernel/drivers/parport/parport.ko
license:        GPL
description:    Parallel port driver
author:         Philip Blundell, Tim Waugh, Grant Grundler
srcversion:     <some_version_string>
depends:
retpoline:      Y
intree:         Y
vermagic:       x.x.x-xx-generic SMP mod_unload
sig_id:         ...
signer:         ...
sig_key:        ...
sig_hashalgo:   ...
signature:      ...

Esta saída informa a localização exata do arquivo do módulo (arquivo .ko), sua licença, uma breve descrição e muito mais. Observe que o campo depends está vazio, indicando que este módulo não possui dependências.

Muitas vezes, os módulos dependem de outros módulos. O comando depmod cria uma lista de dependências de módulos analisando os módulos em /lib/modules/$(uname -r). Isso permite que o sistema carregue automaticamente os módulos necessários. Vamos gerar este arquivo de dependência. Este comando requer privilégios de root, por isso usaremos sudo.

sudo depmod

Este comando normalmente não produz saída ao ser concluído com sucesso. Ele cria ou atualiza um arquivo chamado modules.dep no diretório de módulos do kernel. A parte $(uname -r) do caminho é uma substituição de comando que insere a versão atual do seu kernel.

Agora, vamos visualizar o arquivo de dependência que você acabou de criar.

less /lib/modules/$(uname -r)/modules.dep

Este arquivo contém uma lista de módulos e suas dependências, que é usada por ferramentas que gerenciam módulos automaticamente. Você pode pressionar q para sair do less.

Descarregar um Módulo do Kernel com rmmod

Nesta etapa, você aprenderá como descarregar um módulo do kernel em execução usando o comando rmmod. Descarregar módulos pode ser útil para solucionar problemas de hardware, liberar memória do sistema ou quando um módulo não é mais necessário. É importante notar que você só pode descarregar módulos que não estejam sendo usados pelo sistema ou por outros módulos.

Vamos continuar com o módulo joydev, que fornece suporte para joystick. Primeiro, vamos verificar se este módulo está carregado. Podemos usar lsmod combinado com grep para filtrar a saída.

lsmod | grep joydev

Se o módulo estiver carregado, você verá uma saída semelhante a esta. O tamanho exato pode variar.

joydev                 24576  0

O 0 na coluna Used by indica que o módulo está carregado, mas não está sendo usado por nenhum processo ou outro módulo no momento. Isso o torna um candidato seguro para remoção. Se esse número fosse maior que zero, o rmmod provavelmente falharia, impedindo que você descarregasse um módulo do qual o sistema depende.

Agora, vamos remover o módulo joydev. Como esta ação modifica o kernel em execução, ela requer privilégios de root, que obteremos usando sudo.

sudo rmmod joydev

O comando rmmod geralmente não produz nenhuma saída se for bem-sucedido. Para confirmar que o módulo foi descarregado com sucesso, podemos executar o mesmo comando lsmod | grep joydev novamente.

lsmod | grep joydev

Desta vez, o comando não deve produzir nenhuma saída. Esse silêncio é a sua confirmação de que o módulo joydev não está mais carregado no kernel.

Carregar um Módulo do Kernel com insmod

Nesta etapa, você aprenderá como carregar manualmente um módulo no kernel em execução usando o comando insmod. Este é o equivalente ao rmmod. Embora os sistemas modernos usem frequentemente uma ferramenta mais avançada chamada modprobe, que lida automaticamente com as dependências, entender o insmod é fundamental para aprender como os módulos do kernel funcionam.

Na etapa anterior, você descarregou o módulo joydev. Agora, vamos carregá-lo novamente. O comando insmod exige que você forneça o caminho completo para o arquivo de objeto do módulo, que possui a extensão .ko (Kernel Object).

O diretório padrão para módulos do kernel é /lib/modules/$(uname -r)/kernel/, onde $(uname -r) expande para a versão atual do seu kernel. O módulo joydev normalmente está localizado no subdiretório drivers/input/.

Vamos carregar o módulo joydev usando seu caminho completo. Esta operação requer privilégios de root.

sudo insmod /lib/modules/$(uname -r)/kernel/drivers/input/joydev.ko

Assim como o rmmod, o insmod não produzirá nenhuma saída se for bem-sucedido.

Para confirmar que o módulo foi carregado, você pode usar o comando lsmod | grep joydev novamente.

lsmod | grep joydev

Após executar o comando, você deverá ver o módulo joydev listado na saída, confirmando que ele foi carregado com sucesso de volta ao kernel.

joydev                 24576  0

Configurar um Módulo do Kernel para Carregar Automaticamente na Inicialização

Nesta etapa, você aprenderá como garantir que um módulo do kernel seja carregado automaticamente toda vez que o sistema for iniciado. O carregamento manual de módulos com insmod é temporário e não persiste após uma reinicialização. Para tornar a alteração permanente, você precisa configurar seu sistema para carregar o módulo durante o processo de boot.

Em sistemas Linux modernos que utilizam o systemd, a maneira padrão de carregar módulos do kernel automaticamente na inicialização é adicionando um arquivo de configuração ao diretório /etc/modules-load.d/. Qualquer arquivo neste diretório com a extensão .conf será lido, e o sistema tentará carregar cada módulo listado dentro dele, um por linha.

Vamos configurar o módulo joydev para carregar automaticamente. Criaremos um arquivo chamado joydev.conf dentro de /etc/modules-load.d/ e adicionaremos a palavra joydev a ele. Podemos fazer isso em um único comando usando echo e tee com sudo.

echo joydev | sudo tee /etc/modules-load.d/joydev.conf

Este comando funciona da seguinte forma:

  • echo joydev imprime o texto 'joydev'.
  • O pipe | envia este texto como entrada para o próximo comando.
  • sudo tee /etc/modules-load.d/joydev.conf recebe o texto. O comando tee grava a entrada que recebe no arquivo especificado (/etc/modules-load.d/joydev.conf) e também a exibe na tela. Usamos sudo porque este diretório é protegido e requer privilégios de root para gravação.

Você deverá ver a seguinte saída, que é o conteúdo sendo gravado no arquivo:

joydev

Para confirmar que o arquivo foi criado corretamente, você pode exibir seu conteúdo usando o comando cat:

cat /etc/modules-load.d/joydev.conf

A saída deve ser o nome do módulo que você acabou de adicionar:

joydev

Agora, toda vez que o sistema for iniciado, ele carregará automaticamente o módulo joydev. Você configurou com sucesso um carregamento de módulo persistente.

Resumo

Neste laboratório, você aprendeu as operações fundamentais para gerenciar módulos do kernel em um ambiente Linux. Você praticou a listagem de todos os módulos carregados no momento usando o comando lsmod e a inspeção de informações detalhadas sobre um módulo específico, como seu nome de arquivo e descrição, com o comando modinfo.

Você também ganhou experiência prática na alteração dinâmica do kernel ao descarregar um módulo com rmmod e carregar um com insmod. Por fim, aprendeu como configurar um módulo para carregar automaticamente na inicialização, garantindo que os drivers ou funcionalidades necessários estejam disponíveis após um reinício do sistema. Essas habilidades são essenciais para gerenciar drivers de dispositivos e recursos do kernel de forma eficaz.