07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

917 行,再次判断设备有没有被断开,如果还是没有,那么执行scsi_scan_host()函数扫描,扫描然后就知<br />

道这个host 或者说这个scsi 卡上面接了什么设备(虽然咱们这个只是模拟的scsi 卡),然后cat<br />

/proc/scsi/scsi 才能看到您的u 盘嘛不是.(scsi_scan_host()这里面发生了很多很多的故事,但这都是<br />

scsi 那层的故事,咱们暂时先不去关注好不?)<br />

然后922 行,complete_and_exit 函数,她和complete 函数还有一点点不一样,除了唤醒别人,还得结<br />

束自己(exit).她的户口在kernel/exit.c 中:<br />

842 NORET_TYPE void complete_and_exit(struct completion *comp, long code)<br />

843 {<br />

844 if (comp)<br />

845 complete(comp);<br />

846<br />

847 do_exit(code);<br />

848 }<br />

所以这里会先检查&us->scsi_scan_done,在struct us_data 中,定义了一个成员struct completion<br />

scsi_scan_done,而在storage_probe()函数一开始为us 进行初始化的时候,调用了<br />

init_completion(&us->scsi_scan_done)为us->scsi_scan_done 进行了初始化,如果此前<br />

storage_disconnect()函数被调用了,那么她会调用wait_for_completion(&us->scsi_scan_done)<br />

来进入睡眠并且等待咱们这里把她唤醒,此乃后话,暂且不表.待到分析storage_disconnect 的时刻再来<br />

揭<br />

晓.但是如果根本就没有人调用wait_for_completion(&scsi_scan_done),那么也就是说没有人睡眠,那<br />

么这个complete 函数就什么也不做.然后do_exit()函数不用多说,内核提供的函数,结束进程.也就是说,<br />

对于上面这个scan 的精灵进程,到这里她就会结束退出了.可以看出它是一个短命的守护进程,真的不知该<br />

说天妒英才又还是该说红颜命薄呢.总之对于这个精灵进程来说,她的使命就是让你能在cat<br />

/proc/scsi/scsi 中看到你的U 盘,当然了,从此以后你在/dev 目录下面也就能看到你的设备了,比如<br />

/dev/sda.<br />

再来看父进程,也就是storage_probe(),在用kernel_thread()创建了usb_stor_scan_thread 之<br />

后,一切正常的话,storage_probe()也走到了尽头了.1017 行,return 0 了.终于,这个不老的传说也终于<br />

到了老的那一刻,一切都结束了,一切都烟消云散了.在这世上所有的事情都必须有个结束.--席慕蓉<br />

彼岸花的传说(四)<br />

江姐问:国民党推翻了么? 答:被阿扁推翻了,大家都成了好朋友.<br />

董存瑞问:劳动人民还当牛做马么?答:都下岗了,不劳动了.<br />

红色娘子军吴琼花来电话问:姐妹们都翻身得解放了吧? 答:思想解放了,都当小姐了.<br />

杨子荣来电话问:土匪都剿灭了吧?答:都当公安了.<br />

杨白劳来电话问:地主们都打倒了么? 答:都入党了.<br />

马克思来电话问:资本家都消灭了么? 答:都进中央了.<br />

上帝打电话问:看Linux 那些事儿的人都回帖了吗? 答:没回的都在去见你的路上.<br />

如果你把上面这些对话写成程序,烧录到芯片上,那么当外界询问设备的时候,设备就知道该怎么回答.如<br />

果你问姐妹们都翻身得解放了吧?设备就能回答你:思想解放了,都当小姐了.这就是scsi 设备的基本工作方<br />

式.scsi 协议定义了一系列的命令.主机通过发送命令给设备来实现通信.<br />

118<br />

我们刚刚跟着storage_probe()几乎完整的走了一遍,貌似一切都该结束了,可是你不觉得你到目前为止<br />

还根本没有看明白设备究竟怎么工作的吗?U 盘,不仅仅是usb 设备,还是”盘”,它还需遵守usb mass

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!