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.
Os módulos
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.
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
make allComo este é o padrão, pode-se digitar apenas
make
make clean
Para carregar o módulo sem verificar erros, use o comando insmod.
sudo insmod alomundo.koPara carregar o módulo apenas se não houver erros de dependência, use o comando modprobe
sudo modprobe -a ./alomundo.ko
Para ver quais módulos estão carregados, use o comando lsmod
lsmodou verifique o conteúdo do arquivo modules do diretório /proc.
less /proc/modules
Para ver as informações do módulo use o comando modinfo.
modinfo alomundo.koAbaixo, é 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
Para verificar as dependências dos módulos use o comando depmod.
sudo depmodEste comando grava o arquivo modules.dep no diretório /lib/modules/<versão do Linux> com as dependências de todos os módulos.
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
Para ver as mensagens do módulo no log do sistema, use o comando dmesg
dmesgAbaixo é 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!Outra forma para verificar as mensagens do log é olhar o arquivo syslog.
[ 3900.333562] Adeus, Mundo Cruel!
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!
Topo | | | Guia | | | Home |