下载编译了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);
嘿嘿。问题就这样解决了~ 算是前车之鉴吧
写了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如下
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);
嘿嘿。问题就这样解决了~ 算是前车之鉴吧

浙公网安备 33010602011771号