首页 > 其他 > 详细

USB驱动

时间:2016-01-05 18:57:17      阅读:304      评论:0      收藏:0      [点我收藏+]

    usb中文名的意思为“通用传输总线”。日常生活中,usb设备到处使用,usb接口方便且高效。usb设备遵循usb传输协议,这个协议庞大而且复杂,我对此也不是很了解,书写usb驱动,主要是参照内核代码drivers\hid\usbhid\usbmouse.c。

关于usb的一些知识:

1.usb设备遵循usb协议,在usb协议中主要分为4中传输方式:控制传输、中断传输、等时传输、批量传输

2.每一个usb设备都支持控制传输,控制传输主要是用于在usb设备插入主机时,主机能获取到该设备的一些信息,如:设备描述符、设备状态等。

3.usb设备都有一个设备描述符,该描述符中包含了设备的版本号、厂家信息、设备类、设备子类等。

4.usb设备与主机之间通信:一端位于主机的缓冲区,一端对应usb设备的一个端点,中间用管道连接,一个接口可以对应多个端点,每个端点对应着一个端点描述符。

5.usb设备驱动是基于输入子系统构造的,但是在此基础上还加入了中断传输。

书写usb驱动的框架

1.定义并设置一个usb_driver结构体,注册

2.在probe函数中完成输入子系统并加入中断传输:

a.分配一个input_dev结构体

b.设置可以产生哪一类事件,哪一些事件

c.注册

d.硬件的相关操作:

(1).获取当前设置:interface = intf->cur_altsetting;

(2).获取端点描述符:endpoint = &interface->endpoint[0].desc;

(3).构造、填充urb结构体

填充urb结构体时,需要构造一个完成函数,它是当完成一次数据传输后由主机控制器调用。一般在这个函数中进行数据处理,如:上报事件。

最后还要提交urb:

usb_submit_urb(struct urb *urb, gfp_t mem_flags)

如:

usb_submit_urb (myusb_urb, GFP_ATOMIC);

例子:

定义并设置一个usb_driver结构体,注册

技术分享

技术分享

重点函数:probe

技术分享

技术分享

disconnect函数和probe函数做“相反”的操作,此处略。

完成函数:

技术分享

技术分享

技术分享

技术分享技术分享

由于Linux中含有完成的USB驱动,所以在测试自己的驱动程序时,必须先配置内核,将Linux固定好的USB驱动程序去掉,再编译、烧写新内核,加载自己的驱动程序进行测试。

本文出自 “君峰俊宇” 博客,请务必保留此出处http://10274409.blog.51cto.com/10264409/1731830

USB驱动

原文:http://10274409.blog.51cto.com/10264409/1731830

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!