Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
222 .useTransport = US_PR_BULK},<br />
223 #if !defined(CONFIG_BLK_DEV_UB)<br />
&& !defined(CONFIG_BLK_DEV_UB_MODULE)<br />
224 { .useProtocol = US_SC_SCSI,<br />
225 .useTransport = US_PR_BULK},<br />
226 #endif<br />
227<br />
228 /* Terminating entry */<br />
229 { NULL }<br />
230 };<br />
无可奈何花落去,似曾相识燕归来.这个数组看上去特别面熟对不对?可曾记得当初我们见过的那个<br />
storage_usb_ids,仔细对比一下会发现,这两个数组的元素个数完全一样,只不过,一个由是struct<br />
usb_device_id 结构体构成的,另一个则是struct us_unusual_dev 结构体构成的,其实这两个表格是<br />
一<br />
一对应的,它们也都定义于同一个文件中. 细心一点会注意到,UNUSUAL_DEV 这个宏在这个文件里被定<br />
义了两次,这是干嘛用的?听仔细了,我们曾经提过unusual_devs.h 这个文件,这个文件的作用是什么?假<br />
设没有这个文件,那么storage_usb_ids 这张表就是用USB_INTERFACE_INFO 这个宏定义了几种常<br />
规<br />
的usb mass storage 的设备,比如,<br />
{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_RBC, US_PR_CB) },<br />
这一行就是定义一个设备的bInterfaceClass,bInterfaceSubClass,bInterfaceProtocol,也就是说<br />
一个usb interface 只要其这三个项特点与这张表里定义的任何一行匹配,那么就可以把这个设备和这个<br />
驱<br />
动绑定,但是这三个条件毕竟只是规定了一些主流的或者说常规的设备的特点,这个世界上usb mass<br />
storage 设备有许多种,林子大了,什么鸟都有.如果你的设备不符合这三个条件但是你仍然要用这个驱动<br />
怎<br />
么办?或者说你的设备不一般,在正式工作之前需要进行一些初始化的操作,你想自己提供一个初始化函数,<br />
那怎么办?伟大的Linux 内核开发者们为你准备了一个文件,它就是让诸多usb mass storage 设备厂家<br />
欢<br />
欣鼓舞的unusual_devs.h,有了它,厂家们不用再为自己的设备不被Linux 内核支持而烦恼了.虽然我们<br />
的<br />
U 盘基本上不属于这些另类设备,但作为一个有责任心的社会主义新青年,我们有必要为这个文件说两句.<br />
冬天来了,春天还会远吗?(二)<br />
我们打开unusual_devs.h吧,随便看一下,发现里边就是很多一个个UNUSUAL_DEV宏,每一行就是这么<br />
一个宏,毫无疑问它对应一种设备,我们从其中挑一个来看,比如挑一个三星的吧,过去在Intel 的时候,前辈<br />
们会说,若不是当初我们对自己太自信了,这个世界上又怎么有三星的生存空间.说的是上世纪末,Intel 决<br />
定<br />
提高flash 产品的价格,而Nokia 这个大客户不干了,它想找别人,一个叫三星的小公司鬼魅般的出现了,没<br />
42<br />
有人相信这样一个小公司能够满足Nokia,可是,韩国人,韩国人的韧劲不仅仅是体现在足球场上.于是,世界<br />
上有了三星,Nokia 养活了三星,而Intel,在flash 这一领域失去了一个重要的客户,副CEO也为此引咎辞职<br />
了.而下面这个设备,正是来自三星的一个flash 产品.