bulk interface驱动_USB驱动程序(较详细)三

本文详细介绍了Linux内核中USB驱动的bulk interface驱动,讲解了如何使用struct usb_device_id结构匹配设备,并注册USB驱动。内容涵盖设备ID匹配、驱动注册、探测与断开回调函数,以及如何处理URB进行数据传输。此外,还提到了简单的USB设备驱动创建过程和使用函数接口进行数据交互的方法。
摘要由CSDN通过智能技术生成

(本部分的一些示例源码来自drivers/usb/usb-skeleton.c,它是Linux内核为我们提供的最基础的USB驱动程序,USB骨架程序)

驱动程序把驱动对象注册到 USB 子系统中,之后使用供应商(idVendor)和设备(idProduct)标识来判断对应的硬件是否已经安装.

驱动的设备支持列表

struct usb_device_id 结构提供了这个驱动支持的不同类型 USB 设备的列表. USB 核心通过此列表用来决定设备对应的驱动,热插拔脚本也通过此列表来决定当特定设备被插入系统时,应该自动加载的驱动.

struct usb_device_id {

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

__u16        match_flags;

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

__u16        idVendor;//USB设备的制造商ID,须向www.usb.org申请

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

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

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

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

__u8        bDeviceClass;

__u8        bDeviceSubClass;

__u8        bDeviceProtocol;

/* 分别定义单个接口的类,子类和协议,他们由 USB 论坛分配并定义在 USB 规范中 */

__u8        bInterfaceClass;

__u8        bInterfaceSubClass;

__u8        bInterfaceProtocol;

/* 这个值不用来匹配驱动的, 驱动用它来在 USB 驱动的探测回调函数中区分不同的设备 */

kernel_ulong_t    driver_info;

};//以上结构体中__u16 match_flags;所使用的define://include/linux/mod_devicetable.h

/* Some useful macros to use to create struct usb_device_id */

#define USB_DEVICE_ID_MATCH_VENDOR        0x0001

#define USB_DEVICE_ID_MATCH_PRODUCT        0x0002

#define USB_DEVICE_ID_MATCH_DEV_LO        0x0004

#define USB_DEVICE_ID_MATCH_DEV_HI        0x0008

#define USB_DEVICE_ID_MATCH_DEV_CLASS        0x0010

#define USB_DEVICE_ID_MATCH_DEV_SUBCLASS    0x0020

#define USB_DEVICE_ID_MATCH_DEV_PROTOCOL    0x0040

#define USB_DEVICE_ID_MATCH_INT_CLASS        0x0080

#define USB_DEVICE_ID_MATCH_INT_SUBCLASS    0x0100

#define USB_DEVICE_ID_MATCH_INT_PROTOCOL    0x0200//include/linux/usb.h

#define USB_DEVICE_ID_MATCH_DEVICE \

(USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)

#define USB_DEVICE_ID_MATCH_DEV_RANGE \

(USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI)

#define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION \

(USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE)

#define USB_DEVICE_ID_MATCH_DEV_INFO \

(USB_DEVICE_ID_MATCH_DEV_CLASS | \

USB_DEVICE_ID_MATCH_DEV_SUBCLASS | \

USB_DEVICE_ID_MATCH_DEV_PROTOCOL)

#define USB_DEVICE_ID_MATCH_INT_INFO \

(USB_DEVICE_ID_MATCH_INT_CLASS | \

USB_DEVICE_ID_MATCH_INT_SUBCLASS | \

USB_DEVICE_ID_MATCH_INT_PROTOCOL)//这个结构体一般不用手动赋值,以下的宏可以实现赋值:/**

* USB_DEVICE - macro used to describe a specific usb device

* @vend: the 16 bit USB Vendor ID

* @prod: the 16 bit USB Product ID

*

* This macro is used to create a struct usb_device_id that matches a

* specific device.

*///仅和指定的制造商和产品ID匹配,用于需要特定驱动的设备

#define USB_DEVICE(vend,prod) \

.match_flags = USB_DEVICE_ID_MATCH_DEVICE, \

.idVendor = (vend), \

.idProduct = (prod)/**

* USB_DEVICE_VER - describe a specific usb device with a version range

* @vend: the 16 bit USB Vendor ID

* @prod: the 16 bit USB Product ID

* @lo: the bcdDevice_lo value

* @hi: the bcdDevice_hi value

*

* This macro is used to create a struct usb_device_id that matches a

* specific device, with a version range.

*///仅和某版本范围内的指定的制造商和产品ID匹配

#define USB_DEVICE_VER(vend, prod, lo, hi) \

.match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, \

.idVendor = (vend), \

.idProduct = (prod), \

.bcdDevice_lo = (lo), \

