编写内核驱动的通用Makefile
来源:互联网 发布:qq加人软件免费版 编辑:程序博客网 时间:2024/05/14 07:26
一般的在编写内核驱动的时候可以使用一个通用的Makefile,免去了自己编写的麻烦,下面附上我自己用的一个文件:
module-objs := 这个后面是一个通用的.o文件合集,有多少个.c文件,就要有多少个对应的.o文件,比如:
有file1.c和file2.c
那么,就要如下写法:
module-objs := file1.o file2.o
最后这个module-objs中的module要用obj-m中的.o文件的名字代替。
hello-objs := hello.o
obj-m := hello.o
如果是module-objs := file1.o file2.o中有多文件,后面的obj-m := hello.o中的.o文件不要跟module-objs里面的重名。
最后看一个例子,有两个.c文件,hello.c和hello1.c,如下:
最后就是makefile:
ifneq ($(KERNELRELEASE),)
# call from kernel build system
my_hello-objs := hello.o hello1.o
obj-m := my_hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
那么最后生成的内核模块就是my_hello.ko,就可以加载和卸载了
还有一点就是上面的makefile 不要从上面直接复制,要手动按照上面编写。
ifneq ($(KERNELRELEASE),)
# call from kernel build system
module-objs := hello.o
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
# call from kernel build system
module-objs := hello.o
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
module-objs := 这个后面是一个通用的.o文件合集,有多少个.c文件,就要有多少个对应的.o文件,比如:
有file1.c和file2.c
那么,就要如下写法:
module-objs := file1.o file2.o
最后这个module-objs中的module要用obj-m中的.o文件的名字代替。
hello-objs := hello.o
obj-m := hello.o
如果是module-objs := file1.o file2.o中有多文件,后面的obj-m := hello.o中的.o文件不要跟module-objs里面的重名。
最后看一个例子,有两个.c文件,hello.c和hello1.c,如下:
/*======================================================================
A simple kernel module: "hello world"
======================================================================*/
/*
*hello.c
*/
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT " Hello World in,ztz0223 ");
return 0;
}
module_init(hello_init);
MODULE_AUTHOR("ztz0223");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
A simple kernel module: "hello world"
======================================================================*/
/*
*hello.c
*/
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk(KERN_ALERT " Hello World in,ztz0223 ");
return 0;
}
module_init(hello_init);
MODULE_AUTHOR("ztz0223");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");
// hello1.c
#include <linux/init.h>
#include <linux/module.h>
static void hello_exit(void)
{
printk(KERN_ALERT " Hello World quit, ztz0223! ");
}
module_exit(hello_exit);
#include <linux/init.h>
#include <linux/module.h>
static void hello_exit(void)
{
printk(KERN_ALERT " Hello World quit, ztz0223! ");
}
module_exit(hello_exit);
最后就是makefile:
ifneq ($(KERNELRELEASE),)
# call from kernel build system
my_hello-objs := hello.o hello1.o
obj-m := my_hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
那么最后生成的内核模块就是my_hello.ko,就可以加载和卸载了
还有一点就是上面的makefile 不要从上面直接复制,要手动按照上面编写。
- 编写内核驱动的通用Makefile
- 内核驱动的Makefile
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 驱动编译 通用的Makefile
- 内核模块的Makefile编写
- linux驱动的Makefile编写
- [原创]Apache Rewrite对apache性能影响的测试
- IE7 模态窗口的关闭
- [转]InnoDB vs MyISAM vs Falcon benchmarks - part 1
- [原创]构建支持Master/Slave读写分离的数据库操作类
- [转]DB2,PostgreSQL & MySQL体系结构概述和对比
- 编写内核驱动的通用Makefile
- [转]w3c-libwww入门教程
- mfc中关于多语言资源的使用方法
- HTTP/FTP客户端开发库:libwww、libcurl、libfetch 以及更多
- Mysql日期和时间函数不求人
- 让VS2008对JQuery语法的智能感知更完美一点
- [原创] Memcache分组和同步机制的实现
- 编译时包含资源(转自msdn)
- 一个PHP图表绘制类 - Chart