在Linux系统中,提供主机侧和设备侧视角的USB驱动框架,从主机侧看到的USB主机控制器和设备驱动,以及从设备侧看到的设备控制器和Gadget驱动。

  1. Linux系统中USB驱动的整体视图

图1

(1)   Mass storage

USB Mass Storage Device ,USB大容量设备,比如我们的移动硬盘,或者是我们手机连接PC时作为一个大容量设备。

(2)   CDC

CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:

图2

(3)   HID

人机接口设备Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

(4)   UDC(USB device controller)

图3

  1. 主机侧与设备侧USB驱动

2.1   主机侧

从主机侧的角度看,需要编写的USB驱动包括USB主机控制器驱动和USB设备驱动两类,USB主机控制器驱动程序控制插入其中的USB设备,而USB设备驱动程序控制该设备如何作为从设备与主机通信,比如图3右边,Android设备作为主机,USB主机控制器驱动程序控制插入其中的USB键盘,而USB设备驱动此时对应HID(包括USB键盘)的驱动。

每条总线上只有一个主机控制器,负责协调主机和设备间的通信,而设备不能主动向主机发生任何消息。

USB核心负责USB驱动管理和协议处理的主要工作。其功能包括:通过定义一些数据结构、宏、功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;维护整个系统的USB设备信息;完成设备热拔插控制、总线数据传输控制等。

2.2   设备侧

Linux内核的USB设备侧驱动程序分为3个层次:UDC驱动程序、Gadget(小配件) Function API和Gadget Function驱动 。

UDC驱动程序直接访问硬件,控制USB设备和主机间的底层通信,向上层提供与硬件相关操作的回调函数。Gadget Function API是UDC驱动程序回调函数的简单封装。Gadget Function驱动具体控制USB设备功能的实现,使设备表现为“网络链接”、“打印机”或“USB Mass Storage”等特性,它使用Gadget Function API控制UDC实现这些功能。Gadget Function API把下层的UDC驱动和上层到Gadget Function驱动隔离开,是的在linux系统中编写USB设备侧驱动时能够把功能的实现和底层通信分离。

USB基础---Linux USB驱动层次相关推荐

  1. Linux复位usb hub,linux usb hub初始化-steven

    分类:LINUX 谨以此文纪念过往的岁月 一.前言 在上文中讲述了usb子系统的初始化,在该文中来看usb hub的驱动.不过在这里需要说明一点,host controller和usb hub是不同的 ...

  2. Linux复位usb hub,Linux USB subsystem --- USB Hub initialize

    目的:对USB作深入学习,在此留下笔记.欢迎讨论. [Linux 3.2] [driver/usb/core/hub.c] 函数:usb_hub_init intusb_hub_init(void) ...

  3. linux下usb调试工具,LINUX USB调试

    LinuxUSB驱动程序调试 :这是LinuxUSB驱动程序调试--003:Ubuntu下的准备工作的详细页面,介绍了和linux,有关的知识.技巧.经验,和一些linux源码等. Ubuntu下的准 ...

  4. linux usb代码,Linux USB Host Controller的初始化代码框架分析

    usb_hcd_omap_probe (const struct hc_driver *driver) (dev/ohci/ohci-omap.c) 在模块初始化时被platform_driver_r ...

  5. linux usb ehci,linux USB HOST之EHCI和OHCI

    1. 主机控制器(Host Controller) • UHCI: Universal Host Controller Interface (通用主机控制接口, USB1.0/1.1) • OHCI: ...

  6. 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记

    Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...

  7. Linux设备驱动开发概述

    作者:宋宝华 email:author@linuxdriver.cn 在过去这些年,Linux已经成功应用于服务器和桌面系统,而近年来,随着嵌入式系统应用的持续升温,Linux也开始广泛应用于嵌入式领 ...

  8. linux来源usb驱动在哪下载,Linux USB驱动程序基础

    非常好的linux驱动入门,介绍详尽 Linux USB驱动程序基础 来源: ChinaUnix博客日期:2008.04.10 23:55(共有条评论) 我要评论 ( Linux USB Driver ...

  9. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动

    这一章从主机侧角度看到的USB 主机控制器驱动和设备驱动从主机侧的角度而言,需要编写的USB 驱动程序包括主机控制器驱动和设备驱动两类,USB 主机控制器驱动程序控制插入其中的USB 设备,而USB ...

最新文章

  1. EasyUI Window学习总结
  2. 【Python】编程笔记8
  3. Arrays.asList(arr)使用注意事项
  4. SQL Server timeout分析和总结
  5. LINUX SHELL的神器,sed
  6. 400 bad request的原因意思和解决方法
  7. eclipse:项目启动MySQL报错:The last packet successfully received from the server was x milliseconds ago
  8. HTML5中的Web Notification桌面通知(右下角提示)
  9. Mr.J-- jQuery学习笔记(四)--内容选择器
  10. 查询没有走索引_MySQL 如何正确的使用索引
  11. Python学习第二天----网络基础及操作系统简介(安装linux系统)
  12. php微信网页授权获取用户基本信息,微信网页授权获取用户基本信息
  13. 使用FontCreator工具创建字体符号导入arcmap
  14. RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)
  15. 微信小程序学习日记6
  16. Bootstrap 警告框组件 + 退出按钮样式 实现一个可退出的警告框
  17. 冰蝎各版本工具分析与魔改思路
  18. 电缆的差分特性阻抗(120欧姆)及插入损耗的测量方法
  19. vue上传录音_通过使用vue如何才能实现添加mp3音频文件
  20. AlphaGo简易版MuGo源码解析

热门文章

  1. 岩板铺地好吗_威廉顿岩板1200x2700x9mm,上墙铺地非常好看大气
  2. ppt设置外观样式_PPT怎么做?如何做出好看的PPT?
  3. JavaWeb上传图片到服务器,存储到数据库,并在页面显示
  4. request.getAttribute()和 request.getParameter()有何区别?
  5. 005_JDK的Date类对Comparable接口的实现
  6. java session原理_java web开发—session的工作原理总结
  7. java jdk安装_Java从入门到入土第一课—JDK安装及环境配置
  8. 设置APP版本跟新提示
  9. 无法安装ie8,因为其他程序或更新正在等待重启您的计算机,ie8 因为其他程序或更新正在等待重新启...
  10. macbook下载苹果版Photoshop cc2019 for mac