Linux源码阅读笔记-USB驱动分析

基础层次详解

通用串行总线(USB)主要用于连接主机和外部设备(协调主机和设备之间的通讯),USB 设备不能主动向主机发送数据。USB 总线采用拓扑(树形),主机侧和设备侧的 USB 控制器(Host 和 UDC),每个总线只要一个主机控制器。

主机侧的 USB 节点为根节点,所有子节点都连接在根节点集线器(Root hub)上,根节点有 USB 主机控制器(USB Host Controller)控制。

USB 只要设备包括:设备、配置、接口及端点四个层次,具体视图如下:
image.png

基础知识

  1. USB 采用树形拓扑结构,主机侧和设备侧的 USB 控制器(Host 和 UDC),每个总线只要一个主机控制器。
  2. 在主机侧层次结构中,要实现的 USB 驱动包括两种:USB 主机控制器驱动(控制插入其中的 USB 设备)和 USB 设备驱动(控制 USB 设备如何跟主机通讯)
  3. Linux 内核中的 USB 核心负责 USB 驱动管理和协议处理操作。主机控制器驱动和设备驱动之间的 USB 核心非常重要,向上为设备驱动提供 API 编程接口,向下为 USB 主机控制器驱动提供 API 编程接口。
    image.png
    USB 主机控制器接口如下:
    • OHCI:微软主导的低速 USB1.0(1.5Mbps) 和全速 USB1.1(12Mbps)
    • EHCI:Intel 主导的低速 USB1.0(1.5Mbps) 和全速 USB1.1(12Mbps)
    • UHCI:高速 USB2.0(480Mbps)
    • xHCI:USB3.0(5.0Gbps)
  4. USB 的四种传输类型:
    1. 中断传输(USB 键盘)
    2. 实时传输(USB 摄像头)
    3. 批量传输(U 盘)
    4. 控制传输
  5. 一个 USB 端点只能在一个方向上承载数据,从主机到设备(输出端点)或者从设备到主机(输入端点),端点为单向管道;设备通常会有一个或多个配置;配置通常会有一个或多个接口;接口通常会有一个或多个设备;几口有 0 个或多个端口。

USB 驱动常用的数据结构

  1. USB 设备驱动结构体类型:struct usb_driver,Linux 内核具体核心成员如下:
    image.png

  2. 支持不同类型 USB 设备列表,Linux 内核具体核心成员如下:
    image.png

  3. 通过 struct usb_endpoint_descriptor 结构体描述端点,源码如下:
    image.png

  4. 通过 struct usb_host_endpoint 来表示主机侧的端点,具体源码如下:
    image.png

  5. Linux 内核用 struct usb_interface_descriptor 结构来来表示接口,具体源码如下:
    image.png
    描述主机侧的接口结构体类型,源码如下:
    image.png

  6. Linux 内核中的 USB 配置结构体类型为:struct usb_config_descriptor,源码如下:
    image.png
    主机侧的配置结构体类型为:usb_host_config 源码如下:
    image.png

  7. Linux 内核中,USB 的设备结构体类型为 struct usb_device_dscriptor 源码如下:
    image.png

  8. USB 是一种总线,而连接到总线上 USB 设备可以是块设备、字符设备、输入设备等。usb_driver 结构体类型源码如下:
    image.png
    image.png
    image.png
    image.png

  9. Linux 内核使用 struct usb_device 结构体类型标识一个 USB 设备。当 USB 控制器检测到 USB 硬件设备连接过来,则分配一个 usb_device 结构体,接着注册到总线设备列表中,然后进行匹配对应的驱动就可以了。
    image.png

  10. USB 设备主机控制器驱动对应的结构体 usb_hcd 类型分析,具体如下:
    image.png
    通过 struct usb_create_hcd 函数创建主控制器,使用注册/注销主机控制器对应 API 操作如下:
    image.png

  11. USB 请求 URB(SUB Request Block)分为两个部分:私有(SUB 核心层和主机控制器),公有(被 USB 设备支持程序所使用)。具体源码如下:
    image.png
    image.png
    image.png
    URB 结构体分配和初始化成功之后,就可以使用 usb_submit_urb() 请求异步提交到 USB 核心层。返回 0 成功,否则失败。
    image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558539.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot框架在服装生产管理中的创新应用

3 系统分析 3.1 可行性分析 可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。 3.1.1 技术可行性 技术…

AtCoder Beginner Contest 374 A-E 题解

服了,跟 DP \text{DP} DP 杠上了,C 和 E 都在想 DP \text{DP} DP C 和 D 又交了两发罚时 每题难度: A:11 B:28 C:226 D:694 E:1504 F:2026 G:2608 A. Takahashi san 2 题意 给你一个字符串,判断这个字符串是否以 san 结尾&…

springboot医院预约挂号系统

基于springbootvue实现的医院预约挂号系统 (源码L文ppt)4-085 4.1系统功能模块设计 医院预约挂号系统与数据分析系统在设计与实施时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能…

服装生产管理:SpringBoot框架的高效实现

3 系统分析 3.1 可行性分析 可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步。 3.1.1 技术可行性 技术…

城市交通场景分割系统源码&数据集分享

