linux 如何重启usb驱动程序,如何在linux写USB驱动

本文详细介绍了在Linux下如何编写USB驱动,包括分配设置usb_driver结构体、理解id_table、probe函数的工作原理,以及USB数据传输基于urb结构体的操作。此外,还提到了如何重启USB驱动程序的相关知识。
摘要由CSDN通过智能技术生成

1、分配、设置注册usb_driver结构体。(usb_device结构体在USB总线会帮我们完成,具体见前面)

设置usb_driver主要有哪些要设置:

id_table--------USB总线匹配驱动和设备时候就依靠获取的设备接口描述符和驱动的id_table进行匹配来判断是否支持;

probe----------USB总线匹配成功会通过usb_probe_interface(driver的probe函数)来调用USB驱动的probe函数;

disconnect----这个函数前面没有提到,这个当USB设备拔出来时候,USB总线会调用。

对于分配设置usb_driver也很简单,分配就直接分配内存,注册就是通过usb_register函数。

所以对于USB框架驱动是十分简单的,核心的事情有两件事:

1、USB总线驱动在USB设备接入HUB时候会通信,获取USB设备的各种描述符,那么驱动第一件事就是通过接口直接把主机控制器之前读到的描述符给

读取出来,然后进行解析。这个解析就是USB驱动的最核心的工作:

2、就是根据获取的描述符来设置和操作USB设备,这部分核心工作就是通过urb来完成。

3、首先讨论id_table:

下面参考文章:http://linux.chinaunix.net/techdoc/install/2009/08/05/1128379.shtml

struct usb_device_id {

/* 确定设备信息去和结构体中哪几个字段匹配来判断驱动的适用性 */

__u16        match_flags;

/* Used for product specific matches; range is inclusive */

__u16        idVendor;    //USB设备的制造商ID,

__u16        idProduct;    //USB设备的产品ID,有制造商自定

__u16        bcdDevice_lo;    /* USB设备的产品版本号最低值*/

__u16        bcdDevice_hi;    /* 和最高值,以BCD码来表示。*/

/* 分别定义设备的类,子类和协议,他们由 USB 论坛分配并定义在 USB 规范中. 这些值指定这个设备的行为, 包括设备上所有的接口 */

__u8        bDeviceClass;

__u8        bDeviceSubClass;

__u8        bDeviceProtocol;</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值