Linux核心模組 下

2021-10-03 06:27:18 字數 2468 閱讀 6255

目錄

5.模組傳參

5.1模組傳參函式

5.2模組傳遞字串引數函式

5.3模組傳遞陣列引數函

模擬應用層**傳參:

//應用層

int main(int argc,char *ar**);

int mian(int argc,char **ar**);

在 執行程式的時候,可以通過命令列的方式給main函式傳遞引數

//同樣在執行核心模組的時候,也可以給核心模組傳參

/linux/moduleparam.h標頭檔案包含模組傳參的資訊

module_param(name,type,perm)

功能:核心模組傳參

引數:name:  變數名

type:引數的資料型別

perm:許可權(0644),在sysfs可見

一般情況下,我們不需要在模組執行以後,進行引數傳遞,所以perm許可權一般設定成0

1 #include 2 #include 3 #include 4 #include 5 

6 int num = 10;

7 8

9 10 module_param(num, int, 0644);

11 12

13 int __init demo_init(void)

14 19

20 void __exit demo_exit(void)

21

在載入核心模組的時候進行引數的傳遞

載入模組的時候不去傳參,預設引數是10

去此路徑下可以找到對應的引數檔案,許可權是644

功能: 模組傳參

name: 外部傳參名   外部傳參名一般情況下和內部變數名設定成一樣的

string: 內部變數名

len:長度

perm:許可權

#define n 32

8 9 char buf[n] = "adaswe";

10 int num = 10;

11 char *p = "hello";

12 module_param(num, int, 0644);

13 module_param(p, charp, 0);

14 module_param_string(buf_ex,buf,n,0);

15 int __init demo_init(void)

16

編譯,執行:

dmesg列印核心資訊:

name:引數名

type:型別 int short ushort charp

nump: 指標型別,該位址存放的是傳入的引數個數(陣列元素的個數)

perm:許可權,在sysfs可見

dmesg列印資訊

實現模組間函式相互呼叫

先宣告外部函式,然後再呼叫

export_symbol_gpl匯出符號表後,其他模組函式可以呼叫此函式

moudule.symvers是匯出符號表檔案,usr想呼叫exp的func函式的話必須有此檔案,否則編譯會報錯

載入完畢後dmesg檢視資訊

Linux核心模組

核心模組 在整個啟動的過程中,是否能成功的驅動我們主句的硬體裝置,是核心完成的工作,而核心一般都是壓縮文件,在使用之前核心之前必須要將核心減壓到的記憶體中。為了應對日新月異的硬體,目前核心都具有可讀取模組化驅動程式的功能,也就是所謂的 modules模組化 所謂模組化。核心與核心模組放在 核心 bo...

Linux核心模組

1 核心模組註冊登出 塊載入函式有返回值,模組解除安裝函式無返回值。兩者都是無參函式,載入函式用 init修飾,解除安裝函式用 exit修飾。define init attribute section init.text define exit atrribute section exit,text...

Linux 核心模組

linux 核心模組程式結構 1 模組載入函式 2 模組解除安裝函式 3 模組許可證宣告 4 模組引數 5 模組匯出符號 6 模組作者等資訊宣告 模組載入函式 一般以 init 標識 在 linux 中,所有標識為 init 的函式如果直接編譯進核心,成為核心映象的一部分,在連線的時候都會放在 in...