- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下USB gadget设备详解/uidid-3329114.html
USB gadget是什么?Linux-USB Gadget 驱动框架(以下简称 Gadget)实现了USB 协议定义的设备端的软件功能。相对于 Linux USB 主机端(Host) 驱动而言, Gadget 驱动出现较晚,它出现在2.4.23 以后。
Gadget 框架提出了一套标准 API, 在底层, USB 设备控制器(USB Device Controller, UDC)驱动则实现这一套 API, 不同的 UDC (通常是 SOC 的一部分) 需要不同的驱动, 甚至基于同样的 UDC 的不同板子也需要进行代码修改。这一层我们可以称之为平台相关层。
基于 API, Gadget 驱动实现了一套硬件无关的功能,这基本上可以对应到 USB 协议里 的各种 USB Class, 也有比如 USB Gadget Generic Serial 驱动,没有对应的 Class。当然,Gadget 驱动还是受限于底层提供的功能的。比如 某些 Class 需要 USB Isochronous? 端点,这时我们就不能支持该 Class。
普通的 Gadget 驱动只实现一个功能(比如, u 盘,usb 网卡)。复合设备可以支持多个功能,后面将仔细研究一下复合设备的实现。像智能手机, PDA这样的设备,硬件支持较丰富的端点、DMA Buffer, 给软件提了支持复合功能的基础。
有两点值得注意,第一是 usb gaget 驱动框架不象 usb 主机端有 usb core 的概念,usb 主机可能支持成百类型的外设,把通用功能抽象出来很有意义。Usb device 端则通常没有这个需求,一些通用功能抽象在一些 Helper 函数里就可以了。第二是 usb 2.0 里提出了 OTG 的概念,可以在同一接口上支持 host 以及 device 功能。OTG 是一个比较复杂的规范,以后有时间再研究。
控制器驱动
常见的 usb device 有 U 盘, usb 鼠标、键盘,usb 蓝牙模块,usb 读卡器,等等。这些设备比较简单,通常不会运行Linux。运行Linux Gadget 的通常是一些集成 CPU 以及很多外设接口的 SOC (System-on-Chip), 其中 CPU 通常为 32 bit 的 CPU, 并且 udc 也是该 SOC 的一部分( 顺带还有 DMA 通道,FIFO)。
Linux 标准内核里支持各主流 SOC 的 udc 驱动,make menuconfig 一下可以看到具体列表,其中值得一提的是 dummy_hcd, 它是一个软件模拟的 udc, 在开发新的 gadget 驱动时很有帮助。
控制器驱动处理很少的 USB 控制请求(主要由硬件负责的部分)。其它所有的控制请求,比如返回描述符,设置当前配置,由 Gadget Driver 完成。控制器驱动一个主要责任就是负责管理各个端点的 I/O 队列,在 Gadget Driver 的 buffer 和硬件buffer 之间传输数据(通常是通过 DMA)。
我们前面提过,上层 Gadget 驱动能够实现什么功能要依赖底层提供的硬件条件。比如一个复合设备需要至少 5 个端点,这些硬件特性通过一组 gadget_is_*()函数实现。
Gadget 驱动
基于底层提供的资源, Gadget 驱动可以运行在各种硬件平台上。重要的驱动有:
Gadget Zero, 类似于 dummy hcd, 该驱动用于测试 udc 驱动。它会帮助您通过 USB-IF 测试。
Ethernet over USB, 该驱动模拟以太网网口,它支持多种运行方式:
CDC Ethernet: usb 规范规定的 Communications Device Class “Ethernet Model” protocol。
CDC Subset: 对硬件要求最低的一种方式,主要是 Linux 主机支持该方式。
RNDIS: 微软公司对 CDC Ethernet 的变种实现。
File-backed Storage Gadget最常见的 U 盘功能实现。
Serial Gadget 实现,包括:
Generic Serial 实现(只需要Bulk-in/Bulk-out端点+ep0)
CDC ACM 规范实现。
Gadget Filesystem, 将 Gadget API 接口暴露给应用层,以便在应用层实现user mode driver。
MIDI: 暴露ALSA接口,提供 recording 以及 playba
您可能关注的文档
- Java按键式简单版-同花顺手机炒股说明书.doc
- Java程序设计高级应用实验指导书(学生版)60学时.doc
- java软件开发文档带图.doc
- JCT940-2004玻璃纤维增强水泥(GRC)装饰制品.doc
- JEECG智能开发平台V3开发指南.doc
- JGJ62-90旅馆建筑设计规范(3.18).doc
- JIT黄石生产线经验.doc
- JMS基础教程实例(内部).doc
- JSON-RPCforJava使用说明.doc
- JYT03系统集成安防工程管理制度汇编.doc
- 阴极保护电位对稠油输送管道氢脆敏感性影响的研究.docx
- SmB_(6)添加量对SmB_(6)-316L中子屏蔽材料微观组织及力学性能的影响.pdf
- 钛合金微弧氧化陶瓷膜层物理性能和防腐性能研究.pdf
- 天津建筑 图集津18MS-D 天津市民用建筑施工图设计审查要点 电气篇.pdf
- 碳钢表面原位反应电火花沉积TiN金属陶瓷强化涂层摩擦磨损行为与机理.docx
- 增材制造Al-Zn-Mg-Cu铝合金热压缩变形及原位拉伸研究.docx
- 我国钛及钛合金产品的研究现状及发展前景.docx
- 天津建筑 图集津18MS-G 天津市民用建筑施工图设计审查要点 结构篇.pdf
- Ti2AlNb基合金线性摩擦焊研究进展.docx
- Q345B钢表面多层多道激光填丝熔覆层的组织和性能研究.pdf
最近下载
- 自考试卷:行政组织理论自考试题及答案_11.doc VIP
- 静脉治疗护理技术操作标准2023版.pptx VIP
- 《小建筑师》优教课件.ppt VIP
- 活动二 把阳光”弹”来”弹”(课件)蒙沪版二年级上册综合实践活动.pptx VIP
- 广东粤人开心版五年级上册英语 U6 Reading and writing & Chant activities课件.pptx VIP
- 五年级上册《道德与法治》第三单元校本作业.doc VIP
- 五年级上册《道德与法治》第二单元校本作业.doc VIP
- 国内外钻井软件调研.ppt VIP
- 广东粤人开心版五年级上册英语 U5 Practices & Activity & Sounds and words课件.pptx VIP
- 年产 48000 吨新能源导电材料配套尾气综合利用项目环评报告表.pdf VIP
文档评论(0)