zoukankan      html  css  js  c++  java
  • Linux USB 的 Urbs

    linux 内核中的 USB 代码和所有的 USB 设备通讯使用称为 urb 的东西( USB request block). 这个请求块用 struct urb 结构描述并且可在 include/linux/usb.h 中找到.

    一个 urb 用来发送或接受数据到或者从一个特定 USB 设备上的特定的 USB 端点, 以一 种异步的方式. 它用起来非常象一个 kiocb 结构被用在文件系统异步 I/O 代码, 或者如 同一个 struct skbuff 用在网络代码中. 一个 USB 设备驱动可能分配许多 urb 给一个 端点或者可能重用单个 urb 给多个不同的端点, 根据驱动的需要. 设备中的每个端点都 处理一个 urb 队列, 以至于多个 urb 可被发送到相同的端点, 在队列清空之前. 一个 urb 的典型生命循环如下:

    • 被一个 USB 设备驱动创建.
    • 安排给一个特定 USB 设备的特定端点.
    • 提交给 USB 核心, 被 USB 设备驱动.
    • 提交给特定设备的被 USB 核心指定的 USB 主机控制器驱动, .
    • 被 USB 主机控制器处理, 它做一个 USB 传送到设备.
    • 当 urb 完成, USB 主机控制器驱动通知 USB 设备驱动.

    urb 也可被提交这个 urb 的驱动在任何时间取消, 或者被 USB 核心如果设备被从系统中 移出. urb 被动态创建并且包含一个内部引用计数, 使它们在这个 urb 的最后一个用户 释放它时被自动释放.

    本章中描述的处理 urb 的过程是有用的, 因为它允许流和其他复杂的, 交叠的通讯以允 许驱动来获得最高可能的数据传送速度. 但是有更少麻烦的过程可用, 如果你只是想发送 单独的块或者控制消息, 并且不关心数据吞吐率.

  • 相关阅读:
    leetcode ---Search a 2D Matrix
    leetcode ---Search for a Range
    LeetCode--Search in Rotated Sorted Array
    LeetCode--setatrixzeroes
    LeetCode--sortColor
    LeetCode--Spiral Matrix
    java io类 和servlet类 的UML图表示
    servlet web.xml配置详解
    解决json日期格式带T问题
    在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147264.html
Copyright © 2011-2022 走看看