A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

[ Linux ] USB Device Drivers Por: Augusto Farina.

Apresentações semelhantes


Apresentação em tema: "[ Linux ] USB Device Drivers Por: Augusto Farina."— Transcrição da apresentação:

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 #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 0x0403 /* Vendor Id */ #define FTDI_PID 0x6001 /* 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 !


Carregar ppt "[ Linux ] USB Device Drivers Por: Augusto Farina."

Apresentações semelhantes


Anúncios Google