快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05
Linux中同步机制的一个很重要的结构体; 用法:我们要用init_completion初始化一个struct completion的结构体变量,然后调用wait_for_completion()这样当前进程就会进入睡眠,处于一种等待状态,而另一个进程可能会去做某事,当它做完了某件事情之后,它会调用complete()函数,一旦它调用这个complete函数,那么刚才睡眠的这个进程就会被唤醒.这样就实现了一种同步机制,或者叫等待机制 代码用法如下: struct completion urb_done; /* set up data structures for the wakeup system */ init_completion(&urb_done); 设置定时器后 198 /* wait for the completion of the URB */ 199 wait_for_completion(&urb_done); 使进程休眠 用completion();函数去唤醒,这个函数在usb_fill_control_urb()中的入参里面可以看到;还记得在调用usb_fill_control_urb()填充 urb的时候咱们设置了一个urb->complete指针吗?当时咱们就看到了,urb->complete=usb_stor_blocking_completion,这相当于向usb host controller driver传达了一个信息.,当urb传输完成了之后,usb host controller会唤醒她,但不会直接唤醒她,而是通过执行之前设定的urb的 complete函数指针所指向的函数; 16、 usb_stor_clear_halt函数讲解 Halt是endpoint的feature; CLEAR FEATURE那是所有的usb设备都通用的,它是usb spec所规定的 实际上usb spec 规定了,对于设备的bulk端点,每当设备在reset 之后,需要清除halt这个feature然后端点才能正常工作; 注释里说得很清楚,有些变态的设备,它就是不跟你按常理出牌,人家能正常响应GetMaxLUN这个request,它偏要耍个性,就是不认spec,你发送GetMaxLUN请求过来,它不予回复,它出现STALL的特点, 什么是STALL? 其实就是Halt,端点挂起,或者通俗一点理解,就是死机了.,毫无疑问,我们要把这个halt给清掉,否则设别没有办法工作了. 拥有帝国一切,皆有可能。欢迎访问phome.net

本文出自 “Paul玩嵌入式Linux” 博客,请务必保留此出处http://zyg0227.blog.51cto.com/1043164/550307

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号