快速业务通道

读Linux那些事儿之我是U盘笔记(三)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05

10、 互斥锁:一个女孩如果心有所属,那么对你来说,就 仿佛已有人在你之前给她上了一把锁,而钥匙,不在你这里.(很形象哦) 互斥锁指的就是一个资源只能同时被一个进程操作,互斥的字面意思也正是如此.互相排斥,就像爱情是自私的一样 down和up这两个函数的作用分别就是去获得锁和释放锁.对于down来说,它每次判断一下信号量的值是否大于0,若是,就进入下面的代码,同时将信号量的值减一,若否,就等待,或者说专业一点,进入睡眠. 11、 作为设备驱动程序,只需要提交一个urb就可以了,剩下的事情usb core 会去处理,有了结果它会通知我们.而提交urb,usb core为我们准备了一个函数,usb_submit_urb()不管我们使用什么传输方式,我们都只要调用这个函数即可,在此之前,我们需要做的只是准备好这么一个urb,把urb中各相关的成员填充好,然后就ok了.而这usb_stor_msg_common正是这样做的.而显然,不同的传输方式其填写urb的方式也不同. 12、 URB_NO_SETUP_DMA_MAP表明:如果使用DMA传输,则urb中setup_dma指针所指向的缓冲区是DMA缓冲区,而不是setup_packet所指向的缓冲区接下来再或上URB_NO_TRANSFER_DMA_MAP则表明,如果本urb有一个DMA缓冲区需要传输,则该缓冲区是transfer_dma指针所指向的那个缓冲区,而不是transfer_buffer指针所指向的那一个缓冲区.换句话说,如果没设置这两个DMA的flag,那么usb core就会使用setup_packet和transfer_buffer作为数据传输的缓冲区,然后下面两行就是把us 的iobuf_dma和 cr_dma赋给了 urb的transfer_dma和setup_dma.; 注释表明,只要transfer_buffer被赋了值,那就假设有DMA缓冲区需要传输,于是就去设URB_NO_TRANSFER_DMA_MAP. 拥有帝国一切,皆有可能。欢迎访问phome.net13、 usb_submit_urb: 这个函数参数一个是提交的urb,另外一个是GFP_NOIO,意思就是不能在申请内存的时候进行IO操作,目的是为了杜绝嵌套死循环; 14、 定时器 用init_timer()函数和add_timer()函数来真正实现设置闹钟init_timer()是初始化,然后 设置好之后调用add_timer 才能让闹钟生效 Jiffies:Linux内核中赫赫有名的全局变量,表示当前时间 HZ: 1秒 同步调用: 函数执行过程中可以进入睡眠,满足一定条件再醒来继续执行(usb_kill_urb) 异步调用:异步调用则不会睡眠(usb_unlink_urb) 定时器常规用法: 189 /* submit the timeout timer, if a timeout was requested */ struct timer_list to_timer; 190 if (timeout > 0) { 191 init_timer(&to_timer); 192 to_timer.expires = jiffies timeout; 193 to_timer.function = timeout_handler; 194 to_timer.data = (unsigned long) us; 195 add_timer(&to_timer); } 202 /* clean up the timeout timer */ 203 if (timeout > 0) 204 del_timer_sync(&to_time) //删除定时器 解释:在add_timer()之前,为to_timer.expires赋值为jiffies timeout,to_timer.function赋值为timeout_handler,to_timer.data赋值为us.并利用us中的flag标志,这表示,超时时间点为当前时间加上一个timeout,(jiffies:Linux内核中赫赫有名的全局变量,表示当前时间),timeout咱们前面调用usb_stor_msg_common的时候给设置成了HZ,也就是1秒.当时间到了之后,timeout_handler函数会被执行,而us作为参数传递给她.; 拥有帝国一切,皆有可能。欢迎访问phome.net15、 completion机制 completion

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号