Linux環境下最簡單核心模組的實踐

2021-06-01 22:06:43 字數 1441 閱讀 6186

1. 最簡單驅動原始檔

#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);

module_author("frank zhang");

module_description("a ****** hello world module");

module_alias("a ******st module");

module_license標明了許可證。載入模組時會呼叫module_init宣告的初始化函式,同樣解除安裝模組時會呼叫module_exit宣告的清理函式。最下面三行是引數資訊,可有可無。printk類似printf,是個列印函式。將上面**儲存為hello.c 第一步完成~

2. 編譯需要的makefile

obj-m:= hello.o

kdir:=/lib/modules/$(shell uname -r)/build

default:

make -c $(kdir) m=$(shell pwd) modules

clean:

rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions

obj-m 說明的是編譯.ko檔案(最後編譯完成需要的核心模組)中間過程需要的.o檔案。 kdir是編譯核心模組需要呼叫檔案的路徑。de****t:表明執行make命令預設執行default後的語句。clean:表明執行make clean執行的語句。注意:default和clean冒號後換行,再按tab鍵,再寫語句。將上述**儲存為makefile後,放在與hello.c同乙個目錄下。第二步完成~

3. 編譯核心模組

執行在命令列下執行make ,應該就能得到一連串檔案,其中的hello.ko檔案是我們所要的東東。執行make clean 可以刪掉剛剛編出來的東西,至於為什麼,看看剛剛makefile的最後一行。 第三步完成~

4. 載入核心模組

執行insmod hello.ko (一定要在root許可權下),執行完後發現沒有發生什麼。這是因為printk並不是將「hello world enter」列印到shell,而是列印在/var/log/messages裡面。所以我們執行以下 cat /var/log/messages(也要在root許可權下) 就可以看見「hello world enter」在該檔案的最後一行。

5. 解除安裝核心模組

執行 rmmod hello.ko(在root許可權下),和之前情況一樣,可以在/var/log/messages的最後,看到「hello world exit」的列印。

簡單核心模組

include include module license gpl module author why module description hello world module static int init hello init void printk kern err hello world...

Linux下開始乙個簡單核心模組 hello

目的 建立乙個簡單的核心模組,並把它掛載到核心中去。這個核心模組沒有與外界有任何的資料互動。定義 kernel 表示此原始檔可以看到核心原始檔的所有內容 因為有的核心的標頭檔案會被使用者空間的應用程式包含,但是內 核中的內容有些是核心專用的,需要對使用者隱藏起來 ifndef kernel defi...

原始碼級別gdb遠端除錯(實現OS簡單核心)

最近在學著編寫乙個作業系統的簡單核心,需要debug工具,我們這裡使用gdb來進行除錯,由於虛擬機器執行和本機是兩個部分,所以使用 gdb 的遠端除錯技術,這裡對 gdb 常見除錯以及遠端除錯方式做乙個總結。先對在除錯作業系統核心時用到的命令做乙個說明 這裡省略了一部分makefile的內容 為了方...