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.

对爱你的人掘了一条无法跨越的沟渠.<br />

曾经天真的以为代码看到这里,该出场的函数也都出场了,该出场的数据结构也都出场了,不会有什么新鲜<br />

的冬冬了.曾经天真的以为我们即将知道整个驱动是如何工作的了.未曾想到,我们距离完全了解整个故事还<br />

有一光年. 挡在我们面前的,是scsi. 的确,看一个U 盘驱动不仅仅是要了解usb 协议,还要懂scsi 协议,要<br />

知道U 盘它不仅仅是usb 设备,它还是”盘”,它要存储数据,所以才叫它usb mass storage,所以才叫它海<br />

量存储,而U 盘,它所遵循的传输协议叫bulk-only 传输,它所遵循的指令集叫做SCSI transparent<br />

command sets.换句话说,U 盘究竟怎么通信?使用scsi 命令.你不懂scsi 协议行吗?<br />

没办法,如果你对scsi 协议完全不了解.那么对不起,先抽点空熟悉一下scsi 协议,熟悉一下scsi 命令集吧.<br />

不要说你没有时间,雷锋同志说的好,时间就像乳沟,只要肯挤,总是有的.去google 一把吧,去百度一把吧.<br />

我们在这里等你.<br />

如果你真的不去看,那好吧,我假设你了解一点吧,什么是scsi?无非也是一类总线.不过我们通常大多数普<br />

通人并不会接触scsi,公司里边用得多,比如scsi 硬盘,校园里边大学生通常不用scsi 硬盘,用ide 硬盘.每<br />

种<br />

硬盘都有它的市场.就像每个明星都有它的fans 一样.于是我们知道这个世界上有玉米,有凉粉,有盒饭.那<br />

么常见的硬盘就是scsi 硬盘和ide 硬盘.scsi 硬盘属于scsi 设备中的一种,有设备就有总线,有总线就有协<br />

议,所以我们知道了这个世界上有一种协议叫做scsi 协议,就好比我们usb 世界里有usb 协议一样.时下流<br />

行的是SCSI-2 协议.Linux 内核代码中自然也按这个协议来为scsi 设备准备设备驱动程序.<br />

关于scsi,drivers 目录下面当然也有一个子目录是属于它的,那就是drivers/scsi 目录.如果你有雅兴用<br />

ls 命令看一下,你会发现这下面的文件那是相当的多.如果你真的很感兴趣,那么请从Kconfig 文件和<br />

Makefile 文件开始看起.去深入了解一下Linux 整个scsi 子系统是怎么工作的.我就不奉陪了.不过正如<br />

我<br />

们曾经介绍过的2.6 中伟大的设备模型实现了这么一件事情,不管你是pci 还是usb 还是scsi,都给你定义<br />

一条总线,然后总线上面两棵树,一棵是设备,一棵是驱动,对于设备这棵树,pci 有pci 的扫描方法,usb 有<br />

usb 的扫描方法,scsi 有scsi 的扫描方法,总之这个过程被称为总线枚举,枚举完了之后设备这棵树就建立<br />

好<br />

了,同时drivers 这棵树也会一步一步建立.每类设备有它自己的比较方法,要是合适,就把一个设备和一个<br />

驱动绑定起来,这样子,驱动程序提供的函数自然就会在需要的时候被调用,那么,谁来调用?<br />

Ok,如果你是代码设计者,你会怎么处理?你打算如何为整个scsi 系统规划代码?不知道?真的不知道?那<br />

么我真的羡慕你这么年轻就认识我了.不过,可惜,我也不知道.经过在复旦四年的大学教育,我已经被训练成<br />

了一名合格的人渣.这几年里我们关注的只是璩美凤的被偷拍事件,只是赵忠祥的录音事件,只是李金斗的嫖<br />

娼事件,只是阿丘的包二奶事件,却从未曾关注过自己应该学点什么,作为一名生在红旗下长在新中国的共产<br />

主义接班人,惭愧啊!<br />

算了,不知道就不知道吧,让我们来思考一下.就像usb 子系统那边一样,usb 那边有一部分核心代码,被称<br />

为usb core,那么scsi 这边自然也应该有这么一部分代码吧,也叫scsi core,这你没意见吧.usb 那边弄了<br />

一个usb host 目录,然后各种设备也分了类,比如storage 设备,比如input 设备,比如serial 设备,比如<br />

image 设备,那是因为usb 的世界里有两个角色,一个是host,一个是设备,那scsi 这边是不是也可以这样<br />

90<br />

呢?先不说可不可以这样,事实情况是,没有这样,所有的冬冬都一股脑儿堆在drivers/scsi/目录下面,有朝<br />

一日你要是混入了开发队伍中,你不妨提议把这个目录整理一下,别像现在这样,至少看上去整齐一点,乱七<br />

八糟不象话.不过也许开发者们有他们自己的理由吧,他们也许没有时间,那么你可以告诉他们雷锋同志是如<br />

何说的.开发者们把scsi 设备分成了四类,于是他们写了四个模块来为这些设备做驱动程序.这四个模块是<br />

sd_mod.ko,sr_mod.ko,st.ko,sg.ko.如果你正在Linux 下使用U 盘,那么用lsmod 查看一下当前安装<br />

的模块,你一定会看到一个叫做sd_mod 的模块,一定会看到一个叫做scsi_mod 的模块,scsi_mod.ko<br />

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

Saved successfully!

Ooh no, something went wrong!