內核模塊三要素及Makefile的設計

內核模塊的經典結構

#include<linux/init.h>

#include<linux/module.h>

 

static int hello_init(void)

{

printk(KERN_WARNING”hello,world!\n”);

return 0;

}

 

static void hello_exit(void)

{

printk(KERN_INFO”Goodbye,world\n”);

}

 

module_init(hello_init);

module_exit(hello_exit);

 

這裏沒有main()函數,程序的入口是module_init()指定的。

當我們使用insmod安裝模塊時,hello_init()函數即被調用。

當我們使用rmmod卸載模塊時,hello_exit()即被調用。它是由module_exit()指明的。

 

內核模塊的三要素:

1.加載函數

2.卸載函數

3.頭文件

 

編寫Makefile文件

obj-m := filename.o(若只由一個.c文件編譯構成,無需下面一行)

filename-objs := file1.o file2.o file3.o(若由多個.c文件編譯構成,則需加上這一行) 

KDIR := /內核代碼路徑

all:

make  -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux-ARCH=arm

clean

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


KDIR:自定義的變量。這裏表示內核路徑

-C:進入路徑

M:當前位置的路徑


當安裝模塊之後,無法卸載,比如出現瞭如下問題,及解決辦法。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章