当前位置: 技术问答>linux和unix
编译内核模块时出错,高手帮忙!
来源: 互联网 发布时间:2015-11-26
本文导语: 我编写了一个简单的内核模块程序,如下 #include #include MODULE_LICENSE("GPL"); static int hello_init(void) { printk("KERN_ALERT Hello world.n"); return 0; } static void hello_exit(void) { printk("KERN_ALERT ...
我编写了一个简单的内核模块程序,如下
#include
#include
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk("KERN_ALERT Hello world.n");
return 0;
}
static void hello_exit(void)
{
printk("KERN_ALERT Goodbye world.n");
}
module_init(hello_init);
module_exit(hello_exit);
如下的makefile:
ifneq ($(KERNELRELEASE),)
obj-m := helloworld.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
当我执行make时,说:
make: *** /lib/modules/2.6.15-1.2054_FC5/build: 没有那个文件或目录。 停止。
然后我就去到该目录下发现这个文件不可打开,他说:无法使用此连接,因为其目标/usr/src/kernel/2.6.15-1.2054_FC5-i686不存在。请问,怎么解决?谢谢!
#include
#include
MODULE_LICENSE("GPL");
static int hello_init(void)
{
printk("KERN_ALERT Hello world.n");
return 0;
}
static void hello_exit(void)
{
printk("KERN_ALERT Goodbye world.n");
}
module_init(hello_init);
module_exit(hello_exit);
如下的makefile:
ifneq ($(KERNELRELEASE),)
obj-m := helloworld.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
当我执行make时,说:
make: *** /lib/modules/2.6.15-1.2054_FC5/build: 没有那个文件或目录。 停止。
然后我就去到该目录下发现这个文件不可打开,他说:无法使用此连接,因为其目标/usr/src/kernel/2.6.15-1.2054_FC5-i686不存在。请问,怎么解决?谢谢!
|
到这儿http://www.kernel.org/去下载 一下相同版本的源码
放到/usr/src/kernel/2.6.15-1.2054_FC5-i686目录下就可以了。
放到/usr/src/kernel/2.6.15-1.2054_FC5-i686目录下就可以了。
|
先建立一个Makefile文件
内容是obj-m := mytestmodule.o
然后在控制台执行
make -C /usr/src/linux-2.6.15 SUBDIR=`pwd` modules
前题是你下载了一个linux-2.6.15的内核源代码.
注意: pwd 上的单引号是键盘1前面的那个键.
内容是obj-m := mytestmodule.o
然后在控制台执行
make -C /usr/src/linux-2.6.15 SUBDIR=`pwd` modules
前题是你下载了一个linux-2.6.15的内核源代码.
注意: pwd 上的单引号是键盘1前面的那个键.