linux核心模組開發基礎

coding__madman發表於2016-05-06

1. 什麼是核心模組

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

2. 為什麼需要核心模組

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

3. 如何使用核心模組

   1> 安裝模組 insmod filename.ko

    2> 解除安裝模組 rmmod filename

    3> 檢視模組 lsmod


這裡舉一個簡單的例子:

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

#include <linux/init.h>
#include <linux/module.h>


static int hello_init()
{
    printk(KERN_WARNING"Hello world!\n");//前面的巨集表示列印的級別
    return 0;	
}

static void hello_exit()
{
    printk(KERN_WARNING"hello exit!\n");	
}

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. 符號輸出



相關文章