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.

233 .owner = THIS_MODULE,<br />

234 .name = "usb-storage",<br />

235 .probe = storage_probe,<br />

236 .disconnect = storage_disconnect,<br />

237 .id_table = storage_usb_ids,<br />

238 };<br />

可以看到这里定义了一个struct usb_driver 的结构体变量,usb_storage_driver,关于usb_driver 我<br />

们<br />

上节已经说过了,当时主要说的是其中的成员driver,而眼下要讲的则是另外几个成员.首先,.owner<br />

和.name 这两个没啥好多说的,owner 这玩艺是用来给模块计数的,每个模块都这么用,赋值总是<br />

THIS_MODULE,而name 就是这个模块的名字,usb core 会处理它,所以如果这个模块正常被加载了的<br />

话,<br />

使用lsmod 命令能看到一个叫做usb-storage 的模块名.重点要讲一讲,.probe 和.disconnect 以及这<br />

个<br />

id_table.<br />

我是谁的他?<br />

probe,disconnect,id_table,这三个咚咚中首先要登场亮相的是id_table,它是干嘛用的呢?<br />

我们说过,一个device 只能绑定一个driver,但driver 并非只能支持一种设备,道理很简单,比如<br />

我有两块U盘,那么我可以一起都插入,但是我只需要加载一个模块,usb-storage,没听说过插入<br />

两块U 盘就得加载两次驱动程序的,除非这两块U 盘本身就得使用不同的驱动程序.也正是因为<br />

一个模块可以被多个设备共用,才会有模块计数这么一个说法.<br />

ok,既然一个driver 可以支持多个device,那么当发现一个device 的时候,如何知道哪个driver<br />

才是她的Mr.Right 呢?这就是id_table 的用处,让每一个struct usb_driver 准备一张表,里边<br />

注明该driver 支持哪些设备,这总可以了吧.如果你这个设备属于这张表里的,那么ok,绑定吧,如<br />

果不属于这张表里的,那么不好意思,您请便.哪凉快上哪去.<br />

来自struct usb_driver 中的id_table,<br />

const struct usb_device_id *id_table;<br />

实际上是一个指针,一个struct usb_device_id 结构体的指针,当然赋了值以后就是代表一个数<br />

组名了,正如我们在定义struct usb_driver usb_storage_driver 中所赋的值那<br />

样,.id_table=storage_usb_ids,那好,我们来看一下usb_device_id 这究竟是怎样一个结构<br />

体.<br />

struct usb_device_id 来自include/linux/mod_devicetable.h,<br />

40 /*<br />

41 * Device table entry for "new style" table-driven USB drivers.<br />

42 * User mode code can read these tables to choose which modules to load.<br />

43 * Declare the table as a MODULE_DEVICE_TABLE.<br />

44 *<br />

45 * A probe() parameter will point to a matching entry from this table.<br />

46 * Use the driver_info field for each match to hold information tied<br />

17<br />

47 * to that match: device quirks, etc.<br />

48 *

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

Saved successfully!

Ooh no, something went wrong!