蜗牛移动新卡不能激活:linux/module.h

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 21:30:00
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模块作为设备的驱动。

这些宏定义在

MODULE_AUTHOR(name)

定义驱动的编程者,name为string

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为了您的安全,请只打开来源可靠的网址

打开网站    取消