内核模块三要素及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:当前位置的路径


当安装模块之后,无法卸载,比如出现了如下问题,及解决办法。



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