博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINUX USB驱动(4)-鼠标驱动实例
阅读量:2434 次
发布时间:2019-05-10

本文共 2591 字,大约阅读时间需要 8 分钟。

1怎么写USB设备驱动程序?

1.1分配/设置USB_driver结构体

.id_table
.probe
.disconnect
1.2.注册

2.实例代码

*参考:\itop4412_kernel_3.0\drivers\hid\usbhid\Usbmouse.c*/#include 
#include
#include
#include
#include
#include
static int len;static char *usb_buf;static struct urb *uk_urb; static dma_addr_t usb_buf_phys;struct input_dev *uk_dev;static struct usb_device_id usbmouse_as_key_id_table [] = { { USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_MOUSE) }, { } /* Terminating entry */};static void usbmouse_as_key_irq(struct urb *urb){ static unsigned char pre_val;#if 0 int i; static int cnt = 0; printk("data cnt %d: ",++cnt); for(i=0;i
cur_altsetting; int pipe; //a.分配一个input_dev uk_dev = input_allocate_device(); //b.设置 //b.1能产生哪类事件 set_bit(EV_KEY,uk_dev->evbit); set_bit(EV_REP,uk_dev->evbit); //b.2能产生哪些事件 set_bit(KEY_L,uk_dev->keybit); set_bit(KEY_S,uk_dev->keybit); set_bit(KEY_ENTER,uk_dev->keybit); //c.注册 input_register_device(uk_dev); //d.硬件相关操作 /*数据传输3要素*/ //源:USB设备的某个端点 endpoint = &interface->endpoint[0].desc; pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); //长度 len=endpoint->wMaxPacketSize; //目的 usb_buf=usb_alloc_coherent(dev,len,GFP_ATOMIC,&usb_buf_phys); /*使用三要素*/ //分配USB请求块 uk_urb=usb_alloc_urb(0,GFP_KERNEL); /*使用3要素设置urb*/ usb_fill_int_urb(uk_urb, dev, pipe, usb_buf,len,usbmouse_as_key_irq, NULL, endpoint->bInterval); uk_urb->transfer_dma = usb_buf_phys; uk_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; /*使用URB*/ usb_submit_urb(uk_urb,GFP_KERNEL); return 0;}static void usbmouse_as_key_disconnect(struct usb_interface *intf){ struct usb_device *dev = interface_to_usbdev(intf); usb_kill_urb(uk_urb); usb_free_urb(uk_urb); usb_free_coherent(dev,len,usb_buf,usb_buf_phys); input_unregister_device(uk_dev); input_free_device(uk_dev);}//分配、设置usb_driver结构体static struct usb_driver usbmouse_as_key_driver = { .name = "usbmouse_as_key", .probe = usbmouse_as_key_probe, .disconnect = usbmouse_as_key_disconnect, .id_table = usbmouse_as_key_id_table,};static int usbmouse_init(){ /*注册*/ usb_register(&usbmouse_as_key_driver); return 0;}static void usbmouse_exit(){usb_deregister(&usbmouse_as_key_driver);}module_init(usbmouse_init);module_exit(usbmouse_exit);MODULE_LICENSE("GPL");

3.测试

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

-> Device Drivers │
-> HID Devices (HID_SUPPORT [=y]) │
<>USB Human interface Device (full HID) support
2.2make zImage并使用新内核启动
2.3insmod usbmouse_as_key.ko
2.4在开发板上接入、拔出USB鼠标
2.2测试3:
2.2.1 insmod usbmouse_as_key.ko
2.2.2接上鼠标
2.2.3查看鼠标数据

转载地址:http://txomb.baihongyu.com/

你可能感兴趣的文章
从Alexa网站排名,看IT门户走势(转)
查看>>
存储管理——深入Oracle 9i核心(转)
查看>>
SQL语言快速入门之三(转)
查看>>
Windows CE 进程、线程和内存管理(二)(转)
查看>>
SQLServer和Oracle的常用函数对比(转)
查看>>
网络密码保护神:江民密保试用手记(转)
查看>>
黑客突破防火墙常用的几种技术(转)
查看>>
如何解决汉字乱码的问题(转)
查看>>
遭遇新公敌 “隐形”rootkit现身(转)
查看>>
Windows Server 2003 安全配置实战演习(转)
查看>>
DMOZ网站选择标准(转)
查看>>
CDMA技术与现代蜂窝移动通信(转)
查看>>
南阳铁通推出宽带“网吧式”服务(转)
查看>>
ORACLE数据库的统计数据及其生成方式(转)
查看>>
[小结]WML元素及其语法格式一览表(2)(转)
查看>>
分析和解决ora-4030错误(转)
查看>>
把HTML表单提交的数据转化成XML文件(转)
查看>>
WCDMA无线网络规划及部署原则探讨(转)
查看>>
万兆以太网离现实应用还有多远?(转)
查看>>
Platform Builder之旅(三)(转)
查看>>