antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4047回复:16

No rule to make target \'Rules.make\'

楼主#
更多 发布于:2003-11-01 11:33
我想编译linux下源码树中linux/net/packet的程序。
结果出现如下错误:

Makefile:134: /Rules.make: No such file or directory
make[1]: *** No rule to make target `/Rules.make\'.  Stop.

不知道怎么动手啊。修改Makefile也不行:(
谁来帮帮我?
放弃瘟草,现吃李草
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-01 21:56
很明显没有Rules.make文件啊
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-02 14:45
不是那个问题。
呵呵,我把/usr/include下的头文件用linux源码下的头文件覆盖后就可以了,不不知why?
放弃瘟草,现吃李草
leiqi
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2004-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-02 14:52
知了!我也遇到过!单独编译linux/net/packet做什么?
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-03 16:44
想抓包啊
放弃瘟草,现吃李草
mobi
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2005-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-03 16:58
直接编译不行的... 需要重新写一个Makefile...
还得看看你所编译的东东有没有关联的文件(我没
编译过... )

核对一下,你是不是要编译里面的af_packet.c ?
如果是的话,试下下面的:
gcc -O2 -D__KERNEL__ -DMODULE -c af_packet.c -I/usr/src/linux-2.4/include

**** /usr/src/linux-2.4 是内核代码目录
。。。。。。。。。。。。。。。。。
mobi
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2005-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-03 17:00
ft ... 发现前言不搭后语...

我是先写了前面的,然后又去linux 下编译了一下

总之我编译通过的,内核是2.4.7-10
。。。。。。。。。。。。。。。。。
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-11-03 22:45
ft ... 发现前言不搭后语...

我是先写了前面的,然后又去linux 下编译了一下

总之我编译通过的,内核是2.4.7-10


我也能通过,可是开始是用
insmod af_pakcet.o可以把他安装上去。
可是我rmmod af_packet后,
发现再也安装不上去了。

[编辑 -  11/3/03 by  antspower]
放弃瘟草,现吃李草
umber
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2004-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-03 23:21
不是那个问题。
呵呵,我把/usr/include下的头文件用linux源码下的头文件覆盖后就可以了,不不知why?


不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。

那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上

TOPDIR := /lib/modules/$(shell uname -r)/build

不知道行不行?
umber
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2004-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-11-03 23:35
或者试试这个,好像从2。4开始kernel build都用个什么kbuild system。我是搞了好长时间就是搞不懂。不过这个命令可能能build你要的module:

在net/packet/ 目录里面

make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd`
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-04 00:13
谢谢不管怎么样,先给分了。呵呵
偶现在又在吃瘟草,唉
放弃瘟草,现吃李草
umber
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2004-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-11-04 03:57
哇,太感谢帮主了 :D
还是第一次拿分,感觉不错 :P
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-11-04 08:58
可怜的版猪 :D,5555~
放弃瘟草,现吃李草
mobi
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2005-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-11-04 10:25
[quote]ft ... 发现前言不搭后语...

我是先写了前面的,然后又去linux 下编译了一下

总之我编译通过的,内核是2.4.7-10


我也能通过,可是开始是用
insmod af_pakcet.o可以把他安装上去。
可是我rmmod af_packet后,
发现再也安装不上去了。

[编辑 -  11/3/03 by  antspower] [/quote]

rmmod af_packet 后用lsmod 看看这个模块还在不在?
还有... 看看rmmod af_packet 以及再次安装有些什么
信息打出来?
信息有些是直接打出来,有些可以在/var/log/messages
里面可以看到...
。。。。。。。。。。。。。。。。。
mobi
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2005-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-11-04 10:29
[quote]不是那个问题。
呵呵,我把/usr/include下的头文件用linux源码下的头文件覆盖后就可以了,不不知why?


不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。

那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上

TOPDIR := /lib/modules/$(shell uname -r)/build

不知道行不行? [/quote]

这个问题简单可以这么说:
/usr/include 都是应用程序包含的头文件
/usr/src/linux-***/include/ 下是内核程序包含的头文件
由于应用层和内核层的函数定义与实现是有区别的(有时候
表面看函数是一样的,但实际不一样)
所以,编译不同的程序要指定不同的路径。
应用层是默认的,没关系。内核的就要加个 -I/usr/src/linux-***/include 才行... 最好不要采用覆盖。因为会影响到以
后编译应用层程序。
。。。。。。。。。。。。。。。。。
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-11-19 10:10
多谢MOBI
放弃瘟草,现吃李草
umber
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2004-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-11-27 04:54
[quote][quote]不是那个问题。
呵呵,我把/usr/include下的头文件用linux源码下的头文件覆盖后就可以了,不不知why?


不记得是在哪本书里面看到说老的LINUX里面是直接把kernel 源文件里面的头文件给作个符号链接到系统的包含文件目录里面,但是新的系统里面都不这么做了,因为库程序的开发和kernel有个滞后,所以新的系统都有个和当前库程序相配的kernel header包。redhat的叫 glibc-kernheaders-2.4-8.36 什么的。所以说绝对不要覆盖库程序的头文件,那样可能会使系统不work。

那个Rules.make 就在 /lib/modules/`uname -r`/build 下面,所以如果给那个Makefile里面加上

TOPDIR := /lib/modules/$(shell uname -r)/build

不知道行不行? [/quote]

这个问题简单可以这么说:
/usr/include 都是应用程序包含的头文件
/usr/src/linux-***/include/ 下是内核程序包含的头文件
由于应用层和内核层的函数定义与实现是有区别的(有时候
表面看函数是一样的,但实际不一样)
所以,编译不同的程序要指定不同的路径。
应用层是默认的,没关系。内核的就要加个 -I/usr/src/linux-***/include 才行... 最好不要采用覆盖。因为会影响到以
后编译应用层程序。
 [/quote]

mobi 的解释看了好几遍了,但是今天才发现实在是模棱两可,很不清楚 :D

其实你去到/usr/include/linux,还有/usr/include/asm下去看看,那些都是kernel的包含文件,并不是你说的/usr/include下的包含文件都是应用程序的包含文件。那么为什么要有两个copy呢?而不是用一个,比如就是最新的正在用的kernel的包含文件呢?我想原因是这样的:glibc的开发是和kernel有紧密的联系的,因为里面很多东西都要用到kernel的特性,但是glibc的开发是和内核的开发有一定的滞后,它是根据某个特定的内核版本开发的,所以要自带和它想配合的内核的包含文件。但是你如果是开发内核模块,却是要用在自己现在用的内核的,当然要包含和自己用的内核配合的头文件。比如,我用的内核是2.6.0-0.test10的,但是我得glibc的kernel header却是2.4的。就是这样。不知道讲的清楚不。
游客

返回顶部