城市交通场景分割系统源码&数据集分享 [yolov8-seg-C2f-Faster&yolov8-seg-GhostHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

LLM RAG面试问题大全!

01 引言 RAG在通用人工智能、数据科学和人工智能的发展领域中起到了变革性的作用。RAG模型让机器能够基于事实产生更准确、连贯和一致的语言,它改变了人类与技术的互动方式。RAG让能够撰写独特内容、引人入胜的产品描述和新闻文章的机器人概念成为现实。尽管RAG的重…

打造梦幻AI开发环境:一步步解锁高效配置的魅力

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

2024年双11哪些好物值得买?双十一必入好物清单不容错过!

在双十一这个年度购物盛宴中,万千精品汇聚一堂,优惠力度空前绝后。本文精心挑选了一系列不容错过的好物,旨在为您的购物车增添几分智慧与惊喜。无论是科技潮品、还是生活日用、家居装饰,每一款推荐都承载着对品质生活的追求与热爱…

Unity实现自定义图集(三)

以下内容是根据Unity 2020.1.0f1版本进行编写的   1、实现编辑器模式下进游戏前Pack全部自定义图集 同Unity的图集一样,Unity的编辑器模式会在进游戏前把全部的SpriteAtlas都打一次图集,如图: 我们也实现这样的效果。 首先需要获取全部的图集路径。因为目前使用的是以.…

天玑 9400 基本确认:4大升级,一代“冰龙”来了

去年,天玑9300 破釜沉舟,打破了A系不可击败的神话。但今年,对安卓阵营来说,才是扬眉吐气的时刻。 因为芯片人才的流失,果子已经雄风不再。即使是 4nm 工艺打3nm工艺,天玑 9300 的 GPU效能,也压…

【笔记】6.2 玻璃的成型

玻璃熔体的成型方法,有压制法(例如,制作水杯、烟灰缸等)、压延法(例如,制作压花玻璃等)、浇铸法(例如,制作光学玻璃、熔铸耐火材料、铸石等) 、吹制法(例如,制作瓶罐等空心玻璃)、拉制法(例如,制作窗用玻璃、玻璃管、玻璃纤维等)、离心法(例如,制作玻璃棉等)、喷吹法(例如,制作…

一个友好、强大、开源的GraphRAG UI

GraphRAG-UI:是一个用户友好的界面,用于GraphRAG,这是一个强大的工具,使用检索增强生成(RAG)方法来索引和查询大量文本数据。这个项目支持最新版本的 graphrag-0.3.3,旨在为 GraphRAG 提供方便的…

2024双十一买什么?双11好物清单来啦,速速码住这篇!

随着双十一的脚步越来越近,空气中似乎都弥漫着购物的兴奋气息。这个一年一度的购物狂欢节,就像是一场盛大的宝藏探寻之旅,无数的商品琳琅满目,令人眼花缭乱。在这个信息爆炸的时代,我们面临着海量的商品选择&#xff0…

挑战用文心快码挽救表弟的影楼!

🎁👉点击进入文心快码 Baidu Comate 官网,体验智能编码之旅,还有超多福利!🎁 最近老家开影楼的表弟找到我,说现在影楼生意也不好做了,经济形势不好,结婚的人也越来越少了…

Rope – 基于深度学习模型开源的AI换脸技术

Rope是什么 Rope是一款开源的AI换脸工具,基于insightface的inswapper_128模型构建,提供一个用户友好的图形界面。用户通过上传图片或视频,在几秒钟内完成换脸操作,效果逼真。Rope支持多种超分辨率算法,支持用户调整面…

如何在繁忙工作中保持领先?2024年好用的4款视频转文字服务

现在信息量爆炸,要在一堆视频里快速找到要点,那真是太关键了。尤其是那些天天得整理会议记录、把访谈内容变成文字,或者准备教学材料的朋友,有个好用的视频转文字工具,简直是救星。今儿个,我就来聊聊2024年…

从零开始搭建一个node.js后端服务项目

一、下载node.js及配置环境 网上很多安装教程,此处就不再赘述了 版本信息 C:\Users\XXX>node -v v20.15.0C:\Users\XXX>npm -v 10.7.0 二、搭建node.js项目及安装express框架 在任意位置创建一个项目文件夹,此处项目文件夹名为test&#xff0…

2024年双十一有什么值得买?双十一推荐好物清单分享!

​是不是很多朋友跟我一样,已经为双11做好了准备,打算开启买买买的节奏!作为一名家居兼数码博主,每年双11的时候都会疯狂囤很多物品,所以今天就跟大家来分享一下,我的双11购物清单,也给大家参考…

nginx报“/app/nginx/client_body_temp/0000000003“ failed (13: Permission denied)

导入Excel多条数据报如下异常 nginx报"/app/nginx/client_body_temp/0000000003" failed (13: Permission denied) 现象描述: 1,导入Excel一条不报错 2,导入多条报服务器错误 3,测试环境是好的,生产环境导…

HyperWorks基于 Shrink Warp Mesh 的零部件网格剖分

Step01:读入模型 Exercise_4b.hm。 Step02:在名为 loose_gap 的 component 中建立 Loose Shrink Warp Mesh。 (1) 点击 Shaded Geometry 及 Surface Edges,将模型切换至渲染模式显示。 (2) 查看模型,注意模型中间隙&#xff08…