helloworld 驱动程序编译的问题?

失落的羊 2008-08-20 02:51:51
一个简单的驱动程序例子,怎么编译都不行,请指教。源代码和makefile 如下:
我的机器: winxp +vmware






/*
* $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $
*/
#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_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

...全文
320 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的羊 2009-02-06
  • 打赏
  • 举报
回复
忘记结贴了,不好意思哈。
musiccoder 2008-09-25
  • 打赏
  • 举报
回复
原来是这样。。。学习了
lisan04 2008-09-24
  • 打赏
  • 举报
回复
注意路径问题!
olla168 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 joyself 的回复:]
将你的 makefile 文件名改为 Makefile
[/Quote]

正解!
kyokyxxj 2008-09-22
  • 打赏
  • 举报
回复
进入内核源码树,没有发现MAKEFILE文件
前面各位仁兄都说过了,没有内核源码树
llfshow 2008-08-28
  • 打赏
  • 举报
回复
第一,首先确保你的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是能够使用的。
ComputerInBook 2008-08-27
  • 打赏
  • 举报
回复
编译linux驱动程序是要依赖内核源码的,看看你的这个目录下是否有内核源代码存在.
/usr/src/kernels/2.6.21-1.3194.fc7-i686
jerrykinki 2008-08-23
  • 打赏
  • 举报
回复
makefile和Makefile都可以的
看看你的kernel的源码在不在?
fishtangjinfu 2008-08-23
  • 打赏
  • 举报
回复
编译的路径有问题吧
cokeclassic 2008-08-21
  • 打赏
  • 举报
回复
是kernel的源码不存在。是不是vmware里根本就没有内核的源码
joyself 2008-08-21
  • 打赏
  • 举报
回复
将你的 makefile 文件名改为 Makefile
盘股之 2008-08-21
  • 打赏
  • 举报
回复
你的kernel source还在吗?
检查一下usr/src/kernels/2.6.21-1.3194.fc7-i686里面,
有的话应该没问题,没有就下载一个放到那里

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