Este diretório contém a implementação do driver de dispositivo de caractere baseado na seção 5.3.2 do material Técnicas de Programação para Sistemas Embarcados II.
Ele apresenta os conceitos e etapas necessárias para criar um driver de caractere no Linux, registrando o driver, criando a classe e o device node, e implementando funções para controle do dispositivo como open, release, read, write, e ioctl.
meu_driver_char/
│ └── funcionamento_char_driver.png
├── Makefile
├── meu_driver.c
└── meu_driver.h
O driver imprime mensagens no log ao ser carregado e removido. As funções module_init e module_exit são usadas para inicializar e finalizar o módulo, respectivamente.
module_init(meu_driver_init)module_exit(meu_driver_exit)printk(KERN_INFO "...")
O driver é registrado utilizando a função alloc_chrdev_region, e o dispositivo é associado ao driver com um número de major e minor.
Usamos a função class_create para criar uma classe no sysfs, e a função class_destroy para removê-la durante a finalização.
A função device_create cria o device node no diretório /dev, e o driver mapeia as funções de leitura e escrita para operações específicas do dispositivo.
Usando a variável global is_open, controlamos se o dispositivo está aberto ou não. Isso é feito nas funções my_open e my_close associadas aos métodos do Virtual File System (VFS):
openreleasereadwriteioctl
Dentro da pasta meu_driver_char/ 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/syslogmy_open()my_close()
my_read()my_write()
my_ioctl()
Após a compilação e carregamento do módulo, os comandos abaixo podem ser utilizados para verificar o funcionamento do driver de dispositivo de caractere.
make
sudo insmod meu_driver.ko
ls /dev | grep meu_driver
echo "teste" > /dev/meu_driver
cat /dev/meu_driver
dmesg -w- O comando
ls /dev | grep meu_driververifica a criação do device node. - O comando
echorealiza uma escrita no dispositivo. - O comando
catrealiza a leitura do dispositivo. - O comando
dmesg -wpermite acompanhar as mensagens do driver no log do kernel.
A imagem abaixo demonstra o funcionamento do driver de dispositivo de caractere,
incluindo a criação do device node em /dev, operações de leitura e escrita
e as mensagens registradas no log do kernel.
-
LDD3 — Linux Device Drivers
https://lwn.net/Kernel/LDD3/ -
Sysplay Linux Drivers Book
https://sysplay.github.io/books/LinuxDrivers/book/ -
Sysplay Drivers Documentation
https://sysplay.in/index.php?pagefile=linux_drivers
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.
