Este é o terceiro post de uma série de quatro posts onde estou falando especificamente sobre o kernel. Você pode dar uma olhada nos posts anteriores clicando aqui: Entendendo o Kernel – parte 1 e Modulos do kernel.

Um aspecto importante em sistemas modulares, como é o caso do GNU/Linux, é o gerenciamento dos módulos (Drivers) que fazem o “meio campo” entre o sistema operacional e o hardware. Para o gerenciamento dos módulos no linux existem uma série de ferramentas que veremos abaixo.

O comando lsmod

O comando lsmod lista todos os módulos que estão atualmente carregados na memória, ou seja, estes módulos estão dando suporte a algum dispositivo. Veja abaixo um trecho de exemplo da saída do comando:

Module          Size        Used   by
hci_usb         18460       2
nvidia          8113128     28
i2c_core        27936       1      nvidia
rfkill_input    8576        0

Conforme podemos verificar acima, na saída deste comando temos cinco campos, vejamos abaixo:

Coluna 1: Nome do módulo;

Coluna 2: Tamanho em Kbytes do módulo;

Coluna 3: Indica se existe algum dispositivo utilizando o módulo;

Coluna 4: Indica o número de módulos adicionais que dependem deste módulo (Dependências);

Comando modprobe

O comando modprobe possui uma série de funções úteis no sistema. Trata-se de um comando multi-funcional, pois de acordo com o parâmetro utilizado faz diversas operações.

Comando: modprobe “módulo” (carrega o módulo e suas dependências)

Finardi-HP:~# modprobe b43
  (carrega o módulo da placa broadcom b43xx)

Comando: modprobe -r "módulo" (remove o módulo da memória, caso não esteja em uso)

Finardi-HP:~# modprobe -r b43
  (remove o módulo da placa broadcom b43xx)

Comando: modprobe -t -l "tipo" (lista todos os módulos suportados de um certo tipo de dispositivo)

Finardi-HP:~# modprobe -l -t net
  (lista os módulos de todas as interfaces de rede suportadas na versão do kernel em uso)

Comando modinfo

O comando modinfo permite obter informações variadas dos módulos. Segue abaixo alguns exemplos:

Comando: modinfo -a "modulo" (obtém o nome do autor e responsável pelo módulo)

Finardi-HP:~# modinfo -a b43
Michael Buesch
Stefano Brivio
Martin Langer

Comando: modinfo -p "módulo” (obtém os parâmetros disponíveis para um módulo)

Finardi-HP:~# modinfo -p b43
btcoex:Enable Bluetooth coexistance (default on)
qos:Enable QOS support (default on)
nohwcrypt:Disable hardware encryption.
hwpctl:Enable hardware-side power control (default off)
fwpostfix:Postfix for the .fw files to load.
bad_frames_preempt:enable(1) / disable(0) Bad Frames Preemption

Comando: modinfo -d "módulo" (exibe a descrição do módulo)

Finardi-HP:~# modinfo -d 8139too
RealTek RTL-8139 Fast Ethernet driver
Finardi-HP:~# modinfo -d b43
Broadcom B43 wireless driver

Comando rmmod

O comando rmmod, permite remover um módulo da memória, porém ao contrário do “modprobe“, este comando apenas remove o módulo sem cuidar de suas dependências:

Finardi-HP:~# rmmod 8139too
(remove o módulo da realtek 8139l da memória)

Comando insmod

O comando insmod carrega um módulo na memória, mas ao contrário do modprobe ele somente carrega o módulo, ou seja, não carrega suas dependências.

Finardi-HP:~# insmod 8139too
(carrega o módulo da realtek 8139l na memória)

Comando depmod

Como podemos ver os dois comandos anteriores não verificam as dependências, o comando depmod verifica todas as dependências dos módulos e cria um arquivo chamado “modules.dep“. Este arquivo fica na raiz do diretório dos módulos em “/lib/modules/versão do kernel“. Sempre que adicionamos um novo módulo no kernel, devemos recriar este arquivo com o seguinte comando:

Finardi-HP:/lib/modules/2.6.26-2-amd64# depmod -a

Claro que é recomendável fazer estas operações com o modprobe pelo fato de ser mais simples, mas caso você seja um cara que gosta de comandos espartanos trabalhe com os outros =D. O post ficou um pouco grande mas acho que deu pra passar o básico sobre gerenciamento de módulos.

Vou ficando por aqui, e que a força esteja com vocês! |-)