module param核心模組引數傳遞

2021-08-25 18:58:52 字數 1259 閱讀 1906

在使用者態下程式設計可以通過main()的來傳遞命令列引數,而編寫乙個核心模組則通過module_param()

引數用 moudle_param 巨集定義來宣告, 它定義在 moduleparam.h.

module_param(name,type,perm);

module_param 使用了 3 個引數: 變數名, 它的型別, 以及乙個許可權掩碼用來做乙個輔助的 sysfs 入口(啥意思). 這個巨集定義應當放在任何函式之外, 典型地是出現在原始檔的前面.定義如:

static char *whom = "world";

static int howmany = 1;

module_param(howmany, int, s_irugo);

module_param(whom, charp, s_irugo);

模組引數支援許多態別:

bool

invbool

乙個布林型( true 或者 false)值(相關的變數應當是 int 型別). invbool 型別顛倒了值, 所以真值變成 false, 反之亦然.

charp

乙個字元指標值. 記憶體為使用者提供的字串分配, 指標因此設定.

intlong

short

uint

ulong

ushort

基本的變長整型值. 以 u 開頭的是無符號值.

陣列引數, 用逗號間隔的列表提供的值, 模組載入者也支援. 宣告乙個陣列引數, 使用:

module_param_array(name,type,num,perm);

這裡 name 是你的陣列的名子(也是引數名),

type 是陣列元素的型別,

num 是乙個整型變數,

perm 是通常的許可權值.

如果陣列引數在載入時設定, num 被設定成提供的數的個數. 模組載入者拒絕比陣列能放下的多的值.

perm引數的作用是什麼?

最後的 module_param 欄位是乙個許可權值; 你應當使用 中定義的值. 這個值控制誰可以訪問這些模組引數在 sysfs 中的表示.如果 perm 被設為 0, 就根本沒有 sysfs 項. 否則, 它出現在 /sys/module下面, 帶有給定的許可權. 使用 s_irugo 作為引數可以被所有人讀取, 但是不能改變; s_irugo|s_iwusr 允許 root 來改變引數. 注意, 如果乙個引數被 sysfs 修改, 你的模組看到的引數值也改變了, 但是你的模組沒有任何其他的通知. 你應當不要使模組引數可寫, 除非你準備好檢測這個改變並且因而作出反應.

使用module param來向核心模組傳遞引數

如果希望給乙個核心模組傳遞引數,則可以通過module param 引數用moudle param巨集定義來宣告,它定義在moduleparam.h。下面是module param巨集的定義 this is the fundamental function for registering boot ...

使用module param來向核心模組傳遞引數

如果希望給乙個核心模組傳遞引數,則可以通過module param 引數用moudle param巨集定義來宣告,它定義在moduleparam.h。下面是module param巨集的定義 this is the fundamental function for registering boot ...

使用module param來向核心模組傳遞引數

如果希望給乙個核心模組傳遞引數,則可以通過module param 引數用moudle param巨集定義來宣告,它定義在moduleparam.h。下面是module param巨集的定義 this is the fundamental function for registering boot ...