Este diretório contém o módulo básico de kernel desenvolvido na seção 5.3.1 do material Técnicas de Programação para Sistemas Embarcados II.
Ele apresenta três conceitos essenciais:
- Criação de um módulo simples de kernel
- Uso de timers periódicos no kernel
- Acesso direto ao hardware (RTC via portas CMOS)
meu_driver/
├── images/
│ └── funcionamento_timer_rtc.png
├── Makefile
├── meu_driver.c
└── meu_driver.h
O módulo imprime mensagens no log ao ser carregado e removido usando:
module_init(meu_driver_init)module_exit(meu_driver_exit)printk(KERN_INFO "...")
O módulo cria um timer usando:
timer_setupmod_timerdel_timer
A função timer_callback() é chamada periodicamente e:
- imprime um contador
- agenda o próximo evento usando
jiffies + msecs_to_jiffies(MY_TIMEOUT)
O driver lê o horário do RTC via portas CMOS:
- Registro selecionado pela porta
0x70 - Dado lido na porta
0x71
Definições no meu_driver.h:
#define CMOS_ADDRESS_PORT 0x70
#define CMOS_DATA_PORT 0x71O módulo utiliza:
inb()→ leituraoutb()→ escrita
Essas funções pertencem ao cabeçalho <asm/io.h>.
A função ler_rtc() obtém hora, minuto e segundo diretamente da CMOS e o timer exibe o horário no log.
Dentro da pasta meu_driver/ execute:
makeIsso gera o arquivo:
meu_driver.kosudo insmod meu_driver.koVerifique as mensagens:
dmesg -wsudo rmmod meu_driverPara acompanhar as mensagens do driver:
dmesg -wOu:
tail -f /var/log/syslogA imagem abaixo mostra o funcionamento do módulo após a compilação e carregamento, com a execução periódica do timer e a leitura do horário do RTC exibidas no log do kernel.
Este módulo foi desenvolvido e testado em uma máquina virtual Linux, garantindo um ambiente seguro para compilação e carregamento de módulos de kernel.
