免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2428 | 回复: 8

[系统管理] 自己搭建Linux系统,临时系统与目标系统差别在哪里? [复制链接]

论坛徽章:
0
发表于 2013-04-19 14:54 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-19 16:43 编辑

在制作用LiveCD搭建Linux系统的时候,既然临时系统具有一定的独立性,为什么还要制作目标系统。直接用临时系统不就行了吗。到底差别在哪里呢?

论坛徽章:
0
发表于 2013-04-19 15:38 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-22 12:08 编辑

回复 1# cliffordl


   系统搭建原理图
系统搭建原理图.JPG

论坛徽章:
0
发表于 2013-04-19 15:41 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-22 12:09 编辑

回复 2# cliffordl


    这个是解决工具链的依赖性的图示。
系统搭建原理图.JPG

论坛徽章:
0
发表于 2013-04-19 15:47 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-19 16:12 编辑

回复 3# cliffordl


    chenyx的回答:临时工具链还不是纯净的工具链,还有宿主系统的影响,所以,还需要净化,最终做出目标的工具链.

论坛徽章:
0
发表于 2013-04-19 16:06 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-19 16:11 编辑

回复 4# cliffordl


   chenyx的回答: lfs的工具链主要是gcc,binutils,ld库的变化,3次构建,每一次都是想办法脱离宿主机的gcc环境,构建出自己的目标gcc环境

我感觉:ld库应该是Glibc(标准C库)

论坛徽章:
0
发表于 2013-04-19 16:35 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-19 16:37 编辑

回复 5# cliffordl


    chenyx的回答:
      LFS的基本原理是:从host(发行版linux或liveCD)环境中,先创建一个临时环境(也就是在tools目录下建立个各种工具),此时还会部分利用host的工具,然后利用这       个临时环境,此时脱离了host的所有工具,来建立目标机的所有工具。
      第一遍的binutils和gcc只用来编译glibc,在编译过程中还需要利用host的库文件来执行程序,而glibc不需要C++,所以不用编译。
      第二遍的binutils、gcc、glibc作为一个完整的工具链,用来编译临时系统,所生成的程序都会从tools/lib目录下查找动态链接库来执行,因此生成的程序就与host系统无关了,也是因为这个原因不能使用第一遍的bintuils和gcc。
      而最终生成的系统需要从缺省的/lib或/usr/lib下查找库文件,所以后面还需要再编译一次binutils和gcc。


linuxsir社区LFS的社区对lfs的理解非常透彻,你还是去那边看看吧.上面的内容转帖自http://www.linuxsir.org/bbs/thread298478.html?pageon=1#1681084

论坛徽章:
0
发表于 2013-04-19 16:44 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-20 09:24 编辑

回复 2# cliffordl


    临时系统,所生成的程序都会从tools/lib目录下查找动态链接库来执行
    最终生成的系统需要从缺省的/lib或/usr/lib下查找库文件
    binutils生成的ld可以指定函数库文件所在路径

论坛徽章:
0
发表于 2013-04-20 09:07 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-20 09:26 编辑

回复 2# cliffordl


    那么,既然用临时系统的工具链编译目标系统的Glibc可以独立运行,那么为什么还要编译预工具链呢?为什么不直接由主系统的工具链直接编译临时系统的Glibc呢?

论坛徽章:
0
发表于 2013-04-20 09:21 |显示全部楼层
本帖最后由 cliffordl 于 2013-04-20 09:26 编辑

回复 8# cliffordl


     hans_yu的回复:
LFS 中 binutils一共编译三次
第1次编译(binutils pass1)(预工具链) 的程序是个临时程序,供gcc和glibc的编译使用,其中ld指向host(主系统)的库目录。然后又重新生成了一次ld程序
      Shell代码
      make -C ld clean  
      make -C ld LIB_PATH=/tools/lib  
      cp -v ld/ld-new /tools/bin  

这个ld-new程序还未启用,到5.7调整工具链以后才被用到

第2次编译(binutils pass2)(临时工具链)的程序是为生成临时系统使用的,在安装完以后,又重新生成了ld一次,这次重新生成的ld程序将来用以生成目标系统,在将来6.10中才被用到

第3次编译的binutils(目标工具链)程序是目标系统中的程序,如果不打算在目标系统中安装编译工具链,这个就可以不做了



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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP