日期:2014-05-16  浏览次数:20565 次

笔记:linux 编译 .ko 模块
写个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"

内核源文件

view plaincopy to clipboardprint?
#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

具体看自己机器的文件

view plaincopy to clipboardprint?
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