10、 usb_stor_clear_halt函数讲解
Halt是endpoint的feature; CLEAR FEATURE那是所有的usb设备都通用的,因为它是usb spec所规定的
实际上usb spec 规定了,对于设备的bulk端点,每当设备在reset 之后,需要清除halt这个feature然后端点才能正常工作;
注释里说得很清楚,有些变态的设备,它就是不跟你按常理出牌,人家能正常响应GetMaxLUN这个request,它偏要耍个性,就是不认spec,你发送GetMaxLUN请求过来,它不予回复,它出现STALL的特点,
其实就是Halt,端点挂起,或者通俗一点理解,就是死机了.所以,毫无疑问,我们要把这个halt给清掉,否则设别没有办法工作了.
SCSI设备驱动包含4个模块:sd_mod.ko,sr_mod.ko,st.ko,sg.ko
其中scsi_mod的模块为scsi的核心模块(scsi core);
HBA:host bus adapter(scsi host),相应的驱动程序就叫Host Bus Adapter driver了;
所有的scsi设备都至少需要支持以下这四个scsi 命令:
INQUIRY, REQUEST SENSE, SEND DIAGNOSTIC, TEST UNIT READY.
对于磁盘这样的设备(read,write,format unit等操作),SCSI协议里边称它为direct-access devices
scsi host的作用:它主要就是负责发送命令给设备,然后设备就去执行命令.所以scsi host也被称为initiator(发起者),而scsi 设备被称为target(目的地).
如果我们没有scsi host,但是我们有遵守scsi协议接受scsi命令的device,那怎么办?
答:谁来发起命令?没有硬件我们 用软件,命令是谁传递过来的?应用层?或者scsi core?不管是谁,只要我们能够把上层的命令传递给设备,那就Ok了对不对?scsi 核心层把一切都做好了,我们只要为一个scsi host申请相应的数据结构,让命令来了能够发送给设备,能够让设备接收到命令,那就万事大吉了对不对?或者说整个usb-storage的真正的功能也就实现了对不对?
18、scsiglue.c(glue就是胶水的意思,与scsi 相关联的代码我们就都准备在这个文件里了.)
本文转自 曾永刚 51CTO博客,原文链接:http://blog.51cto.com/zyg0227/551008