读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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: awk的一个实例下一篇: linux下的mysql数据库大小写问题
关于读Linux那些事儿之我是U盘笔记(五)的所有评论