Linux USB驱动

USB协议

USB协议+Host协议+OTG协议。USB树形拓扑结构(ch4.1.1),最多7层,第七层只有functions,不能有hub。一条USB总线有且只有一个USB host,一个Root hub。USB设备分两类,hub和functions。Compound Device表示一个Hub上接多个设备组成的一个USB设备组。Composite Device表示一个具有多个复用功能的USB设备。USB主机控制器是真正的硬件。通常挂载在PCI总线(如台式机)或者platform总线(如手机)上。USB机械性能(ch5)。USB电气性能(ch6)。四大描述符(ch9.5)。启动流程(ch9.1,ch9.2)。

数据流传输(ch5)。端点分零端点和非零端点。零端点作为默认的控制方法,主要用于初始化。传输分Control/Bulk/Interrupt/Isochronous。

数据包(ch8)。四种:Token,Data,Handshake,Special。Token令牌包只能主机到设备,分IN/OUT/SOF/SETUP。SETUP实现主机向设备发送请求(ch9.3,ch9.4)。

Linux USB系统

HCD是USB主机控制器的驱动,USB core是USB driver与HCD之间的接口。USB driver不能直接访问HCD。USB core注册了USB总线,USB文件系统,USB Hub以及usb_generic_driver等。所有的USB设备都要绑定到usb_generic_driver上,让设备进入configured状态。usb_driver真正的含义是USB接口驱动。URB封装了USB协议描述的packet。

usb_control_msg() / usb_bulk_msg() / usb_interrupt_msg()

usb_control_msg() => usb_internal_control_msg() => usb_start_wait_urb() => usb_submit_urb() => usb_hcd_submit_urb => hcd->driver->urb_enqueue()

Linux USB系统启动

系统启动时USB初始化主要工作如下。

1. PCI总线或platform总线匹配(probe)USB HCD设备与USB HCD驱动。

2. 匹配成功后,执行该驱动的probe函数,注册USB总线和中断,注册Root hub设备。

3. USB总线匹配(probe)Root hub设备和Root hub驱动。

4. 匹配成功后,执行Root hub的probe函数,遍历设备,匹配驱动。

Linux USB热插拔

1. 当物理上插入USB设备时,触发USB主机控制器的中断回调函数,该函数会调用hub的中断回调函数。

2. Hub的中断回调函数遍历设备,匹配驱动。

HCD的中断处理过程(xhci_irq)

1. 读取状态

hub_port_status()

hub_port_connect_change()

choose_address() --> 分配地址

hub_port_init() --> 获取设备描述符

usb_new_device() --> USB设备已经进入configured状态,执行接口驱动匹配,如果成功则开始加载接口驱动。

Linux USB数据传输

一个传输(控制/批量/中断/等时)由多个事务(IN/OUT/SETUP)组成,一个事务由多个包组成。

一个USB设备可以有多个Interface,每个Inferface对应一个功能(鼠标/键盘/麦克风等)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux USB驱动是一种用于Linux操作系统的驱动程序,它可以帮助计算机识别和管理连接到USB接口的设备。这些设备可以是鼠标、键盘、打印机、摄像头等等。Linux USB驱动程序的开发需要掌握Linux内核编程技术和USB协议知识。它的作用是让Linux系统能够与USB设备进行通信,实现数据传输和设备控制等功能。 ### 回答2: LinuxUSB驱动是用于控制和管理与计算机连接的USB设备的软件程序。USB(Universal Serial Bus)是一种用于连接计算机与外部设备的通用接口。Linux通过其内核中的统一的USB子系统提供USB驱动支持。 LinuxUSB驱动的主要功能包括以下几点: 1. 设备检测和识别:USB驱动程序通过与USB设备的通信,检测和识别连接到计算机的USB设备。它会获取设备的供应商ID和产品ID来唯一标识设备。 2. 设备配置和初始化:一旦设备被识别,USB驱动程序会配置设备并进行初始化。这包括为设备分配所需的资源,并设置设备的工作模式和参数。 3. 数据传输:USB驱动程序负责管理数据在计算机和USB设备之间的传输。它提供了传输数据的接口和函数,可以实现读取和写入USB设备的功能。 4. 设备状态和错误处理:USB驱动程序监控设备的状态,并根据需要采取相应的措施。它还负责处理错误和异常情况,例如设备断开连接或通信错误。 5. USB驱动程序支持:LinuxUSB驱动支持各种USB设备类别,例如存储设备、打印机、鼠标、键盘、摄像头等。对于不同的设备类别,可以加载相应的驱动程序以提供特定的功能和特性。 总的来说,LinuxUSB驱动程序提供了一种通用的方式来管理和控制与计算机连接的USB设备。它为用户提供了方便的接口来访问和操作USB设备,并为开发者提供了用于开发USB设备驱动的支持和工具。 ### 回答3: Linux USB驱动是一种用于操作系统Linux的设备驱动程序,它允许Linux通过USB接口与外部设备进行通信。USB是一种广泛应用于计算机和电子设备中的通用串行总线接口,它能够连接各种外部设备,如键盘、鼠标、打印机、摄像头等。 Linux USB驱动主要有两个作用:一是检测和识别连接的USB设备,二是实现数据传输和通信控制。 在Linux操作系统中,每个连接到计算机的USB设备都会被视为一个特殊的文件,即设备文件。通过设备文件可以访问和控制外部USB设备。Linux USB驱动的一个重要功能是检测和识别USB设备的插入和拔出事件,当USB设备插入计算机时,驱动会自动加载,并为设备分配一个设备文件。驱动还能够自动卸载和释放设备文件,当USB设备拔出时。 另一个重要功能是数据传输和通信控制。一旦USB设备被识别并分配了设备文件,应用程序就可以通过读写设备文件进行数据的读取和写入。驱动负责处理应用程序和USB设备之间的通信协议,确保数据的正确传输和接收。 常见的Linux USB驱动USB存储驱动USB网络驱动USB摄像头驱动等。这些驱动程序提供了不同类型USB设备的通信功能和接口。 总结而言,Linux USB驱动是一种用于控制和管理USB设备的软件程序,在Linux操作系统中起着重要的作用,使得用户可以通过USB接口与外部设备进行数据传输和通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值