当前位置: 技术问答>linux和unix
内核模块编译不过去,求助!
来源: 互联网 发布时间:2015-09-30
本文导语: 我下了2.6.5的内核源代码,解压后把linux-2.6.5目录拷贝到/usr/src下面,然后编译一个内核模块,命令如下,gcc -D__KERNEL__ -I/usr/src/linux-2.6.5/include -DMODULE -Wall -02 -c -o hello.o hello.c 编译出现了非常多错误,几乎每个/include/li...
我下了2.6.5的内核源代码,解压后把linux-2.6.5目录拷贝到/usr/src下面,然后编译一个内核模块,命令如下,gcc -D__KERNEL__ -I/usr/src/linux-2.6.5/include -DMODULE -Wall -02 -c -o hello.o hello.c 编译出现了非常多错误,几乎每个/include/linux下文件都有错误 请问为什么,我需要对下来的内核源代码作什么处理么,谢谢
|
2.6的模块,扩展名为.ko,而不是2.4下的.o
#include
#include
#include
static int dummy_init(void)
{
printk("hello,world.n");
return 0;
}
static void dummy_exit(void)
{
return;
}
module_init(dummy_init);
module_exit(dummy_exit);
MODULE_LICENSE("GPL")
2.6中编译模块的方法是写一个Makefile,由内核的Kbuild来帮你编译,例如编译上面的hello.c:
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
#make
make -C /lib/modules/linux-2.6.11-gentoo-r6/build SUBDIRS=/home/matthew modules
make[1]: Entering directory `/lib/modules/linux-2.6.11-gentoo-r6'
CC [M] /home/matthew/hello.o
Building modules, stage 2.
MODPOST
CC /home/matthew/hello.mod.o
LD [M] /home/matthew/hello.ko
make[1]: Leaving directory `/lib/modules/linux-2.6.11-gentoo-r6'
现在就可以在2.6中正常加载 hello.ko 模块了
#include
#include
#include
static int dummy_init(void)
{
printk("hello,world.n");
return 0;
}
static void dummy_exit(void)
{
return;
}
module_init(dummy_init);
module_exit(dummy_exit);
MODULE_LICENSE("GPL")
2.6中编译模块的方法是写一个Makefile,由内核的Kbuild来帮你编译,例如编译上面的hello.c:
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
#make
make -C /lib/modules/linux-2.6.11-gentoo-r6/build SUBDIRS=/home/matthew modules
make[1]: Entering directory `/lib/modules/linux-2.6.11-gentoo-r6'
CC [M] /home/matthew/hello.o
Building modules, stage 2.
MODPOST
CC /home/matthew/hello.mod.o
LD [M] /home/matthew/hello.ko
make[1]: Leaving directory `/lib/modules/linux-2.6.11-gentoo-r6'
现在就可以在2.6中正常加载 hello.ko 模块了
|
很少用命令直接去编译的吧,一般都是写makefile
|
包含版本号头文件
|
什么错误先!楼上得错误也很常见
|
不要加 -c 选项
|
删掉.ko文件再make就ok了
|
mark
|
make: Nothing to be done for `default'.
make检查时间觉得没什么可做的!就不执行了!
make检查时间觉得没什么可做的!就不执行了!