分享

Linux USB驱动框架分析-Linux -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,服务器租赁,为7万用户提供服务

 langhuayipian 2011-03-03
MODULE_DEVICE_TABLE (usb, skel_table);
    MODULE_DEVICE_TABLE的第一个参数是设备的类型,如果是USB设 备,那自然是usb(如果是PCI设备,那将是pci,这两个子系统用同一个宏来注册所支持的设备。这涉及PCI设备的驱动了,在此先不深究)。后面一个 参数是设备表,这个设备表的最后一个元素是空的,用于标识结束。代码定义了USB_SKEL_VENDOR_ID是 0xfff0,USB_SKEL_PRODUCT_ID是0xfff0,也就是说,当有一个设备接到集线器时,usb子系统就会检查这个设备的 vendor ID和product ID,如果他们的值是0xfff0时,那么子系统就会调用这个skeleton模块作为设备的驱动。

这些宏定义在<linux/module.h>

MODULE_AUTHOR(name)

定义驱动的编程者,namestring

MODULE_LICENSE(license)

定义驱动的license,一般为GPL,或相关公司的license

MODULE_DESCRIPTION(desc)

对驱动程序的描述,string

MODULE_SUPPORTED_DEVICE(name)

驱动程序所支持的设备,string

MODULE_PARM(var,type)

提供在运行时通过控制台将参数传递给模块 (insmod)
如果我们想用这个宏来传递命令行参数,那么在我们的模块中定义一个全局变量.insmod模块时,便可以用参数的形式,将具体的实参传递给模块中的那个全局变量.
MODULE_PARM(name,type)
有两个参数,一个是这个全局变量的名称,另一个是这个全局变量的类型.
而他的类型有一下几种:
b:
比特型
h:
短整型
i:
整型
l:
长整型
s:
字符串型
在传递字符串型的参数时,这个全局变量需要在模块中用Char *来声明!insmod会自动为其分配内存空间.
例如:
int a = 3;
char *st;
MODULE_PARM(a,”i”);
MODULE_PARM(st,”s”);
insmod是我们加这样的参数:
insmode a.o “a = 3″, “st = hello world”
这里最重要的是,MODULE_PARM()也支持我们最常用的数组类型.用短线’-'把两个数字分开,分别表示数组参数中的最小位数和最大位数.例如:
int array[8];
MODULE_PARM(array,”1-8i”);
在命令行我们使用加这样的参数:
insmod a.o “array = 38745,123,4000″

在那和模块编程时,我们往往给这些全局变量以默认值,如果我们才insmod时没有传入参数时,模块会使用这些默认值,而如果我们传入参数时,这些默认值便被覆盖掉.

MODULE_PARM_DESC(var,desc)

对变量的描述

GPL_HEADER()

THIS_MODULE

指向全局变量 __this_module struct module)的指针

系统对每个模块维护一个usage counter,以便决定何时可以安全的卸载模块

下面的宏用来对该usage counter操作,usage counter可以通过/proc/modules

文件查看

MOD_INC_USE_COUNT

MOD_DEC_USE_COUNT

MOD_IN_USE

MODULE_DEVICE_TABLE

EXPORT_SYMTAB

预处理宏,当在程序中用EXPORT_SYMBOL等宏时需要定义该宏。例如,可以在Makefile中定义:-DEXPORT_SYMTAB

__EXPORT_SYMBOL(sym,str)

EXPORT_SYMBOL(var)

EXPORT_SYMBOL_NOVERS(var)

导出一个符合到内核符号表,导出后,该符合可以供其他模块使用。这个宏有助于编写驱动程序时清楚的划分出层次。可以通过/proc/ksyms文件或ksyms命令查看内核符号表。EXPORT_SYMBOL_NOVERS(var),导出是不带版本信息。在使用该宏时,需定义

EXPORT_SYMBOL_GPL(var)

EXPORT_NO_SYMBOLS

显示指出,该模块不向内核符合表导出符号

SET_MODULE_OWNER

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多