linux内核之USB驱动分析

本文详细介绍了Linux内核中的USB驱动结构,包括USB设备驱动程序、总线驱动程序和主机控制器。USB设备由串行接口引擎、端点和接口组成,设备的配置、接口和端点是其关键特征。在编写USB设备驱动时,主要涉及probe()和disconnect()函数,以及USB请求块(URB)的使用。通过对urb的创建、初始化、提交和完成处理,实现与USB设备的通信。
摘要由CSDN通过智能技术生成

【推荐阅读】

深入学习Linux内核(二)体系结构简析

linux内核源码分析 - nvme设备的初始化

第一部分 USB驱动程序框架

  app:
  -------------------------------------------
  USB设备驱动程序    // 知道数据含义
  内核 --------------------------------------
  USB总线驱动程序   // 1. 识别, 2. 找到匹配的设备驱动, 3. 提供USB读写函数 (它不知道数据含义)
  -------------------------------------------
  USB主机控制器
  UHCI OHCI EHCI
  硬件 -----------
  USB设备

  UHCI: intel, 低速(1.5Mbps)/全速(12Mbps)  
  OHCI: microsoft 低速/全速
  EHCI: 高速(480Mbps)

第二部分 USB设备基础概念

在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元:

  a -- 这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);
  b -- USB逻辑设备被USB系统软件看作是一个端点的集合;
  c -- 功能单元被客户软件看作是一个接口的集合。SIE、端点和接口都是USB设备的组成单元;

为了更好地描述USB设备的特征,USB提出了设备架构的概念。从这个角度来看,可以认为USB设备是由一些配置、接口和端点组成,即一个USB设备可以含有一个或多个配置(不同的配置使设备表现出不同的功能组合,在探测/连接期间需要从中选定一个),在每个配置中可含有一个或多个接口(一个配置中的所有接口可以同时有效,并可被不同的程序连接),在每个接口中可含有若干个端点(代表一个基本功能,每个端点都有一定的属性,其中包括传输方式、总线访问频率、带宽、端点号和数据包的最大容量等)。其中,配置和接口是对USB设备功能的抽象,实际的数据传输由端点来完成。在使用USB设备前,必须指明其采用的配置和接口。这个步骤一般是在设备接入主机时设备进行枚举时完成的。

usb设备非常复杂,有许多不同的逻辑单元组成,这些单元的关系如下:

设备描述符(usb_device_descriptor):关于设备的通用信息,如供货商ID及适用的协议等,在Linux内核中,USB设备用usb_device结构体来描述,位于includ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值