|
最近刚学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的时候能找到此文件夹,但出来了好大一堆错误和警号,我先不贴了吧,要是有人需要看,我可以贴出来。
太郁闷了,抄书上的源程序都编译不通,还真是打击人。好了,还请各位老大们帮帮忙了,谢谢!!! |
|