https://blog.csdn.net/elfylin/article/details/5908265
https://blog.csdn.net/yangbingzhou/article/details/51177066 .c文件如何编译为ko的MAKEFILE文件编写
写个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"
内核源文件
#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/3.8.4/build
具体看自己机器的文件
obj-m:=my.o
mymodule-objs:=module # 可以不用
KDIR:=/lib/modules/$(shell uname -r)/build
MAKE:=make
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
# rm -rf modules.order Module.symvers .*.cmd *.o *.mod.c .tmp_versions *.unsigned
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
# rm -rf modules.order Module.symvers .*.cmd *.o *.mod.c *.ko .tmp_versions *.unsigned
# 特别注意,需要tab来缩格
查看:
insmod my.ko
mesg|grep module
rmmod my
mesg|grep module
dmesg|tail -100