博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

内核模块的helloworld

Posted on 2008-05-14 20:03  南郭大侠  阅读(430)  评论(0)    收藏  举报
下载编译了2.6.25.3内核,是2008.5.10出的稳定版。(ubuntu自带的内核做内核模块很容易出bug。貌似编译都不行。下载的内核源码跟系统的内核不是完全匹配的版本)

写了helloworld程序,刚开始的程序是这样子的
#include <linux/init.h>
#include 
<linux/module.h>
MODULE_LICENSE(
"Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT 
"Hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT 
"Goodbye, cruel world\n");
}

module_init(hello_init);
module_init(hello_exit);
然后写了makefile以后不停的报错
Makefile如下
obj-m := hello.o
KERNELDIR 
?= /lib/modules/$(shell uname -r)/build
PWD :
= $(shell pwd)

all:
    $(MAKE) 
-C $(KERNELDIR) M=$(PWD) modules

总是报redefinition of __inittest 
上网查了几个有同样错误的,问题都没有解决。

后来经过冷静的思考和沉着的分析,发现hello.c最后一行错了,应该是module_exit(hello_exit);
嘿嘿。问题就这样解决了~ 算是前车之鉴吧
向北航行