快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05
了信号可以把她中断.一旦进入睡眠,那么有三种情况,一种是wake_up或者wake_up_interruptible函数被另一个进程执行,从而唤醒她,第二种是信号中断她,第三种就是刚才讲的超时,时间到了,自然就会返回; 在内核2.6.18 montavista linux中有一个 unsigned long fastcall __sched wait_for_completion_interruptible_timeout(struct completion *x, unsigned long timeout)函数,在schd.c中是个函数,同理 6、内核休眠另一方法,电源管理方面 对于usb 设备,它可以进入suspend状态,如果flgs设置了PF_FREEZE这个标记,内核将调用refrigerator();函数让该进程休眠 7、U盘能够工作所需要的模块:usbcore,scsi_mod,sd_mod,usb-storage 其中:sd_mod是scsi disk的驱动程序 8、struct scsi_cmnd *srb很重要的结构,是scsi用来发命令的结构,如usb 使用的urb U盘驱动这里使用,是为了唤醒usb_stor_control_thread 线程,这个线程开始的时候: if(down_interruptible(&us->sema)) //等待scsi queuecommand来唤醒 break; 该线程休眠了,现在除了usb退出,就修要别人去唤醒这个线程,当然使用配套的 up(&(us->sema));了,这个函数定义在queuecommand里面;这个命令是scsi发送的,这个函数定义在usb_stor_host_template里边; 9、确定一个scsi设备的三个元素:unsigned int id, lun, channel 关系:一个scsi 卡所控制的设备被划分为几层,先是若干个channel,然后每个channel 上有若干个target,每个target用一个target id来表征,然后一个target可以有若干个lun,而咱们这里判断的是target id.对于不支持多个target的设备,她为0.对于绝大多数usb mass storage设备来说,它们的target id肯定为0, 但是世界上总是有那么多怪事,有些设备厂家就是要标新立异,它就是要让你个设备支持多个target,于是它就可以设置US_FL_SCM_MULT_TARG这么一个flag

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

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