這些宏定義在<linux/module.h>下
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