201504010 IMX257 USB鼠标驱动程序编写

2015-04-10 Lover雪儿

USB驱动程序包括为USB总线驱动程序以及USB设备驱动程序.

USB总线驱动程序的功能是:

    1.识别

    2.找到匹配的设备驱动程序

    3.提供USB读写函数(不知道数据的含义)

USB设备驱动程序功能是: 分析USB的数据,上报相应的事件

 

今天,我们来实现一个USB鼠标的设备驱动程序,让鼠标的左键模拟为键盘的L键,鼠标的右键模拟为键盘的S键,鼠标的中键模拟为键盘的ENTER键,接下来我们先来实现一个简单程序,让操作系统找到USB鼠标.

 

一.简单的USB鼠标设备驱动程序

1.分配/注册一个USB结构体usb_driver

201504010 IMX257 USB鼠标驱动程序编写

 

 

 

 

 

如图所示,定义一个usb_driver结构体,里面分别有三个函数:

usb_mouse_key_probe usb鼠标探测函数

usb_mouse_key_disconnect  usb鼠标移出函数

usb_mouse_key_id_table    里面包含了usb鼠标的协议等信息

201504010 IMX257 USB鼠标驱动程序编写

 

 

 

 

 

 

 

 

 

 

接下来分别实现上面的三个函数:

如图所示:我们现在先不做什么复杂的操作,知识简单的让它打印信息.

 

2.注册一个USB结构体usb_driver

201504010 IMX257 USB鼠标驱动程序编写

 

 

 

 

 

 

 

 

 

3.调试:

make menuconfig去除自带的鼠标驱动程序:

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

--> Device Drivers

--> HID Device

<>USB Human Interface Device(full HID) support

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

3. insmod usb_mouse_key.ko

4. 在开发板上接入和拔除USB设备

 

插入鼠标:打印出found usbmouse!

201504010 IMX257 USB鼠标驱动程序编写

 

 

 

 

 

拔出鼠标:打印出disconnect usbmouse!

201504010 IMX257 USB鼠标驱动程序编写

 

 

 

附上驱动程序1如下:

 1 /*drivers/hid/usbhid/usbmouse.c
 2  */
 3 #include <linux/kernel.h>
 4 #include <linux/slab.h>
 5 #include <linux/module.h>
 6 #include <linux/init.h>
 7 #include <linux/usb/input.h>
 8 #include <linux/hid.h>
 9 
10 static struct usb_device_id usb_mouse_key_id_table [] = {
11     { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID      /*usb接口描述符的类为HID*/
12             , USB_INTERFACE_SUBCLASS_BOOT,            /*子类为BOOT*/
13         USB_INTERFACE_PROTOCOL_MOUSE) },             /*协议为MOUSE*/
14     /*{USB_DEVICE(vend,prod)} //若要自定义驱动支持某一款usb,在此处填充 */    
15     { }    /* Terminating entry */
16 };
17 
18 static int usb_mouse_key_probe(struct usb_interface *intf, const struct usb_device_id *id)
19 {
20     printk("<0>found usbmouse !\n");
21 
22     return 0;
23 }
24 
25 static void usb_mouse_key_disconnect(struct usb_interface *intf)
26 {
27     printk("<0>disconnect usbmouse !\n");
28 }
29 
30 
31 //1. 分配/设置/注册一个USB结构体usb_driver
32 static struct usb_driver usb_mouse_key_driver = {
33     .name        = "usb_mouse_key",
34     .probe        = usb_mouse_key_probe,
35     .disconnect    = usb_mouse_key_disconnect,
36     .id_table    = usb_mouse_key_id_table,
37 };
38 
39 static int usb_mouse_key_init(void){
40 
41 
42     /*2.注册USB结构体*/
43     usb_register(&usb_mouse_key_driver);
44 
45     return 0;
46 }
47 
48 static void usb_mouse_key_exit(void){
49 
50     //卸载USB结构体
51     usb_deregister(&usb_mouse_key_driver);
52 }
53 
54 module_init(usb_mouse_key_init);
55 module_exit(usb_mouse_key_exit);
56 
57 MODULE_LICENSE("GPL");
58 
59 
60 /*
61 测试:
62 1. make menuconfig 去掉原来鼠标的驱动程序
63     --> Device Drivers
64         --> HID Device
65         <>USB Human Interface Device(full HID) support
66 2. make uImage 使用新的内核启动
67 3. insmod usb_mouse_key.ko
68 4. 在开发板上接入和拔除USB设备
69 
70 */
usb_mouse_key_1.c

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
  • 2022-02-07
  • 2022-02-07
  • 2022-02-07
  • 2021-12-24
猜你喜欢
  • 2022-02-07
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2021-08-02
相关资源
相似解决方案