linux核心版本:3.3
linux 允許在系統執行時載入或者去除一塊核心**,稱為乙個核心模組。模組化的設計可以使linux核心映象盡可能的小,同時又方便對新功能進行除錯。也能實現裝置的熱插拔。
模組和應用程式的不同之處在於,模組只是提供服務給應用程式呼叫,有點類似庫。模組也不能呼叫c庫,但linux會提供相應的函式。模組去除的時候必須清理掉初始化時做的事情,如申請記憶體,註冊裝置等等。
#include
#include
static
int __init test_init
(void
)static
void __exit test_exit
(void
)module_init
(test_init)
;module_exit
(test_exit)
;module_license
("gpl");
module_author
("hgl"
);
#include ,這兩個標頭檔案是模組必須包含的。
module_init用來指定初始化函式,在模組載入的時候會執行,module_exit指定去除模組時要執行的函式。
__init : 當核心把驅動初始化完後, 釋放此函式的**指令空間,此函式只跑一次。
__exit : 指定此函式只在驅動解除安裝時使用, 用完後釋放。
#define __init __section(.init.text)
#define __exit __section(.exit.text)
printk和printf用法一致,這裡不能使用prinf,但核心提供了printk列印函式,printk是由分級別的:
#define kern_emerg "<0>" /* system is unusable */
#define kern_alert "<1>" /* action must be taken immediately */
#define kern_crit "<2>" /* critical conditions */
#define kern_err "<3>" /* error conditions */
#define kern_warning "<4>" /* warning conditions */
#define kern_notice "<5>" /* normal but significant condition */
#define kern_info "<6>" /* informational */
#define kern_debug "<7>" /* debug-level messages */
預設級別為4 kern_warning。
檢視當前核心的輸出級別 cat /proc/sys/kernel/printk
7 4 1 7
7:console_loglevel
4:default_message_loglevel
1:minimum_console_loglevel
7:default_console_loglevel
當printk函式使用的級別小於當前console_loglevel級別時, 則可以輸出, 否則不輸出
修改級別輸出 echo 7 > /proc/sys/kernel/printk
module_license 指定所支援的協議,必須要有這個!常用的有"gpl",「dual bsd/gpl」, "gpl v2"等。
module_author 作者
module_description 描述
module_version 版本
乙個簡單的核心模組就寫好了,接下來要進行編譯了。
核心模組有兩種載入機制,一種是靜態載入,一種是動態載入。
靜態載入就是把模組編進核心, 在核心啟動時載入,動態載入則是把模組編為ko, 在核心啟動後,需要用時載入。
靜態載入使用obj-y,動態載入使用obj-m。只要在其目錄下的makefile檔案下加入即可。如:
obj-m += test.o
如果當前目錄沒有makefile檔案,建立即可,然後在上級makefile中新增當前的makefile的目錄。
編譯完成將生成test.ko,通過insmod 即可將模組加載入核心中:
$ insmod test.ko插入後可以在/sys/module/目錄下找到test。
使用dmesg或者cat /proc/kmsg可以看到插入時的列印。
去除模組用rmmod,不需要加.ko
檢視核心當前有哪些模組用lsmod
$ lsmod
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...