LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: good02xaut

另一中LFS的安装

[复制链接]
发表于 2006-2-18 18:12:32 | 显示全部楼层
在ARM平台上本地编译代码,这应该是最高境界了吧。

本地编译怎么又成了最高境界了?。。。嘿嘿。


你说的 CCLFS,也许 Canadian Cross Compiler 就是你所要的。
386编译GCC,386上用GCC再编译出一个arm-linux-gcc,386上用arm-linux-gcc编译gcc。最后生成的gcc就应该是CCLFS了吧?可以运行在arm平台的toolchain。
如果再追求,那就从gcc=>i386-linux-gcc=>GCC,从arm平台把gcc逆向回来,这个境界估计是无人可及了。应该叫做CCCCLFS了,呵呵。

这个,就是我刚刚说的Canadian Cross。A机器上编译为机器C编译程序的,但是在B机器上运行的编译器。比如你要在i686上编译一个为arm编译的gcc,但是这个gcc要运行在mac上。


我准备仔细看看CLFS,有兴趣的话,一起研究吧,共同学习。:)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-18 18:50:39 | 显示全部楼层
在i386平台上编译一个运行在ARM平台的编译器,还不算高境界啊?
用host,和target描述:在host-386上编译出host-arm、target-arm的gcc
你说的那个Canadian Cross:在host-386上编译出host-mac(ppc)、target-arm的gcc
二者雷同,都同时改变了host和target,估计一步搞不定,gcc在host-386上不知道得翻云覆雨多少次。呵呵

没做过,初步设想2部分:
first: host-386编译出host-386,target-arm的gcc
second:host-386,target-arm的gcc编译出host-arm、target-arm的gcc

你说的那个Canadian Cross,好像不能这样,必须一次完成
host-386直接编译出host-ppc,target-arm的gcc。这个和bootstrap都不符合呀,bootstrap要运行3次,你这个只能运行一次,生成的gcc不能再次在386上运行了

越想逻辑越复杂啊。最好就是./configure -platform=ppc target=arm 一次搞定。binutils和glibc也提供一样的配置方案,天下就太平了。呵呵
回复 支持 反对

使用道具 举报

发表于 2006-2-18 19:07:47 | 显示全部楼层
恩,算是不错的境界。也是我想学习的。

Canadian Cross 是要分2次的,一次搞不定。

搜索一下网上资源看看。Canadian cross就是2次的。

具体的细节,我还不清楚,学习中。

最后的这个也是很理想的,但是也许没那么容易做到。但是 --host --build 和--target已经非常简便了。主要是补丁需要一点,这个有点困难,尤其对不懂c或者初学者。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-18 19:27:13 | 显示全部楼层
“Canadian Cross 是要分2次的,一次搞不定。“

这个我不同意,虽然我还不是很清楚过程但是:
在host-386上编译出host-mac(ppc)、target-arm的gcc如果有中间一步的化:
方案1:
host-386上编译出host-ppc-gcc,然后host-ppc-gcc 编译出target-arm的host-ppc-target-arm-gcc.这是错误的.host-ppc-gcc是不能在386的cpu上运行的!
方案2:
host-386上编译出host-386-target-arm-gcc,然后用host-386-target-arm-gcc编译出host-ppc-target-arm-gcc.这也是错误的.host-386-target-arm-gcc虽然能够在386的cpu上运行的,但是生成的目标代码是基于arm的,基于arm的代码怎么能够在ppc上运行呢!
方案2其实是生成ARM本地gcc的方案。

刚才看来CLFS,其实就是建立host-386-target-arm-gcc的,还没有到第二步呢!
回复 支持 反对

使用道具 举报

发表于 2006-2-18 19:54:39 | 显示全部楼层
你应该注意到, CLFS不是 Canadian Cross,因为少了一环。

我说要分2次,是从网上看的,至于具体的,我要重新再看看。不过说的肯定没错的。

说到Canadian Cross,我们用这个举例:build-i686,host-mac,target-arm
1。在i686上编译出 i686->mac 的完整toolchain。
2。在mac上编译出 mac->arm 的完整toolchain。
3。arm有toolchain后,可以编译自己的软件了。
不要错误的理解了Canadian Cross的定义。第二次的编译是要去mac机器上的,不是在i686上进行。

顺便提一下,不是所有软件都有 Canadian Cross 这个概念的,不过相信你也知道的:)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-18 20:58:11 | 显示全部楼层
这样的两次啊,明白了。
其实是我最开始说的CCCLSF,由一个Host-》另一个HOST=》另一个target

CLSF:HOST->一个target
CCLSF:HOST->另一个HOST(必然经过CLSF)
CCCLSF:另一个HOST->另一个target
CCCCLSF:另一个HOST->另一个HOST(必然经过CLSF)

所有的软件都可以CLSF,只有编译器才可以CCLSF。
翻译:所有的软件都可以被交叉编译,只有编译器可以自己交叉编译自己。

补充一下我对Canadian Cross的解释:
1.在386上编译一个可以运行在ppc上的gcc,这时跟arm根本就不然。
2.在ppc上建立交叉编译用的arm-linux-gcc.这比(CCCCLSF)在ppc上编译一个运行在arm上的gcc还简单一步呢。
回复 支持 反对

使用道具 举报

发表于 2006-2-18 21:55:21 | 显示全部楼层
好像你用错了一个词,是 LFS ,不是 LSF 。除非代表的是其他意思。

没错,你说的 CCCLFS 基本就是 Canadian Cross。

补充一下我对Canadian Cross的解释:
1.在386上编译一个可以运行在ppc上的gcc,这时跟arm根本就不然。
2.在ppc上建立交叉编译用的arm-linux-gcc.这比(CCCCLSF)在ppc上编译一个运行在arm上的gcc还简单一步呢。


我记得第1步还要把arm的glibc包括进去,但是我一下子忘记是如何进行的了。我要看看。不知道是我记错了,还是什么。

我的意思是:
还用这个举例:build-i686,host-ppc,target-arm
1。在i686上编译出 i686->ppc 的完整toolchain。但是要包括arm的glibc。
2。在ppc上编译出 ppc->arm 的完整toolchain。这个就不改变了。
3。arm有toolchain后,可以编译自己的软件了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-18 22:56:08 | 显示全部楼层
是错了.LFS,not LSF。:p
我没试过,应该是这样的,现在386上安装了gcc-4.0.2,以及其源码包,假设,为实现你的目标
1。用386上的gcc-4.0.2编译4.0.2src./configure -platform=ppc,编译一个ppc-linux-gcc出来。
2。用ppc-linux-gcc再次编译4.0.2src.这时应该没有必要指定-platform了。编译出来了一个可以在ppc上运行的gcc
3.拷贝这个gcc到ppc机子上,同时拷贝4.0.2的src。
4。在ppc上用gcc编译4.0.2src./configure -platform=arm,编译出arm-linux-gcc
大功告成!
至于在其中binutil和libc怎么一起进行的,我就不清楚了。不过过程一定是这样的。
回复 支持 反对

使用道具 举报

发表于 2006-2-18 23:25:58 | 显示全部楼层
1。在i386上编译 i386-ppc gcc4.0.2。(没问题)
2。在i386上编译 i386-ppc gcc4.0.2。 (这个是干嘛用的?直接用1里边编译出来的不可以?)
3。拷贝过去。(没问题。)
4。在ppc上编译 ppc-arm gcc4.0.2没问题。

这个东西要实践一下才好。可惜没机器。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 00:27:33 | 显示全部楼层
是啊,我也是没有环境,弄了一下CLFS就暂停了.
回复 支持 反对

使用道具 举报

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

本版积分规则

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