小弟我,刚接触linux驱动,买了本《linux设备驱动程序》学习。可是刚看就遇到了问题:
我按照书写了个makefile文件:
#如果已定义KERNELRELEASE,则说明是从内核构造系统调用的,
#因此可以利用期内建语句。
ifneq ($(KERNELRELEASE),)
obj-m :=hello.o
#否则,是直接从命令行调用的,
#这是要调用内核构造系统。
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
书中的hello.c也是搬书上的,可是总是出现:Nothing to be done for 'default'.
如果去掉
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules还是出错!!这到底是怎么回事啊。
各位老大,小弟初学习驱动。懂得少,所以不怕老大们BS----只要能解决问题就行,我是真地想学啊!!


mardar 于 2007-10-26 16:59:32发表:
内核为2.6.18
mardar 于 2007-10-26 16:45:25发表:
[font=宋体] [/font] [/font]
[/font]
[font=宋体][/size][/font]
[font=宋体][size=14pt]各位老大这是hello.c的源码[/font]
[font=宋体]#include
[font=宋体]#include
[font=宋体]MODULE_LICENSE("Dual BSD/GPL");[/font]
[font=宋体] [/font]
[font=宋体]static int hello_init(void) {[/font]
[font=宋体] printk(KERN_ALERT "Hello, world\n");[/font]
[font=宋体] return 0;[/font]
[font=宋体]}[/font]
[font=宋体] [/font]
[font=宋体]static void hello_exit(void) {[/font]
[font=宋体] printk(KERN_ALERT "Goodbye, cruel world\n");[/font]
[font=宋体]}[/font]
[font=宋体] [/font]
[font=宋体]module_init(hello_init);[/font]
[font=宋体]module_exit(hello_exit);[/font]
mardar 于 2007-10-26 16:27:59发表:
[font=宋体] [/font] [/font]
[/font]
[font=宋体][/size][/font]
[font=宋体][size=14pt]各位老大这是hello.c的源码[/font]
[font=宋体]#include
[font=宋体]#include
[font=宋体]MODULE_LICENSE("Dual BSD/GPL");[/font]
[font=宋体] [/font]
[font=宋体]static int hello_init(void) {[/font]
[font=宋体] printk(KERN_ALERT "Hello, world\n");[/font]
[font=宋体] return 0;[/font]
[font=宋体]}[/font]
[font=宋体] [/font]
[font=宋体]static void hello_exit(void) {[/font]
[font=宋体] printk(KERN_ALERT "Goodbye, cruel world\n");[/font]
[font=宋体]}[/font]
[font=宋体] [/font]
[font=宋体]module_init(hello_init);[/font]
[font=宋体]module_exit(hello_exit);[/font]