当前位置: 技术问答>linux和unix
helloworld 驱动程序编译的问题?
来源: 互联网 发布时间:2016-05-05
本文导语: 一个简单的驱动程序例子,怎么编译都不行,请指教。源代码和makefile 如下: 我的机器: winxp +vmware /* ...
一个简单的驱动程序例子,怎么编译都不行,请指教。源代码和makefile 如下:
我的机器: winxp +vmware
makefile:
出错信息如下:
make -C /lib/modules/2.6.21-1.3194.fc7/build M=/tonny/test/chapter12/hello modules
make[1]: Entering directory `/usr/src/kernels/2.6.21-1.3194.fc7-i686'
scripts/Makefile.build:17: /tonny/test/chapter12/hello/Makefile: No such file or directory
make[2]: *** No rule to make target `/tonny/test/chapter12/hello/Makefile'. Stop.
make[1]: *** [_module_/tonny/test/chapter12/hello] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.21-1.3194.fc7-i686'
make: *** [modules] Error 2
我的机器: winxp +vmware
/*
* $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $
*/
#include
#include
MODULE_LICENSE( "Dual BSD/GPL ");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, worldn ");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel worldn ");
}
module_init(hello_init);
module_exit(hello_exit);
makefile:
ifeq ($(KERNELRELEASE),)
KDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KDIR) M=$(PWD) modules_install
clean:
rm -rf *.ko *.o *.mod.c
.PHONY:modules modules_install clean
else
obj-m := hello.o
endif
出错信息如下:
make -C /lib/modules/2.6.21-1.3194.fc7/build M=/tonny/test/chapter12/hello modules
make[1]: Entering directory `/usr/src/kernels/2.6.21-1.3194.fc7-i686'
scripts/Makefile.build:17: /tonny/test/chapter12/hello/Makefile: No such file or directory
make[2]: *** No rule to make target `/tonny/test/chapter12/hello/Makefile'. Stop.
make[1]: *** [_module_/tonny/test/chapter12/hello] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.21-1.3194.fc7-i686'
make: *** [modules] Error 2
|
你的kernel source还在吗?
检查一下usr/src/kernels/2.6.21-1.3194.fc7-i686里面,
有的话应该没问题,没有就下载一个放到那里
检查一下usr/src/kernels/2.6.21-1.3194.fc7-i686里面,
有的话应该没问题,没有就下载一个放到那里
|
将你的 makefile 文件名改为 Makefile
|
是kernel的源码不存在。是不是vmware里根本就没有内核的源码
|
makefile和Makefile都可以的
看看你的kernel的源码在不在?
看看你的kernel的源码在不在?
|
编译linux驱动程序是要依赖内核源码的,看看你的这个目录下是否有内核源代码存在.
/usr/src/kernels/2.6.21-1.3194.fc7-i686
/usr/src/kernels/2.6.21-1.3194.fc7-i686
|
编译的路径有问题吧
|
第一,首先确保你的linux系统中有内核源码树,你的应该是FC7,而FC7默认是没有的,这就是上面几位所说的。解决方法是下载内核包,再编译内核。
第二,我看你KDIR ?= /lib/modules/$(shell uname -r)/build 我也刚学, 但是我的是 :=
你可以试下下面这个简单一点的
obj-m:=hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
不知道你是那一种问题。上面的makefile是能够使用的。
第二,我看你KDIR ?= /lib/modules/$(shell uname -r)/build 我也刚学, 但是我的是 :=
你可以试下下面这个简单一点的
obj-m:=hello.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
不知道你是那一种问题。上面的makefile是能够使用的。
|
进入内核源码树,没有发现MAKEFILE文件
前面各位仁兄都说过了,没有内核源码树
前面各位仁兄都说过了,没有内核源码树