简要理解usb驱动

●Linux的device和driver注册模型

USB的框架遵循“平台总线、设备、驱动”的结构,也分为总线、设备、驱动三大块。其中总线驱动是已经由内核完成的,一旦接入usb设备,总线驱动程序就会找到能处理该设备的驱动进行处理。
在这里插入图片描述

● USB的4个层次: 设备 配置 接口 端点在这里插入图片描述

以树/树干/树枝/树叶为例:
一棵树(设备),一般只有一个树干(配置)(当然可以有多个树干,比如榕树),一个树干上有多个树枝(接口 ),每个树枝有多个树叶(端点)。

USB设备是由一些配置(configuration)、接口 (interface)和端点(endpoint)组成,,即一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。一个USB设备驱动可能包含多个子驱动。一个USB设备子驱动程序对应一个USB接口,而非整个USB设备,见上图。

●USB驱动核心

在Linux内核中,使用 struct usb_driver结构体来描述一个USB(接口)驱动,通过usb_register在USB驱动中注册进内核。

接口 device的注册函数是usb_register_dev
接口 driver的注册函数是usb_register → usb_register_driver。
宏定义usb_register如下:

/* use a define to avoid include chaining to get THIS_MODULE & friends */
#define usb_register(driver) \
	usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)

比如鼠标,键盘,u盘,usb转串口,音频,视频等各种各种的物理设备,都会调用usb_register函数来注册。这里一种功能就是一个接口。以HID设备为例,驱动代码如下:

static struct usb_driver hid_driver = {
   
	.name =		"usbhid",
	
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WinDriverEntry USB代码是用于创建一个Windows驱动程序的入口点函数。该函数负责初始化驱动程序并注册与USB设备通信的相关操作。 首先,驱动程序需要包含Windows驱动开发工具包(WDK)提供的头文件。在入口点函数中,我们需要完成以下几个步骤: 1. 驱动程序初始化:设置驱动程序所需的各种数据结构、变量和方法。包括注册与USB设备通信所需的回调函数。 2. 注册驱动程序:调用WdfDriverCreate函数创建驱动程序对象,并传递驱动程序的配置信息。这样操作系统就会识别并加载驱动程序。 3. 配置设备回调函数:通过WdfUsbTargetDeviceSelectConfig函数初始化设备对象和USB接口。这里需要指定设备描述符和接口描述符等信息,并设置设备插拔、数据传输等相关的回调函数。 4. 注册I/O回调函数:通过WdfIoQueueCreate函数创建I/O队列,并将请求分派给合适的回调函数进行处理。这样可以接收和响应来自USB设备的数据传输请求。 5. 启用设备和队列:调用WdfDeviceCreate并WdfIoQueueStart函数启用设备和队列,使其能够与USB设备进行数据通信。 6. DPC回调函数:可以使用WdfTimerCreate函数创建一个定时器对象,并注册DPC回调函数。当定时器触发时,可以执行一些后台任务,例如定期检查USB设备的状态或执行数据处理操作。 需要注意的是,USB驱动程序涉及到设备配置和设备通信等复杂的操作,因此编写和调试USB驱动程序时需要具备较强的Windows驱动开发和USB通信方面的知识。以上只是一个简要的概述,实际的驱动程序开发过程可能还涉及到其他细节和特定的需求。编写一个完整可靠的USB驱动程序需要深入研究和理解USB规范以及Windows驱动开发技术。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归心2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值