微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > USB设备驱动程序

USB设备驱动程序

时间:11-21 来源:互联网 点击:

sd 1:0:0:0: [sda] Attached SCSI removable disk

在内核目录下搜:

grep "USB device using" * -nR

drivers/usb/core/hub.c:2186: "%s %s speed %sUSB device using %s and address %d\n",

hub_irq

kick_khubd

hub_thread

hub_events

hub_port_connect_change

udev = usb_alloc_dev(hdev, hdev->bus, port1);

dev->dev.bus = &usb_bus_type;

choose_address(udev); // 给新设备分配编号(地址)

hub_port_init // usb 1-1: new full speed USB device using s3c2410-ohci and address 3

hub_set_address // 把编号(地址)告诉USB设备

usb_get_device_descriptor(udev, 8); // 获取设备描述符

retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);

usb_new_device(udev)

err = usb_get_configuration(udev); // 把所有的描述符都读出来,并解析

usb_parse_configuration

device_add // 把device放入usb_bus_type的dev链表,

// 从usb_bus_type的driver链表里取出usb_driver,

// 把usb_interface和usb_driver的id_table比较

// 如果能匹配,调用usb_driver的probe

怎么写USB设备驱动程序?

1. 分配/设置usb_driver结构体

.id_table

.probe

.disconnect

2. 注册

测试1th/2th:

1. make menuconfig去掉原来的USB鼠标驱动

-> Device Drivers

-> HID Devices

<> USB Human Interface Device (full HID) support

2. make uImage 并使用新的内核启动

3. insmod usbmouse_as_key.ko

4. 在开发板上接入、拔出USB鼠标

测试3th:

1. insmod usbmouse_as_key.ko

2. ls /dev/event*

3. 接上USB鼠标

4. ls /dev/event*

5. 操作鼠标观察数据

测试4th:

1. insmod usbmouse_as_key.ko

2. ls /dev/event*

3. 接上USB鼠标

4. ls /dev/event*

5. cat /dev/tty1 然后按鼠标键

6. hexdump /dev/event0


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top