linux核心模組開發基礎

2021-07-11 13:35:54 字數 1591 閱讀 5421

1. 什麼是核心模組

核心模組具有以下兩個特點:1. 模組本身並不被編譯進核心檔案(zimage或bzimage),可以根據需求,在核心執行期間動態的安裝或解除安裝。

2. 為什麼需要核心模組

原因:linux核心的整體結構非常龐大,其包含的元件也非常多,如何使用這些元件呢,方法1:把所有的元件都編譯鍵核心,即:zimage或bzimage,但這樣會導致乙個問題:占用記憶體過多。然後核心模組就誕生了,可以不用被編譯進核心但是可以動態的新增到正在執行的核心中!

3. 如何使用核心模組

1> 安裝模組 insmod filename.ko

2> 解除安裝模組 rmmod filename

3> 檢視模組 lsmod

這裡舉乙個簡單的例子:

還是亙古不變的方式helloworld程式(不過這裡沒有main函式的)

#include #include static int hello_init()

static void hello_exit()

module_init(hello_init);//用巨集來指定入口 載入模組時裡面的載入函式會被呼叫

module_exit(hello_exit);

三要素: 載入模組 、解除安裝模組、 標頭檔案

makefile檔案

obj-m := helloworld.o

kdir := /home/kernel/linux-ok6410 //開發板執行的核心的原始碼的路徑,因為模組最後是要在開發板上執行,所以這個模組的編譯是要依賴板子上執行的核心原始碼的,(這裡我開發板用的核心原始碼是這個路徑)

all:

make -c $(kdir) m=$(pwd) modules cross_compile=arm-linux- arch=arm

clean:

rm -f *.o *.ko *.order *.symvers

這裡kdir是我們核心原始碼的路徑:

然後make 編譯模組檔案,這可可以看到生成了helloworld.ko檔案

結合前面的課程這裡可以通過串列埠終端同步看到(一下可以看到相關命令執行的效果)

核心模組的可選項:

1. 模組申明

2. 模組引數

3. 符號輸出

Linux核心模組開發

一 核心模組基礎 1.1 什麼是核心模組 linux核心的整體結構非常龐大,其包含的元件也非常 多,如何使用這些元件呢,方法1 把所有的元件都編 方法1 把所有的元件都編 譯進核心檔案,即 zimage或bzimage,但這樣會導 致乙個問題 占用記憶體過多.有沒有一種機制能讓核心檔案本身並不包含某...

Linux核心模組開發

下面是乙個最基本的核心模組源 結構,任何模組專案都需要包含這些內容 include 模組初始化函式 static intmodule init func void 模組解除安裝函式 static void module exit func void module init module init f...

Linux核心開發 核心模組引數

目錄 使用引數載入模組 module param巨集 讀取和更改引數值 驗證引數值 宣告模組引數陣列 有關模組引數的一些說明 在本文中,我們將向模組新增引數。使用引數,您可以在載入模組時訪問模組全域性變數,並在執行時已載入模組時訪問模組全域性變數。使用insmod命令載入模組時,可以提供引數作為ke...