今天整理以前筆記,發現曾經裡面有一個Makefile文件。
仔細一看是以前實習做linux內核程序設計時候寫的模塊makefile。剛好我電腦也有linux系統,就拿來回顧一下。
寫個my.c和一個Makefile文件,然後make編譯一下,就成功了,生成my.ko
再加載一下insmod my.ko dmesg|grep module 看到模塊初始化時候的打印
卸載模塊rmmod my.ko dmesg|grep module 看模塊卸載時候的打印
都是對的,看來以前學的東西還是記得了……再mark一下。
注意事項:
1、內核目錄
2、Makefile中obj-m:=my.o 這個和源文件my.c要對應
3、mymodule-objs:=module 這個my也是和my.c對應的
如果源文件為your.c
這兩句話就應該改為obj-m:=your.o
yourmodule-objs:=module
4、查看輸出的時候 用dmesg輸出信息太多,可以用grep過濾一下
dmesg | grep "keywords"
內核源文件
[cpp] view
plain copy
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int funcIn(void)
{
printk("in module");
return 0;
}
static void funcOut(void)
{
printk("out module");
return;
}
module_init(funcIn);
module_exit(funcOut);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("elfy");
Makefile 文件
我linux內核目錄為/lib/modules/2.6.31-14-generic/build
具體看自己機器的文件
[cpp] view
plain copy
obj-m:=my.o
mymodule-objs:=module
KDIR:=/lib/modules/2.6.31-14-generic/build
MAKE:=make
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean