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.

3. useProtocol 为US_SC_DEVICE, useTransport 为US_PR_DEVICE,这种情况就说明对<br />

于这种设备,它属于什么subclass,它使用什么通信协议,得从设备描述符里边去读取,它都写在那里边了.<br />

一会我们会看到我们的代码中会如何判断这个的.<br />

4. initFunction 等于NULL,这个很有意义的,这个函数就是设备的初始化函数,一般的设备都不<br />

需要这个函数,但是有些设备它偏要标新立异,它就告诉你,要用我的设备你必须先做一些初始化,于是它提<br />

供了一个函数,initFunction 当然是一个函数指针,这里如果不为NULL 的话,到时候就会被调用,以后我们<br />

会看到代码中对这个指针进行了判断.如果为空不理睬,否则就会执行.比如我们看下面两处,惠普的两个设<br />

备,它就提供了一个叫做init_8200e 的初始化函数,<br />

63 UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001,<br />

64 "HP",<br />

65 "CD-Writer+ 8200e",<br />

66 US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),<br />

67<br />

68 UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001,<br />

69 "HP",<br />

70 "CD-Writer+ CD-4e",<br />

71 US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),<br />

5. flag 等于US_FL_FIX_INQUIRY,这个flag 可以设为很多值,这个flag 的存在本身就表示这<br />

个设备有些与众不同,因为一般的设备是不用这个flag 的,有这个flag 就表明这个设备可能在某些地方需<br />

要<br />

进行特殊的处理,所以今后在代码中我们会看到突然跳出一句,判断us->flag 等于某个咚咚不,如果等于,<br />

就<br />

执行一些代码,如果不等于,那就不做任何事情.这个flag 的存在也使得我们可以方便处理一些设备的bug,<br />

比如正常的设备你问它吃了吗?它就回答吃了.可是不正常的设备可能就会根本不回答,或者回答北京房价<br />

真贵!于是对于这种设备,可能我们就需要一些专门的代码来对付.具体到这个US_FL_FIX_INQUIRY,这<br />

个flag 这么一设置,就表明这个设备在接受到INQUIRY 命令的时候会有一些异常的特征,所以以后我们会<br />

45<br />

在代码里看到我们是如何处理它的.设置了这个flag 的当然不只是三星的这款相机,别的设备也有可能设置<br />

的.<br />

6. 既然明白了unusual_devs.h 的作用,那么很显然的一个事情,如果一个厂家推出了一个新的<br />

设备,它有一些新的特征,而目前的设备驱动不足以完全支持它,那么厂家首先需要做的事情就是在<br />

unusual_devs.h 中添加一个UNUSUAL_DEV 来定义自己的设备,然后再看是否需要给内核打补丁以及<br />

如何打.因此这几年unusual_devs.h 这个文件的长度也是慢慢在增长.<br />

冬天来了,春天还会远吗?(三)<br />

从两张表得到了我们需要的冬冬,然后下面的代码就是围绕着这两个指针来展开了.(unusual_dev 和id)<br />

476 行,把unusual_dev 给记录在us 里边,反正us 里边也有这么一个成员.这样记录下来日后要用起来<br />

就<br />

方便了,因为us 是贯穿整个故事的,所以访问他的成员很方便,随时都可以,但是us_unusual_dev_list 以<br />

及storage_usb_ids 这两张表这次之后就不会再用了.因为我们已经得到了我们想要的,所以我们就不用<br />

再去骚扰这两个数组了.<br />

477 至483 行,给us 的另外三个成员赋值,subclass,protocol,flags.比如我们的U 盘,它属于主流设备,<br />

在us_unusual_dev_list 列表中能找到它,其subclass 是US_SC_SCSI,而protocol 是Bulk-only,即

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

Saved successfully!

Ooh no, something went wrong!