Carregar apresentação
A apresentação está carregando. Por favor, espere
1
[ Linux ] USB Device Drivers
Por: Augusto Farina
2
KIT LAB. PROCESSADORES Processador MSC1213Y4 da Texas, núcleo 8051
Chip FT232R da FTDI – conversor USB para serial UART
3
SUPORTE A USB NO LINUX
4
USB HOST DRIVERS Interagem com o hardware de controle USB
São dependentes da arquitetura e plataforma OHCI, UHCI e EHCI
5
USB CORE DRIVERS Implementam a especificação USB
São independentes da arquitetura do sistema
6
USB DEVICE DRIVERS São drivers para os dispositivos USB
Em geral são específicos para cada equipamento (câmeras, teclados e etc)
7
UDEV É um gerenciador dinâmico de dispositivos para o linux 2.6
Sucessor do devfs e do hotplug Executado inteiramento no espaço de usuário Fica escutando eventos que o kernel envia quando um dispositivo é inserido ou removido do sistema Criação de regras através de arquivo texto
8
REGRAS DO UDEV /etc/udev/rules.d/
ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe –Q $env{MODALIAS}“ MODALIAS: usb:v0403p6001d*dc*dsc*dp*ic*isc*ip* Modprobe procura o MODALIAS fornecido nos módulos do kernel e carrega os que coincidirem # modinfo ftdi_sio.ko ... alias: usb:v0403p6001d*dc*dsc*dp*ic*isc*ip
9
ESTRUTURA DOS DRIVERS Includes importantes Informações sobre o driver
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> #define DRIVER_VERSION "v.0.0.1" #define DRIVER_AUTHOR "Augusto Farina #define DRIVER_DESC "USB Data Aquisition - MSC1213 Board"
10
ESTRUTURA DOS DRIVERS Definição dos IDs, é através deles que o udev saberá qual driver inserir ou remover Podem ser comprados em #define FTDI_VID 0x /* Vendor Id */ #define FTDI_PID 0x /* Product Id */
11
ESTRUTURA DOS DRIVERS Criação da tabela de IDs
As estruturas então são registradas static struct usb_device_id id_table [] = { { USB_DEVICE(FTDI_VID, FTDI_PID) }, { } }; MODULE_DEVICE_TABLE(usb, id_table);
12
ESTRUTURA DOS DRIVERS Registro do driver static int usbdaq_probe() {
info("usbdaq now attached"); } static struct usb_driver usbdaq_driver = { .name = "usbdaq", .probe = usbdaq_probe, .disconnect = usbdaq_disconnect, .id_table = id_table, }; static int __init usbdaq_init() { usb_register(&usbdaq_driver);
13
ESTRUTURA DOS DRIVERS Desregistro do driver
static void usbdaq_disconnect() { info("usbdaq now disconnected"); } static void __exit usbdaq_exit() { usb_deregister(&usbdaq_driver);
14
ESTRUTURA DOS DRIVERS Indicação das funções de início (quando inserido) e fim (quando removido) do driver e registro das informações sobre o mesmo module_init(usbdaq_init); module_exit(usbdaq_exit); MODULE_VERSION(DRIVER_VERSION); MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL")
15
ESTRUTURA DOS DRIVERS Makefile obj-m := usbdaq.o
KDIR := /lib/modules/`uname -r`/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
16
RESULTADO # tail -f /var/log/messages
kernel: usb 3-1: new full speed USB device using ohci_hcd kernel: usb 3-1: configuration #1 chosen from 1 choice kernel: usbdaq now attached kernel: usbcore: registered new interface driver usbdaq kernel: usbdaq now disconnected kernel: usb 3-1: USB disconnect
17
F I M !
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.