繼續編寫簡單的linux模組 hello

2021-09-11 04:46:23 字數 1205 閱讀 2396

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...