07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

公司推出的,广泛用于Sony 的各种数码产品中.比如数码相机,数码摄影机.<br />

有人问了,啥是LUN 啊?logical unit number.通常在谈到scsi 设备的时候不可避免的要说起LUN.关于<br />

LUN,曾几何时,一位来自Novell(SUSE)的参与开发Linux 内核中usb 子系统的工程师这样对我说,一个<br />

lun 就是一个device 中的一个drive.换言之,usb 中引入lun 的目的在于,举例来说,有些读卡器可以有多<br />

个插槽,比如就是两个,其中一个支持CF 卡,另一个支持SD 卡,那么这种情况要区分这两个插槽里的冬冬,<br />

就得引入lun 这么一个词.这叫逻辑单元.很显然,像U盘这样简单的设备其LUN必然是一个.有时候,人们常<br />

把U 盘中一个分区当作一个LUN,这样说可能对小学三年级以下的朋友是可以接受的,但是作为一个成年<br />

人,<br />

不应该这么理解.<br />

知道了LUN 以后,自然就可以知道US_FL_SINGLE_LUN 是干嘛了,这个flag 的意义很明显,直截了当的<br />

告诉你,我这个设备只有一个LUN,它不支持多个LUN.而max_lun 又是什么意思?us 中的成员max_lun<br />

等于一个设备所支持的最大的lun 号.即如果一个设备支持四个LUNs,那么这四个LUN 的编号就是<br />

0,1,2,3,而max_lun 就是3.如果一个设备不用支持多个LUN,那么它的max_lun 就是0.所以这里<br />

max_lun 就是设为了0.<br />

另外一个需要注意的地方是,比较一下各个case 语句,发现, US_PR_BULK 和别的case 不一样,别的<br />

case<br />

下面都设置了us->max_lun,而对应于Bulk-Only 协议的这个case,它没有设置us->max_lun,这是为<br />

何?别急,后来我们会专门有一个函数去读取这个值的,之所以不设,是因为这个值由设备说了算,必须向设备<br />

52<br />

查询,这是Bulk-Only 协议规定的.所以我们之后会遇见usb_stor_Bulk_max_lun()函数,它将负责获取<br />

这个max lun.而我依然要声明一次,这个函数对我们U 盘是没啥意义的,咱们这个值肯定是0.<br />

至此,get_transport()也结束了,和get_device_info 一样.我们目前所看到的这些函数都不得不面对现<br />

实,<br />

对它们来说,凋谢是最终的结果,盛开只是一个过程...而对我们来说,要到达终点,那么和这些函数狭路相逢,<br />

终不能幸免.然而,不管这部分代码有多么重要,也不过是我们整个长途旅程中,来去匆匆的转机站,无论停留<br />

多久,始终要离去坐另一班机.<br />

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

道不尽红尘舍恋诉不完人间恩恩怨怨.<br />

看完了get_transport()继续看get_protocol()和get_pipes().仍然是来自<br />

drivers/usb/storage/usb.c 中:<br />

647 /* Get the protocol settings */<br />

648 static int get_protocol(struct us_data *us)<br />

649 {<br />

650 switch (us->subclass) {<br />

651 case US_SC_RBC:<br />

652 us->protocol_name = "Reduced Block Commands (RBC)";<br />

653 us->proto_handler = usb_stor_transparent_scsi_command;<br />

654 break;<br />

655<br />

656 case US_SC_8020:<br />

657 us->protocol_name = "8020i";<br />

658 us->proto_handler = usb_stor_ATAPI_command;

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

Saved successfully!

Ooh no, something went wrong!