.bcdDevice_hi = (hi)/**

* USB_DEVICE_INTERFACE_PROTOCOL - describe a usb device with a specific interface protocol

* @vend: the 16 bit USB Vendor ID

* @prod: the 16 bit USB Product ID

* @pr: bInterfaceProtocol value

*

* This macro is used to create a struct usb_device_id that matches a

* specific interface protocol of devices.

*///仅和指定的接口协议、制造商和产品ID匹配

#define USB_DEVICE_INTERFACE_PROTOCOL(vend, prod, pr) \

.match_flags = USB_DEVICE_ID_MATCH_DEVICE | \

USB_DEVICE_ID_MATCH_INT_PROTOCOL, \

.idVendor = (vend), \

.idProduct = (prod), \

.bInterfaceProtocol = (pr)/**

* USB_DEVICE_INFO - macro used to describe a class of usb devices

* @cl: bDeviceClass value

* @sc: bDeviceSubClass value

* @pr: bDeviceProtocol value

*

* This macro is used to create a struct usb_device_id that matches a

* specific class of devices.

*///仅和指定的设备类型相匹配

#define USB_DEVICE_INFO(cl, sc, pr) \

.match_flags = USB_DEVICE_ID_MATCH_DEV_INFO, \

.bDeviceClass = (cl), \

.bDeviceSubClass = (sc), \

.bDeviceProtocol = (pr)/**

* USB_INTERFACE_INFO - macro used to describe a class of usb interfaces

* @cl: bInterfaceClass value

* @sc: bInterfaceSubClass value

* @pr: bInterfaceProtocol value

*

* This macro is used to create a struct usb_device_id that matches a

* specific class of interfaces.

*///仅和指定的接口类型相匹配

#define USB_INTERFACE_INFO(cl, sc, pr) \

.match_flags = USB_DEVICE_ID_MATCH_INT_INFO, \

.bInterfaceClass = (cl), \

.bInterfaceSubClass = (sc), \

.bInterfaceProtocol = (pr)/**

* USB_DEVICE_AND_INTERFACE_INFO - describe a specific usb device with a class of usb interfaces

* @vend: the 16 bit USB Vendor ID

* @prod: the 16 bit USB Product ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bulk interface驱动下载是指下载用于连接计算机和USB设备的bulk interface驱动程序。这种驱动程序可以使计算机能够识别和与USB设备进行通信,从而实现数据传输和控制。用户可以通过官方网站或第方网站下载bulk interface驱动程序,然后按照安装说明进行安装。安装完成后,用户就可以使用USB设备了。 ### 回答2: Bulk interface驱动下载是指用户从设备或计算机系统官方网站或其他的一些渠道上下载的一种驱动程序,通过bulk interface接口与计算机相连,实现对一些外设的管理和控制。bulk interface驱动下载通常包括个主要方面:下载、安装和使用。 对于bulk interface驱动下载,首先需要确保下载的软件与所使用设备或操作系统相匹配。接着进行安装,往往是双击下载的驱动文件,安装过程需要注意选择安装路径、相关组件等。一旦安装完成,用户便可以在计算机上通过相应的工具或界面,控制和管理设备。 bulk interface驱动下载的主要优点在于,它能够增强设备的兼容性和稳定性。在设备连接到计算机系统后,bulk interface驱动程序能够帮助操作系统识别和维护设备和计算机系统之间的连接,从而确保设备正常运行。 尽管bulk interface驱动下载的使用范围还是较为局限,但它确实是一种方便快捷、易于操作的驱动程序。对于需要使用的用户来说,下载、安装和使用bulk interface驱动程序可以提高设备的稳定性,进一步增加设备的可靠性和高效性。 ### 回答3: Bulk interface驱动下载通常是指通过USB接口连接电脑和设备(如手机、MP3播放器、摄像头等)时使用的驱动程序。在电脑和设备之间进行数据传输或通信时,经常需要使用此类驱动程序来识别设备并确保设备与计算机之间的通信稳定。 一般来说,bulk interface驱动下载可以通过一些网站或厂家官网进行下载。在下载之前,需要确保下载的驱动程序与所连接的设备之间是匹配的。通常情况下,不同品牌的设备使用的驱动程序不同,因此在下载之前,需要确认设备的品牌、型号以及操作系统版本等信息,以确保所下载的驱动程序能够与设备兼容。 在下载bulk interface驱动之前,还需要确保电脑已经安装了USB驱动程序,否则可能会导致设备无法识别或连接不稳定。此外,在下载并安装bulk interface驱动程序之后,建议重启电脑,以确保驱动程序能够正常工作。 总之,bulk interface驱动下载是连接电脑和设备之间进行数据传输和通信的必要步骤。在下载和安装驱动程序之前,需要确认设备的品牌、型号和操作系统版本,以确保所下载的驱动程序兼容并能正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值