• Linux 内核提交 urb


    一旦 urb 被正确地创建,并且被 USB 驱动初始化, 它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现:

    int usb_submit_urb(struct urb *urb, int mem_flags);

    urb 参数是一个指向 urb 的指针, 它要被发送到设备. mem_flags 参数等同于传递给 kmalloc 调用的同样的参数, 并且用来告诉 USB 核心如何及时分配任何内存缓冲在这个 时间.

    在 urb 被成功提交给 USB 核心之后, 应当从不试图存取 urb 结构的任何成员直到完成 函数被调用.

    因为函数 usb_submit_urb 可被在任何时候被调用(包括从一个中断上下文), mem_flags 变量的指定必须正确. 真正只有 3 个有效值可用, 根据何时 usb_submit_urb 被调用:

    GFP_ATOMIC

    这个值应当被使用无论何时下面的是真:

    • · 调用者处于一个 urb 完成处理者, 一个中断, 一个后半部, 一个 tasklet, 或者一个时钟回调.
    • 调用者持有一个自旋锁或者读写锁. 注意如果正持有一个旗标, 这个值不必要.
      • current->state 不是 TASK_RUNNING. 状态一直是 TASK_RUNNING 除非驱动已 自己改变 current 状态.

    GFP_NOIO

    这个值应当被使用, 如果驱动在块 I/O 补丁中. 它还应当用在所有的存储类型的 错误处理补丁中.

    GFP_KERNEL

    这应当用在所有其他的情况中, 不属于之前提到的类别.

  • 相关阅读:
    Kindle Book Resource
    Windows远程桌面
    python列表常用方法
    python字符串操作简单方法
    PCA降维实验代码
    android底部菜单栏的编写
    android UI:Fragment碎片
    android开发学习——day8
    android开发学习——day7
    android开发学习——day6
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147325.html
Copyright © 2020-2023  润新知