日期:2014-05-16  浏览次数:20787 次

内核HelloWorld,编译出错!!
如题:

---------------------------------
/*    
  *     hello-1.c   -   The   simplest   kernel   module.
  */
#include   <linux/module.h> /*   Needed   by   all   modules   */
#include   <linux/kernel.h> /*   Needed   for   KERN_ALERT   */

int   init_module(void)
{
printk( " <1> Hello   world   1.\n ");

/*  
  *   A   non   0   return   means   init_module   failed;   module   can 't   be   loaded.  
  */
return   0;
}

void   cleanup_module(void)
{
printk(KERN_ALERT   "Goodbye   world   1.\n ");
}

---------------------
makefile:
obj-m   +=   hello-1.o
---------------------
执行:
make   -C   /lib/modules/`uname   -r`/build   SUBDIRS=$PWD   modules

make:   Entering   directory   `/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 '
    Building   modules,   stage   2.
    MODPOST
make:   Leaving   directory   `/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 '

--------------------------------
如上面的   信息,本来应该出现编译好的文件hello-1.o,但编译失败了   ,出现了一个Module.symvers空文件。
我的系统是FC5,自己升级了内核,2.6.18

有人碰到类似情况的么?小弟很菜,请大家帮帮忙


------解决方案--------------------
不用包含/usr/include/linux/version.h吧
用这个Makefile:
obj-m := hello.o
KERNEL_DIR:= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
make -C $(KERNEL_DIR) M=$(PWD) modules
clean:
rm *.o *.ko

然后make all就OK了。
------解决方案--------------------
是不是少了“tab”?

all:
[这里有一个tab] make -C $(KERNEL_DIR) M=$(PWD) modules


我倒是有个msn,但是一般不开。
我的邮箱heyg@ghtchina.com