LINUX模块问题

来源:百度知道 编辑:UC知道 时间:2024/09/24 13:49:25
我写了一个模块
用的头文件如下
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/kernel.h>
#define __NO_VERSION__
#include <linux/module.h>
#include </usr/include/linux/version.h>
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/init.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#ifndef VFIFO_MAJOR
#define VFIFO_MAJOR 241//默认主设备号
#endif
#ifndef VFIFO_NR_DEVS
#define VFIFO_NR_DEVS 4//默认管道数
#endif
#ifndef VFIFO_BUFFER
#define VFIFO_BUFFER 4000//默认管道缓冲区大小
#endif
#include <linux/devfs_fs_kernel.h>

makefile 如下
CC= /usr/local/rm/2.95.3/bin/arm-linux-gccMODCFLAGS := -D__KERNEL__ -DMODULE -O2 -g -Wall -I /usr/src/linux-2.4.20/include
vfifo.o:vfifo.c
$(CC) $(MODCFLAGS) -c vfifo.c

编译后

你先输入 export LANG=en_US.utf8 之后再编译,输出的东西多贴几行。

你现在的错误提示没有显示完全,那个 ???????? 应该是中文输出。但是你的机器没显示出来。
------------
还是“ ???? ”???
你怎么编译的?开 X 图形,用支持中文的终端编译。
要么试试 export LANG=POSIX 再编译试试。

另外,你去你的内核代码目录看看有没有 version.h 这个文件,我记得改过一次位置。
或者你的编译命令行语法有问题。

我用前面的代码尝试编译了一下(我的内核是 i686 + 2.6.25 )
没有提示 version.h 的错误(当然有别的错误……版本差的太大,架构也不一样)
命令行: gcc gcc -DMODULE -O2 -g -Wall -I /usr/src/linux/include c.c
-------------------
#include 不是这么改的……
而且这个提示不是你的代码引用的 version.h ,而是你的代码引用的 header 文件的再引用。
而且这个提示根本就不是找不到你的 /usr/include/linux/version.h 文件而是你的交叉编译环境自带的 version.h !(/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../arm-linux/sys-include/linux/module.h,也就是/usr/local/arm/2.95.3/lib/arm-linux/sys-include/linux/module.h)

你现在已经把编译环境搞混乱了。除非你现在用的是一台 arm CPU 的机器不然你这个编译肯定有错!
----------------------
看样子你的系统根本就没有编译 arm 代码的环境。
请你确定你到底想要干什么。想怎么干。有没有准备基础环境。

如果你刚开始学,请先补习相关的编译知识。
-------