20楼#
发布于:2002-11-06 15:16
我试了还是不行。你们开发一般用的什么编辑器?我觉得vi用起来挺别扭的。另,unix1998,你们一般开发程序makefile是自己写的吗?还是自动生成的?可否把你开头的makefile文件加上注释,我不太明白。谢谢你了。
另:我该怎样才能给你分呢? |
|
21楼#
发布于:2002-11-06 15:25
还不行?我晕了。
我不用linux的,我用cygwin,所以就用windows下的编译器,比如vc,ultraedit等。 makefile是自己写的,但是复杂的就要借助工具了,就是自动生成。 exec_prefix = //可执行文件路径,不写就默认 insmod_static = no //无所谓,不用也行。 mandir = ${prefix}/man//帮助文档路径。 prefix = /usr //路径放在/usr下 sbindir = ${exec_prefix}/sbin AR = ar //连接器用ar CC= gcc //编译器用gcc.,如果交叉编译就用别的 CFLAGS = -O2 -Wall //相当于gcc 后面的参数。 CFLAGS += -D__KERNEL__ -DMODULE //同上 LDFLAGS = -Xlinker -rpath-link /库路经 all: hello.o //你输入make all时编译的程序。 clean: //你输入make clean时执行的动作,即删除所有.o文件。 rm -f *.o |
|
22楼#
发布于:2002-11-07 11:13
还不行,我也晕了
module_init和module_exit在linux/init.h里面定义 版本号和这两个宏没有关系,你可以参考一下yftty说的方法,把include/linux/version.h里的版本号由2.4.18-3-CUSTOM改为2.4.18-3 此外我还是想请你仔细检查你的include路径对不对,一定要指向编译出你正在运行的内核的源代码(不好意思,有点拗口) --Makefile-- CC = gcc CFLAGS = -D__KERNEL__ -I/project/program/linux/2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include /project/program/linux/2.4.18/include/linux/modversions.h OBJS = hello.o all: $(OBJS) clean: rm -rf *.o *~ core |
|
23楼#
发布于:2002-11-07 11:28
Samuels:
首先感谢你的帮助!我再试试。另:我的程序源文件放的位置对include有没有影响?我的源文件放在/usr/src下;#include <linux/kernel.h>这里包含的具体路径到底是哪里? |
|
24楼#
发布于:2002-11-07 11:37
教你一个最简单的方法。搜索出你机器里所有的kernel.h文件,然后一个一个的改错,当编译出错时,你就确定在那里了。
|
|
25楼#
发布于:2002-11-07 15:15
unix1998:
我再问你2个弱智问题: 1、编译选项中的__DDEBUG__ __DMODULE__ -Wall等具体是什么意思?有何作用?在哪里能找到相应的说明? 2、#ifndef;#ifdef等有何作用?到底是什么意思? #ifndef _DEBUG_H_ #define _DEBUG_H_ #include <stdio.h> #endif |
|
26楼#
发布于:2002-11-07 15:52
unix1998: 那些参数你应该找make文档看。参数很多。 2、#ifndef;#ifdef等有何作用?到底是什么意思? #ifndef _DEBUG_H_ //如果没定义_DEBUG_H_ #define _DEBUG_H_ //定义_DEBUG_H_ #include <stdio.h> //同时包进stdio.h文件 #endif //结束if的语句。 [编辑 - 11/7/02 by unix1998] |
|
27楼#
发布于:2002-11-07 15:53
http://www.fanqiang.com/
去这里看看吧。 |
|
28楼#
发布于:2002-11-08 11:07
给你一个简单的办法:
将 /usr/include/linux/version.h 用 /usr/src/linux-2.4.18-3/include/linux/version.h 代替! |
|
29楼#
发布于:2002-11-11 16:51
-D__MODULE__ 是说定义__MODULE__这个宏
就像在文件里写#define __MODULE__这句话一样 -Wall 是指打印所有的Warning信息,缺省情况只打印错误信息 #ifdef, #ifndef是预编译指令,你看看C或是C++的语法书吧 #ifndef DEBUG 如果没有定义DEBUG #define DEBUG 定义DEBUG #define PRINTK(format, args...) printk(KERN_DEBUG format , ## args) #else 反之 #define PRINTK(format, args...) #endif 结束 |
|
30楼#
发布于:2002-11-12 12:29
我也遇到你提出的问题,不过我是在最新的redhat 8.0下面遇到的。也是告诉我说:“没有找到合适的版本”
我是这么解决的。其实你仔细看/usr/include/linux/modversions.h就会发现,路径有问题。 你可以把你的程序中的: #include <linux/module.h> #include <linux/kenerl.h> #include …… 改变为 #include </lib/modules/2.4.18-14/build/include/linux/module.h>等等……。 或者在makefile中指出: I/</lib/modules/2.4.18-14/build/include 也可以。我已经成功了。 |
|
31楼#
发布于:2002-11-13 11:15
do below:
mv /usr/include/linux /usr/include/lin ln -s /usr/src/linux/include/linux /usr/include/linux ln -s /usr/src/linux/include/asm /usr/include/asm |
|
32楼#
发布于:2002-11-13 13:29
choise:
我用你的方法试了后,报如下警告: load hello.o will taint(破坏) the kernel modules:no license 怎么回事? |
|
33楼#
发布于:2002-11-13 16:35
这个警告是在insmod时产生的。并且init_module函数里的内容顺利执行;但在rmmod御载该模块时,clean_module函数并没有被执行。怎么回事?
|
|
34楼#
发布于:2002-11-14 10:31
各位大虾:我是把源代码目录(忘了,反正有一个linux-2.18.3)下的linux和asm目录替换/usr/include下的linux和asm目录,编译绝对通过,但就是insmod的时候出现no license错误,请不吝指教
|
|
35楼#
发布于:2002-11-14 12:22
用户被禁言,该主题自动屏蔽! |
|
上一页
下一页