1、模組載入函式
linux核心模組載入函式一般以__init標識宣告,典型的模組載入函式的形式如下:
static int __init initialization_function(void)
module_init(initialization_function);
模組載入函式必須以「module_init(函式名)」的形式被指定。它返回整型值,若初始化成功,應返回0。而在初始化失敗時,應該返回錯誤編碼。
2、模組解除安裝函式
linux核心模組解除安裝函式一般以__exit標識宣告,典型的模組解除安裝函式的形式如下:
static void __exit cleanup_function(void)
module_exit(cleanup_function);
模組解除安裝函式在模組解除安裝的時候執行,不返回任何值,必須以「module_exit(函式名)」的形式來指定。
通常來說,模組解除安裝函式要完成與模組載入函式相反的功能,如下:
a、如模組載入函式註冊了***,則模組解除安裝函式應該登出***;
b、若模組載入函式動態申請了記憶體,則模組解除安裝函式應該釋放改記憶體;
c、若模組載入函式申請了硬體資源(中斷、dma通道、io埠和io記憶體等)的占用,則模組解除安裝函式應釋放這些硬體資源。
d、若模組載入函式開啟了硬體,則解除安裝函式中一般要關閉硬體。
__init 和 __exit都是巨集,其定義分別如下:
#define __init __attribute__ ((__section__(".init.text")))
#define __exit __attribute__ ((__section__(".exit.text")))
3、模組引數
可以用「module_param(引數名,引數型別,引數讀/寫許可權)」為模組定義乙個引數,例如下列**定義了乙個整型引數和乙個字元指標引數。
static char * book_name = "1232412";
static int num = 12323;
module_param(num ,int , s_irugo);
module_param(book_name , charp , s_irugo);
在裝載核心模組時,使用者可以向模組傳遞引數,形式為「insmode (或modprobe) 模組名 引數名 = 引數值」,如果不傳遞,引數將使用模組內定義的預設值。
4、模組宣告與描述
在linux核心模組中,我們可以用module_author、module_description、module_version、module_device_table、module_alisa分別宣告模組的作者,描述,版本,裝置表和別名,例如:
odule_author(author);
module_description(description);
module_version(version_string);
module_device_table(table_info);
module_alisa(alternate_name);
Linux驅動 模組通訊
編寫模組通訊例項 模組add sub提供add integer 加法與sub integer 減法函式,模組test呼叫函式完成操作。分別對兩模組建立兩個資料夾,編寫對應的.c與makefile檔案,add sub.h在add sub模組資料夾內,分別make編譯成功。遇到的問題 1.insmod ...
Linux裝置驅動 模組
模組檔案 在檔案系統中可以被直接插入到核心的檔案 模組三要素 模組載入函式 必須 當在檔案系統中使用insmod或者該模組在核心被執行的時候,自動執行該函式 函式方式 1 預設方式 int init module void 2 使用者自定義 int test init void module ini...
編譯Linux驅動模組
xz d linux 5.7.8.tar.xz tar xf linux 5.7.8.tar cd linux 5.7.8 make menuconfig 執行make menuconfig 報錯 error 1 unable to find the ncurses package.install ...