Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1944986
  • 博文数量: 383
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 4061
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-24 18:53
文章分类

全部博文(383)

文章存档

2011年(1)

2010年(9)

2009年(276)

2008年(97)

我的朋友

分类: LINUX

2009-05-13 16:17:11

一般的在编写内核驱动的时候可以使用一个通用的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 *.*~ core .depend .*.cmd *.ko *.mod..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");

 

// 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);

最后就是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 *.*~ core .depend .*.cmd *.ko *.mod..tmp_versions

那么最后生成的内核模块就是my_hello.ko,就可以加载和卸载了
还有一点就是上面的makefile 不要从上面直接复制,要手动按照上面编写。

阅读(1695) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~