1、通過包含linux/sched.h標頭檔案
#include
可以使用下面的語句列印當前程序的程序 id 和命令名:
printk(kern_info "the process is \"%s\" (pid %i)\n", current->comm, current->pid);
hello.c
#include #include #include module_license("dual bsd/gpl");
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
編譯並安裝模組:
make
sudo insmod hello.ko
dmesg檢視列印資訊:
[17541.464901] hello, world
[17541.464903] the process is "insmod" (pid 31411)
2、初始化函式宣告中通常使用__init 修飾符,它是乙個給核心的暗示,給定的函式只是在初始化使用。 模組載入者在模
塊載入後會丟掉這個初始化函式,使它的記憶體可做其他用途。乙個類似的標籤(__initdata) 給只在初始化時用的資料。
static int __init initialization_function(void)
module_init(initialization_function);
3、清理函式宣告中通常使用__exit 修飾符,標識這個**是只用於模組解除安裝( 通過使編譯器把它放在特殊的 elf 段)。 如果你的模組直接建立在核心裡,或者如果你的核心配置成不允許模組解除安裝,標識為 __exit 的函式被簡單地丟棄。因為這個原因,乙個標識 __exit 的函式只在模組解除安裝或者系統停止時呼叫,任何別的使用都是錯的。
如果你的模組沒有定義乙個清理函式,核心不會允許它被解除安裝。
static void __exit cleanup_function(void)
module_exit(cleanup_function);
linux核心模組的編寫
之前學了核心模組的編寫,但是沒有動手實驗,這次試驗才發現還是有好動東西需要學習!我的環境是虛擬機器跑centos 7 1.首先編寫模組 include include module license dual bsd gpl static int hello init void static void...
Linux 簡單的Makefile編寫
實驗環境 vmware workstation pro下linux red hat 核心版本 2.6.32 1.使用vim進行程式編寫 1 建立calc.h檔案宣告乙個類 建立乙個類mycalc,類的資料成員有三個float型的數字,類可以實現對兩數的加 減 顯示結果運算。2 建立calc.cpp檔...
簡單編寫的檔案複製模組python指令碼
sourcefilename input 請輸入你要複製的檔名 index sourcefilename.rfind 除用字串的內建函式外,還可以使用條件語句判斷 copyfilename sourcefilename index 副本 sourcefilename index readfile o...