Linux模組程式設計系列之二 熟悉特定的巨集

2021-04-13 21:37:52 字數 2525 閱讀 5550

這些巨集定義在下

module_author(name)

定義驅動的程式設計者,name為string

module_license(license)

定義驅動的license,一般為gpl,或相關公司的license

module_description(desc)

對驅動程式的描述,string

module_supported_device(name)

驅動程式所支援的裝置,string

module_parm(var,type)

提供在執行時通過控制台將引數傳遞給模組(在

in**od時)

如果我們想用這個巨集來傳遞命令列引數

,那麼在我們的模組中定義乙個全域性變數.在

in**od

模組時,

便可以用引數的形式

,將具體的實參傳遞給模組中的那個全域性變數

.module_parm(name,type)

有兩個引數

,乙個是這個全域性變數的名稱

,另乙個是這個全域性變數的型別

.而他的型別有一下幾種:b:

位元型h:

短整型i:

整型l:

長整型s:

字串型

在傳遞字串型的引數時

,這個全域性變數需要在模組中用

char *

來宣告!in**od

會自動為其分配記憶體空間.例如

:int a = 3;

char *st;

module_parm(a,」i」);

module_parm(st,」s」);

在in**od

是我們加這樣的引數

:in**ode a.o 「a = 3″, 「st = hello world」

這裡最重要的是

,module_parm()

也支援我們最常用的陣列型別

.用**

』-'把兩個數字分開

,分別表示陣列引數中的最小位數和最大位數.例如

:int array[8];

module_parm(array,」1-8i」);

在命令列我們使用加這樣的引數

:in**od a.o 「array = 38745,123,4000″

在那和模組程式設計時,我們往往給這些全域性變數以預設值,如果我們才in**od時沒有傳入引數時,模組會使用這些預設值,而如果我們傳入引數時,這些預設值便被覆蓋掉.

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

核心模組程式設計入門之二

模組程式設計屬於核心程式設計,因此,除了對核心相關知識有所了解外,還需要了解與模組相關的知識。1 應用程式與核心模組的比較 為了加深對核心模組的了解,表一給出應用程式與核心模組程式的比較。表一 應用程式與核心模組程式的比較 c語言應用程式 核心模組程式 使用函式 libc庫 核心函式 執行空間 使用...

給Linux新手 系列之二

ok,你的第乙個問題是 什麼是linux,它和unix有什麼區別?問這個問題的原因呢,多半是你還在大一的時候一次去實驗室,看到高年紀學生在乙個特大螢幕的機器上作題,你羨慕的看著他,問 這是什麼計算機啊,這麼高階?而他不無驕傲的說,這是unix 後來 多了,知道那是sun工作站,上面執行著solari...

hibernate系列之二

首先先介紹一下持久化 持久化 將程式資料在持久狀態和瞬時狀態間轉換的機制 即將記憶體的資料永久存在關係型資料庫中 持久化類的編寫規則 持久化類需要提供無參構造方法 持久化類的屬性需要私有,對私有的屬性提供get set方法 持久化類的屬性盡量使用包裝類的型別 持久化類要有乙個唯一標識oid與表的主鍵...