USB 通讯的最基本形式是通过某些称为 端点 的. 一个 USB 端点只能在一个方向承载数 据, 或者从主机到设备(称为输出端点)或者从设备到主机(称为输入端点). 端点可看作一 个单向的管道.

一个 USB 端点可是 4 种不同类型的一种, 它来描述数据如何被传送:

CONTROL

控制端点被用来允许对 USB 设备的不同部分存取. 通常用作配置设备, 获取关于 设备的信息, 发送命令到设备, 或者获取关于设备的状态报告. 这些端点在尺寸上 常常较小. 每个 USB 设备有一个控制端点称为"端点 0", 被 USB 核用来在插入时 配置设备. 这些传送由 USB 协议保证来总有足够的带宽使它到达设备.

INTERRUPT

中断端点传送小量的数据, 以固定的速率在每次 USB 主请求设备数据时. 这些端 点对 USB 键盘和鼠标来说是主要的传送方法. 它们还用来传送数据到 USB 设备来 控制设备, 但通常不用来传送大量数据. 这些传送由 USB 协议保证来总有足够的 带宽使它到达设备.

BULK

块端点传送大量的数据. 这些端点常常比中断端点大(它们一次可持有更多的字符). 它们是普遍的, 对于需要传送不能有任何数据丢失的数据. 这些传送不被 USB 协 议保证来一直使它在特定时间范围内完成. 如果总线上没有足够的空间来发送整个 BULK 报文, 它被分为多次传送到或者从设备. 这些端点普遍在打印机, 存储器, 和网络设备上.

ISOCHRONOUS

同步端点也传送大量数据, 但是这个数据常常不被保证它完成. 这些端点用在可以 处理数据丢失的设备中, 并且更多依赖于保持持续的数据流. 实时数据收集, 例如 音频和视频设备, 一直都使用这些端点.

控制和块端点用作异步数据传送, 无论何时驱动决定使用它们. 中断和同步端点是周期性 的. 这意味着这些端点被设置来连续传送数据在固定的时间, 这使它们的带宽被 USB 核 所保留.

USB 端点在内核中使用结构 struct usb_host_endpoint 来描述. 这个结构包含真实的端 点信息在另一个结构中, 称为 struct usb_endpoint_descriptor. 后者包含所有的 USB- 特定 数据, 以设备自身特定的准确格式. 驱动关心的这个结构的成员是:

bEndpointAddress

这是这个特定端点的 USB 地址. 还包含在这个 8-位 值的是端点的方向. 位掩码 USB_DIR_OUT 和 USB_DIR_IN 可用来和这个成员比对, 来决定给这个端点的数据是 到设备还是到主机.

bmAttributes

这是端点的类型. 位掩码 USB_ENDPOINT_XFERTYPE_MASK 应当用来和这个值比对, 来决定这个端点是否是 USB_ENDPOINT_XFER_ISOC, USB_ENDPOINT_XFER_BULK, 或

者是类型 USB_ENDPOINT_XFER_INT. 这些宏定义了同步, 块, 和中断端点, 相应地.

这是以字节计的这个端点可一次处理的最大大小. 注意驱动可能发送大量的比这个 值大的数据到端点, 但是数据会被分为 wMaxPakcetSize 的块, 当真正传送到设备 时. 对于高速设备, 这个成员可用来支持端点的一个高带宽模式, 通过使用几个额 外位在这个值的高位部分. 关于如何完成的细节见 USB 规范.

bInterval

如果这个端点是中断类型的,
这个值是为这个端点设置的间隔, 即在请求端点的中 断之间的时间.
这个值以毫秒表示.

这个结构的成员没有一个"传统" Linux 内核的命名机制. 这是因为这些成员直接对应于 USB 规范中的名子. USB 内核程序员认为使用规定的名子更重要, 以便在阅读规范时减少 混乱, 不必使这些名子对 Linux 程序员看起来熟悉.

Linux 内核端点的更多相关文章

  1. 2018-2019-1 20189210 《LInux内核原理与分析》第四周作业

    第三章 这一章接触内核源代码,对内核源码进行编译和调试跟踪 一.预备知识: 内核:整个操作系统的最底层,它负责了整个硬件的驱动以及提供各种系统所需的内核功能.内核实质上是系统上面的一个文件而已,这个文 ...

  2. 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...

  3. 2019-2020-1 20199308《Linux内核原理与分析》第七周作业

    <Linux内核分析> 第六章 进程的描述和进程的创建 6.1 进程的描述 操作系统内核实现操作系统的三大管理功能: 进程管理(进程)-核心 内存管理(虚拟内存) 文件系统(文件) 为了管 ...

  4. 2019-2020-1 20199325《Linux内核原理与分析》第七周作业

    第七周作业 1.进程描述符task_struct数据结构(一) 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct数据结构很 ...

  5. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  6. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  7. linux内核调试技术之printk

    原创博客:欢迎转载,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=6218383 1.简介(基于s3c2440 linux) 在内核调试技术之中 ...

  8. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  9. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

随机推荐

  1. 使用 Apachetop 实时监测web服务器运行状况

    转自 http://42.96.169.71/blog/2013/01/26/shi-yong-apachetop-shi-shi-jian-ce-webfu-wu-qi-yun-xing-zhuan ...

  2. 盘点Apache毕业的11个顶级项目

    自1999年成立至今,Apache 软件基金会已成功建立起自己强大的生态圈.其社区涌现了非常多优秀的开源项目,同时有越来越多国内外项目走向这个国际开源社区进行孵化.据悉,目前所有的 Apache 项目 ...

  3. 纯CSS3实现iOS7扁平化图标

    在线演示 本地下载

  4. hdu 3536【并查集】

    hdu 3536 题意: 有N个珠子,第i个珠子初始放在第i个城市.有两种操作: T A B:把A珠子所在城市的所有珠子放到B城市.  Q A:输出A珠子所在城市编号,该城市有多少个珠子,该珠子转移了 ...

  5. 使用 Markdown Flow 画流程图

    使用 Markdown Flow 画流程图 好处是可以方便的使用 Git 管理版本 st=>start: 开始 e=>end: 结束 c1=>condition: A c2=> ...

  6. jq向元素附加数据

    --------data() 方法向被选元素附加数据,或者从被选元素获取数据.--------- --------removeData() 方法删除之前通过 data() 方法设置的数据.------ ...

  7. 【uml】之用例图中的关系 标签: uml图形 2014-11-23 11:10 1422人阅读 评论(29)

    用例图显示谁是相关的用户,用户希望系统提供什么样的服务(用例),用例之间的关系图,用例图主要的作用是获取需求.指导测试.所以,用例图是站在用户的角度来画的图,应该体现的是用户想要的功能,并不需要体现如 ...

  8. Python数据集变量及相关含义

  9. MySQL常用函数大全讲解

    MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.例如,字符串连接函数 ...

  10. Python基础10 回顾

    从最初的"Hello World",走到面向对象,该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object".那么 ...