struct urb 结构在驱动中必须不被静态创建, 或者在另一个结构中, 因为这可能破坏 USB 核心给 urb 使用的引用计数方法. 它必须使用对 usb_alloc_urb 函数的调用而被创 建. 这个函数有这个原型:

struct urb *usb_alloc_urb(int iso_packets, int mem_flags);

第一个参数, iso_packet, 是这个 urb 应当包含的同步报文的数目. 如果你不想创建一 个同步 urb, 这个变量应当被设置为 0. 第 2 个参数, mem_flags, 是和传递给 kmalloc 函数调用来从内核分配内存的相同的标志类型(见"flags 参数"一节, 第 8 章, 关于这些 标志的细节). 如果这个函数在分配足够内存给这个 urb 成功, 一个指向 urb 的指针被 返回给调用者. 如果返回值是 NULL, 某个错误在 USB 核心中发生了, 并且驱动需要正确 地清理.

在创建了一个 urb 之后, 它必须被正确初始化在它可被 USB 核心使用之前. 如何初始化 不同类型 urb 见下一节

为了告诉 USB 核心驱动用完这个 urb, 驱动必须调用 usb_free_urb 函数. 这个函数只 有一个参数:

void usb_free_urb(struct urb *urb);

参数是一个指向你要释放的 struct urb 的指针. 在这个函数被调用之后, urb 结构消失, 驱动不能再存取它.

转载于:https://www.cnblogs.com/fanweisheng/p/11147277.html

Linux 创建和销毁 urb相关推荐

  1. bio linux 创建_不断升级,Java之BIO、NIO、AIO的演变

    一.前言 一句话概括BIO NIO AIO: 第一阶段,服务端采用同步阻塞的BIO: 第二阶段,服务端采用同步阻塞的线程池的BIO: 第三阶段,JDK4之后服务端采用同步非阻塞的NIO: 第四阶段,J ...

  2. java 线程的销毁_Java 线程(1)- 创建与销毁

    Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thread),而一个 Java 线程对应一个操作系统线程,所以了解一些操作系统进程的管理知 ...

  3. swift中单例的创建及销毁

    最近项目重构时使用了oc和swift的混编,遇到了关于单例的创建及销毁,这里记录一下 //创建单例private static var _sharedInstance: ViewController? ...

  4. QWidget一生,从创建到销毁事件流

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QWidget一生,从创建到销毁事件流     本文地址:http://techieliang ...

  5. 函数调用过程详解:函数栈帧的创建与销毁

    前言:我们在学习C语言的过程中,可以会产生很多疑问,比如: 局部变量是怎么创建的 为什么局部变量的值不做初始化就是随机值 函数是怎么传参的?传参的顺序是怎么样的? 形参和实参是什么关系? 函数调用是怎 ...

  6. linux suse 共享目录_SUSE Linux 创建NFS共享文件夹

    SUSE Linux 创建NFS共享文件夹 服务端的配置: 1.编辑nfs服务的配置文件 /software/suse11 *(rw,sync,no_root_squash,no_all_squash ...

  7. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  8. 《Effect Java》学习笔记1———创建和销毁对象

    第二章 创建和销毁对象 1.考虑用静态工厂方法代替构造器 四大优势: i. 有名称 ii. 不必在每次调用它们的时候都创建一个新的对象:   iii. 可以返回原返回类型的任何子类型的对象: JDBC ...

  9. 041_对象的创建和销毁

    1. 对象的创建和销毁都在JavaScript执行过程中发生, 理解这种方式的含义对理解整个语言至关重要. 2. 声明和实例化 2.1. 对象的创建方式是用关键字new后面跟上实例化的类的名字: va ...

  10. 《Effective Java》学习笔记 第二章 创建和销毁对象

    第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作. 1 考虑用静态工厂方法代替构造器 一般在某处获取一 ...

最新文章

  1. python两个切片合并_Python中numpy的布尔判断、合并、切片及一般函数,通用
  2. 海量数据处理分析(部分)
  3. 谷歌浏览器添加插件时显示程序包无效:CRX_HEADER_INVALID 解决办法
  4. 【CodeForces - 1062C】Banh-mi (贪心,数学,找规律,快速幂)
  5. 阿里云服务器安装onlyoffice_阿里云服务器安装 JDK 8
  6. Viewer.js 图片预览插件
  7. 计算机网络 DNS协议 FTP DHCP
  8. 计算机实践ps折扇,用PS打造一把水墨画折扇的教程
  9. 位掩码(BitMask)——介绍与使用
  10. 344个四階奇偶幻方按序排列(上)
  11. 区块链的未来:“2020年起3-5年:国内区块链大规模商业应用将全面落地开花”
  12. 微信小程序之将base64图片转为本地图片
  13. 让企业报表化繁为简,Smartbi实现报表统一管理
  14. docker mysql 高可用_docker搭建数据库高可用方案PXC
  15. 天嵌i.mx6q--2
  16. 【Java】 买卖股票的最佳时机含手续费
  17. 跑马问题--36匹马,跑道每次最多只能有6匹马进行比赛,最少进行多少次比赛能比出前3名?
  18. vue组件中数据共享——vuex
  19. 数字信号处理5——CFAR算法及matlab实现
  20. 推荐:物联网区块链项目---IoTeX

热门文章

  1. 如何在数轴上找到一个数的倒数
  2. ALEXA之数据包:基于套接字发送伪造IP包
  3. web安全day26:今天,算是把linux的用户管理弄明白了
  4. CocosCreator简单小鸟穿越隧道小游戏
  5. 关于解决keil4和mdk共存后51不能使用go to definition Of 'XXXXXX'问题
  6. android安卓 通知notification
  7. Error:Could not launch XXX failed to get the task for process 1105
  8. 使用struts2 做客户端校验时抛出freemarker模版错误异常的处理
  9. 转: DHTMLX Tree中文开发指导
  10. python如何删除对象属性_如何销毁python中属性中的对象?