QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1530|回复: 3

大家帮我看看我的入门Hello World 程序吧,我都快疯

[复制链接]
发表于 2006-8-2 22:21:16 | 显示全部楼层 |阅读模式
最近刚学Linux,看得是魏永明翻译的《LINUX 设备驱动程序》那本书。那本上有一个“Hello World”的驱动加载程序。其C源代码如下:
/*                                                     
* $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文件如下:

# To build modules outside of the kernel tree, we run "make"
# in the kernel source tree; the Makefile these then includes this
# Makefile once again.
# This conditional selects whether we are being included from the
# kernel Makefile or not.
ifeq ($(KERNELRELEASE),)

    # Assume the source tree is where the running kernel was built
    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else
    # called from kernel build system: just declare what our modules are
    obj-m := hello.o hellop.o seq.o jit.o jiq.o sleepy.o complete.o \
             silly.o faulty.o kdatasize.o kdataalign.o
endif

我在我们公司的Linux服务器上有一个帐户,我将这两个文件放入一个文件夹内,进行make命令编译,但就是不对。具体的出错信息是这样的:
make -C /lib/modules/2.6.15-1.2054_FC5/build M=/home/mzf/test modules
make: *** /lib/modules/2.6.15-1.2054_FC5/build: No such file or directory.  Stop.
make: *** [modules] Error 2

然后我又查看了一下/lib/modules/2.6.15-1.2054_FC5/build,发现build是一个连接(我不知道这样说合适吗),其具体的值是这样的:
build -> ../../../usr/src/kernels/2.6.15-1.2054_FC5-i686
我的理解就是它指向/usr/src/kernels/2.6.15-1.2054_FC5-i686这个文件。
我们服务器上安装的是REDHAT的2.6核的LINUX系统。我去/usr/src这个目录中去看,只有redhat这样一个文件夹,根本没有/kernels/2.6.15-1.2054_FC5-i686这个文件夹。在rethat文件夹内倒有几个文件,但我不知道有什么用,呵呵。
这个问题弄了我好几天都没解决,也刚学着想入门,还请各位老大们帮帮忙,我应该怎样做才能编译通过。
再补充一点,我不知道安装redhat后,Linux的核文件放在什么地方。我从网上下载了一个核,核的版本和redhat一样,都是2.6.15.1的。我将此文件解压到
usr/src/kernels下,并将其名改为2.6.15-1.2054_FC5-i686。这样,make的时候能找到此文件夹,但出来了好大一堆错误和警号,我先不贴了吧,要是有人需要看,我可以贴出来。
太郁闷了,抄书上的源程序都编译不通,还真是打击人。好了,还请各位老大们帮帮忙了,谢谢!!!
 楼主| 发表于 2006-8-3 15:17:01 | 显示全部楼层
各位大人们,帮我看看啊!!!
先谢了啊,嘿嘿
回复

使用道具 举报

发表于 2006-8-9 11:20:19 | 显示全部楼层
you need kernel source tree under folder /usr/src/kernels to compile a kernel module, just uncompress the source code is not enough, pls build it, the easies way is to download an rpm package for kernel source and execute that
回复

使用道具 举报

发表于 2006-8-9 11:22:31 | 显示全部楼层
you need kernel source tree under folder /usr/src/kernels to compile a kernel module, just uncompress the source code is not enough, pls build it, the easies way is to download an rpm package for kernel source and execute that
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 12:21 , Processed in 0.056049 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表