Portal do Governo Brasileiro

módulos

Definição

O kernel do Linux é do tipo monolítico. Isto significa que o kernel corresponde a um único arquivo executável binário. Para alterar o kernel é preciso recompilá-lo.

Na inicialização do sistema, somente um kernel residente mínimo é carregado na memória. Quando uma funcionalidade que não está presente no kernel é solicitada, um módulo do kernel é dinamicamente carregado para atender a esta necessidade. Este módulo passa a fazer parte do kernel, embora não seja parte do executável do kernel.

Portanto, é possível inicializar o sistema com um kernel qualquer e adicionar os módulos necessários sem precisar reinicializar o sistema.

Caracteríticas

Os módulos

Módulo "alomundo"

Abaixo, é apresentado o código do arquivo alomundo.c.

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int alo_inicio(void) {
    printk("Alo, Mundo!\n");
    return 0;
}

static void alo_fim(void) {
    printk("Adeus, Mundo Cruel!\n");
}

module_init(alo_inicio);
module_exit(alo_fim);

Inicialmente é incluido o cabeçalho module.h que possui as definições necessárias para a compilação de módulos.

Makefile

Para compilar e gerar o arquivo .ko do módulo, crie o arquivo Makefile.

obj-m := alomundo.o

all:
       make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
       make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

No arquivo

O Makefile tem dois alvos (targets): Veja o comando make para saber mais sobre o funcionamento do arquivo Makefile.

Carregando o módulo

Para carregar o módulo sem verificar erros, use o comando insmod.

sudo insmod alomundo.ko
Para carregar o módulo apenas se não houver erros de dependência, use o comando modprobe
sudo modprobe -a ./alomundo.ko

Verificando os módulos

Para ver quais módulos estão carregados, use o comando lsmod

lsmod
ou verifique o conteúdo do arquivo modules do diretório /proc.
less /proc/modules

Informações do módulo

Para ver as informações do módulo use o comando modinfo.

modinfo alomundo.ko
Abaixo, é mostrada uma possível saída do comando.
filename: /home/aluno/estacao/guia/libc/testes/alomundo.ko
license: Dual BSD/GPL
srcversion: 02E21C2D4758A60BBD6B6D9
depends:
vermagic: 3.18.1-031801-generic SMP mod_unload modversions

Dependências

Para verificar as dependências dos módulos use o comando depmod.

sudo depmod
Este comando grava o arquivo modules.dep no diretório /lib/modules/<versão do Linux> com as dependências de todos os módulos.

Removendo o módulo

Para remover o módulo, use o comando rmmod.

sudo rmmod alomundo

Também é possível usar o comando modprobe. Mas, neste caso, o comando só funciona se o módulo estiver armazenado em /lib/modules.

sudo modprobe -r alomundo

Log do sistema

Para ver as mensagens do módulo no log do sistema, use o comando dmesg

dmesg
Abaixo é mostrado o log produzido pelo carregamento e pela remoção do módulo alomundo.ko. Por padrão, no início dos registros é colocado o timestamp do kernel, ou seja, a quantidade de segundos após a inicialização do sistema.
[ 3693.344434] Alo, Mundo!
[ 3900.333562] Adeus, Mundo Cruel!

Outra forma para verificar as mensagens do log é olhar o arquivo syslog.
less /var/log/syslog
Jan 9 17:43:36 Aluno kernel: [ 3693.344434] Alo, Mundo!
Jan 9 17:47:03 Aluno kernel: [ 3900.333562] Adeus, Mundo Cruel!

Observações

 

  Topo   |   Guia   |   Home