Linux驅動程式中THIS MODULE 的定義

2021-06-06 02:55:07 字數 1065 閱讀 2394

struct module ;

我們插入乙個核心模組,一般會使用工具insmod,該工具實際上呼叫了系統呼叫init_module,在該系統呼叫函式中,首先呼叫load_module,把使用者空間傳入的整個核心模組檔案建立成乙個核心模組,返回乙個struct module結構體。核心中便以這個結構體代表這個核心模組。

state是模組當前的狀態。它是乙個列舉型變數,可取的值為:module_state_live,module_state_coming,module_state_going。分別表示模組當前正常使用中(存活狀態),模組當前正在被載入,模組當前正在被解除安裝。load_module函式中完成模組的部分建立工作後,把狀態置為module_state_coming,sys_init_module函式中完成模組的全部初始化工作後(包括把模組加入全域性的模組列表,呼叫模組本身的初始化函式),把模組狀態置為module_state_live,最後,使用rmmod工具解除安裝模組時,會呼叫系統呼叫delete_module,會把模組的狀態置為module_state_going。這是模組內部維護的乙個狀態。

list是作為乙個列表的成員,所有的核心模組都被維護在乙個全域性鍊錶中,煉表頭是乙個全域性變數struct module *modules。任何乙個新建立的模組,都會被加入到這個鍊錶的頭部,通過modules->next即可引用到。

name是模組的名字,一般會拿模組檔案的檔名作為模組名。它是這個模組的乙個標識。

另外,還要介紹一下巨集this_module,它的定義如下是#define this_module (&__this_module),__this_module是乙個struct module變數,代表當前模組,跟current有幾分相似。可以通過this_module巨集來引用模組的struct module結構,試試下面的模組:

#include

module_license("dual bsd/gpl");

static int hello_init(void)

static void hello_exit(void)

module_init(hello_init);

module_exit(hello_exit);

linux 驅動程式 高階字元驅動程式

ioctl方法 驅動程式的原型實現 int ioctl struct inode inode,struct file filp,unsigned int cmd,unsigned long arg ioctl 命令選擇 位段結構 number direction ioc read ioc write...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...