bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-11-06 15:16
我试了还是不行。你们开发一般用的什么编辑器?我觉得vi用起来挺别扭的。另,unix1998,你们一般开发程序makefile是自己写的吗?还是自动生成的?可否把你开头的makefile文件加上注释,我不太明白。谢谢你了。
另:我该怎样才能给你分呢?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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



Samuels
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-11-07 11:28
Samuels:
首先感谢你的帮助!我再试试。另:我的程序源文件放的位置对include有没有影响?我的源文件放在/usr/src下;#include <linux/kernel.h>这里包含的具体路径到底是哪里?
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2002-11-07 11:37
教你一个最简单的方法。搜索出你机器里所有的kernel.h文件,然后一个一个的改错,当编译出错时,你就确定在那里了。
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2002-11-07 15:52
unix1998:
我再问你2个弱智问题:
1、编译选项中的__DDEBUG__ __DMODULE__   -Wall等具体是什么意思?有何作用?在哪里能找到相应的说明?
2、#ifndef;#ifdef等有何作用?到底是什么意思?
#ifndef _DEBUG_H_  
#define _DEBUG_H_  
#include <stdio.h>
#endif
   
那些参数你应该找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]
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2002-11-07 15:53
http://www.fanqiang.com/
去这里看看吧。
cncs
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2007-01-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2002-11-08 11:07
给你一个简单的办法:
    将 /usr/include/linux/version.h 用
       /usr/src/linux-2.4.18-3/include/linux/version.h
     代替!
Samuels
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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                           结束
choise
驱动牛犊
驱动牛犊
  • 注册日期2001-12-27
  • 最后登录2004-11-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
也可以。我已经成功了。
ricky_ma
驱动牛犊
驱动牛犊
  • 注册日期2002-06-27
  • 最后登录2002-12-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
  
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2002-11-13 13:29
choise:
   我用你的方法试了后,报如下警告:
load hello.o will taint(破坏) the kernel modules:no license
怎么回事?
bbs_000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2003-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2002-11-13 16:35
这个警告是在insmod时产生的。并且init_module函数里的内容顺利执行;但在rmmod御载该模块时,clean_module函数并没有被执行。怎么回事?
flydesert
驱动牛犊
驱动牛犊
  • 注册日期2002-11-12
  • 最后登录2003-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2002-11-14 10:31
各位大虾:我是把源代码目录(忘了,反正有一个linux-2.18.3)下的linux和asm目录替换/usr/include下的linux和asm目录,编译绝对通过,但就是insmod的时候出现no license错误,请不吝指教
qzhqzh
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望23点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2002-11-14 12:22
用户被禁言,该主题自动屏蔽!
上一页 下一页
游客

返回顶部