QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1399|回复: 5

各位编程高手,帮帮忙吧!怎么做i686的rpm???

[复制链接]
发表于 2003-1-10 16:06:30 | 显示全部楼层 |阅读模式
为了加入ntfs文件系统支持以及usb移动硬盘支持,我用RH8的kernel-2.4.18-19.8.0-src.rpm重新编译了内核,但是rpmbuild做出来的都是i386.rpm,而系统原来的是i686.rpm。这是怎么回事啊?各位大虾请教教我吧!

PS.
除了修改linux-2.4.18-19.8.0-i686.config和/linux/driver/usb/storage/unusual_dev.h 外没改任何地方,编译用
rpmbuild -ba kernel-2.4.spec

无论如何请指教一下吧!
发表于 2003-1-10 16:48:15 | 显示全部楼层
i386也一样。
编辑/usr/lib/rpm/rpmrc,把里面的
buildarchtranslate: osfmach3_i686: i386
buildarchtranslate: osfmach3_i586: i386
buildarchtranslate: osfmach3_i486: i386
buildarchtranslate: osfmach3_i386: i386
buildarchtranslate: athlon: i386
buildarchtranslate: i686: i386
buildarchtranslate: i586: i386
buildarchtranslate: i486: i386
buildarchtranslate: i386: i386
这些行冒号后面的i386改成i686,其事做成i686的rpm包也没什么意义。
回复

使用道具 举报

发表于 2003-1-10 17:10:57 | 显示全部楼层

Re: 各位编程高手,帮帮忙吧!怎么做i686的rpm???

[quote:37eff85d44="liu_adams"]为了加入ntfs文件系统支持以及usb移动硬盘支持,我用RH8的kernel-2.4.18-19.8.0-src.rpm重新编译了内核,但是rpmbuild做出来的都是i386.rpm,而系统原来的是i686.rpm。这是怎么回事啊?各位大虾请教教我吧!

PS.
除了修改linux-2.4.18-19.8.0-i686.config和/linux/driver/usb/storage/unusual_dev.h 外没改任何地方,编译用
rpmbuild -ba kernel-2.4.spec

无论如何请指教一下吧![/quote]
如果你的机器是i686,编译时使用的arch自然就是686,何必在乎一个文件文件后缀呢,呵呵:-)
回复

使用道具 举报

 楼主| 发表于 2003-1-10 18:28:06 | 显示全部楼层
就是说编译出来的代码自然是为i686优化的,是这样吗?

那我的i686机器编译出的代码就不能用在i386上了是吗?

谢谢啦。
回复

使用道具 举报

发表于 2003-1-10 18:42:07 | 显示全部楼层
呵呵,不仅是后缀的问题,i686参数确实有优化的,在/usr/lib/rpm/rpmrc里,前面有一段定义:
# XXX this is the i386 optflags that rpm has traditionally used in the past.
#optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: i386 -O2 -march=i386 -mcpu=i686   <---这里是定义i386参数的优化选项,默认就是用这个
optflags: i486 -O2 -march=i486
optflags: i586 -O2 -march=i586
optflags: i686 -O2 -march=i686 -mcpu=i686  <---这里就是定义i686参数的优化选项,我的CPU是塞扬2,P3结构的,因此我将这行改成optflags: i686 -O3 -march=pentium3 -mcpu=pentium3 -pipe -fomit-frame-pointer
optflags: athlon -O2 -march=athlon
optflags: ia64 -O2
...
...
...
buildarchtranslate: athlon: i686
buildarchtranslate: i686: i386        <--这里最重要,定义了就算是i686体系的机器,还是转换成i386参数编译(大概是为了兼容性和稳定性,采用这种保守的参数编译),这是默认的,只要改成i686:i686,那样只要你的是i686体系的,就会按上面的i686参数优化编译,编译出来的rpm包也是i686后缀的
buildarchtranslate: i586: i386        <--同理,如果你的机器是i586体系的,则修改这行,以下类推
buildarchtranslate: i486: i386
buildarchtranslate: i386: i386


可以看到,默认的i386优化参数和i686优化参数只是-march参数不同而已,因此,优化还不是很彻底,根据自己的机器来设定才能更优化

用rpm --showrc可以看到默认的rpm包优化选项,自己修改一下,运行这个命令看看optflag标志就知道有没有正确设置好了

当然,也不是说,只要修改了/usr/lib/rpm/rpmrc,就必然所有的src.rpm编译时都会优化,这里定义的只是缺省优化选项,但修改了rpmrc后,所有的build出来的rpm的后缀都会是自己指定的那种

有些src.rpm包在spec里自己指定了rpmbuild参数,在编译时无论你的rpmrc如何设置,都只能安装指定的优化参数编译,编译出来的rpm后缀还是i686

还有一些src.rpm包自己在源码包(非spec)的./configure脚本里指定了optflag优化标志,或在./configure时自己检测机器环境来设定optflag,这样rpmrc里指定的优化选项也是没效的,但编译出来的文件后缀还是i686[/quote]
回复

使用道具 举报

 楼主| 发表于 2003-1-10 18:52:12 | 显示全部楼层
[quote:e79b3eb2de="llc"]呵呵,不仅是后缀的问题,i686参数确实有优化的,在/usr/lib/rpm/rpmrc里,前面有一段定义:
[/quote]

谢谢谢谢!这篇真是精华。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 14:45 , Processed in 0.039090 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表