CLFS2.0原理分析
来源:互联网 发布:sql注入代码 编辑:程序博客网 时间:2024/05/04 22:03
青橄榄
入口时虽然是苦的,但之后能品味到那淡淡而又清爽的甜。
youbest.cublog.cn 首页 | 文章 | 相册 | 收藏夹 | 留言
[原创]CLFS2.0原理分析
标题: [原创]CLFS2.0原理分析
前言:
实际上,两三个星期前我第一次看CLFS2.0的时候有一种似曾相似的感觉,而且感觉看的非常顺,所以我只看到工具链完成后又看了两三个包的编译我就感觉想明白原理了,因为CLFS2.0的制作的方法我曾经自己尝试过,当时想研究出一种和LFS方法不同的方式来构建系统,虽然当时也做出来了一些成果,但感觉不成功(最重要的就是当时我不知道有--with-sysroot这个参数),但也有不少收获,而且我认为我当时的想法没有错,这可以在我以前的两篇文章《体积小巧、功能单一的LFS》和《LFS反向分析》中看到这个方法的影子,而后续包制作也和我在做憨牛包管理器中的打包方式方法类似,所以我感觉CLFS2.0方法不光适合用在交叉编译上,同样在非交叉的情况下也是适用的。
下面我就将我对CLFS2.0方法的理解总结一下,希望对CLFS感兴趣的朋友有所帮助,同时附加上我根据CLFS2.0的原理制作的PowerPC和MIPS的工具链部分,但因能力和理解力的限制,难免会有差错,也希望各位发现问题后能及时提出,以便及时更改,谢谢。
更新,由于篇幅比较长所以难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载或者发现文章的更新日期已经比较久了,可能已经有更新,您可以在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。
linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=267672
我的Blog:http://youbest.cublog.cn
如须转载请注明作者为冲天飞豹(youbest),并提供转载出处。
好的开始:
设置好环境变量对于后面的编译参数变的通用,也便于输入方便不容易出错
这里需要注意的是在
cat > ~/.bashrc << "EOF"
set +h
umask 022
CLFS=/mnt/clfs
LC_ALL=POSIX
PATH=${CLFS}/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
EOF
里的PATH设置,这个PATH设置一直到制作结束也没有变化,这不同于LFS在第五章和第六章使用不同的PATH,这个问题之后在文章中会回答。
另一个重要设置就是
export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
export CLFS_TARGET="arm-unknown-linux-gnu"
这个设置对于不同的体系平台会不一样,在文章的附录中有另外两个体系平台的定义。
一个说明:我们暂时把CLFS2.0中第五章的部分称为交叉工具链部分,而把第六章称为目标体系平台。
CLFS2.0中的绝招sysroot参数
sysroot参数一共出现了也就出现了三次,但这三次的使用可以说完全改变了以前的制作完整工具链的方法。
sysroot的目的其实很简单:就是将--with-sysroot所指定的目录作为根目录来使用。
我们会在文章中看到这三次sysroot是如何使用来达到目的的。
分析开始:
首先开始复制一些头文件到${CLFS}中的usr/include中,这个步骤似乎和以前没什么区别,但实际上我个人觉得这里少了一步,应该在复制前增加一句
接着我们就要安装binutils,这个包的目的就是为了连接目标文件为可执行文件,那么在第一次编译binutils的时候我们就要开始用--with-sysroot这个“神奇”的参数了。
../binutils-2.17/configure --prefix=${CLFS}/cross-tools /
--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} /
--disable-nls --enable-shared --disable-multilib
从参数上的理解是,binutls将被安装到${CLFS}/cross-tools中(--prefix=${CLFS}/cross-tools),编译出来的二进制文件将运行在${CLFS_HOST}所指定的平台上(--host=${CLFS_HOST}),而其连接出的可执行文件是运行在${CLFS_TARGET}所指定的平台上(--target=${CLFS_TARGET}),屏蔽国际化支持(--disable-nls),同时编译出共享链接库(--enable-shared),不支持多种架构库(--disable-multilib),同时将${CLFS}所定义的目录作为根目录(--with-sysroot)
接着的make configure-host不要少了,这样可以利用前面设置的参数全面配置binutils所有需要编译的部分。
编译这个binutils是使用主系统的binutils和gcc来实现的,主系统是i386结构的,因此,这次我们编译出的这个binutils是利用主系统这个工具链来完成编译的,编译出来的程序也是运行在i386上的。
下面我们图解这个部分
CLFS2.0原理分析
CLFS2.0原理分析
CLFS2.0原理分析
[原创]CLFS2.0原理分析
交叉编译器 制作分析(CLFS2.0原理分析)
交叉编译器 制作分析(CLFS2.0原理分析)
交叉编译器 制作分析(CLFS2.0原理分析)
§0 多元回归分析原理
词法分析初探(编译原理1-0)
Android4.0 Launcher拖拽原理分析
编译原理-LR(0)分析法
ButterKnife(8.4.0版本)原理分析
编译原理_PL/0_词法分析
Android4.0 Launcher拖拽原理分析
Spark2.0-RDD分区原理分析
Tomcat7.0源码分析——请求原理分析
EJB调用原理分析
BT原理分析
Turbo C 2中的常用快捷键
ASP.Net中MD5和SHA1加密的几种方法
详细讲解Quartz.NET
从松鼠嘴里抢食吃,无语
GWT入门介绍(使用JSON格式的数据通讯)
CLFS2.0原理分析
似乎进入了混沌时代
自制longjmp的实现
好好学习:Excel中如何行列转置
常见的几种设计模式
第四章 初始化和清除(做事情应该有始有终)
Windows API一日一练(29)SelectObject和DeleteObject函数
vs2005c#中用户组件在工具箱中不能自动出现的解决办法
孙鑫《vc ++深入详解》第五章文本编程
实际上,两三个星期前我第一次看CLFS2.0的时候有一种似曾相似的感觉,而且感觉看的非常顺,所以我只看到工具链完成后又看了两三个包的编译我就感觉想明白原理了,因为CLFS2.0的制作的方法我曾经自己尝试过,当时想研究出一种和LFS方法不同的方式来构建系统,虽然当时也做出来了一些成果,但感觉不成功(最重要的就是当时我不知道有--with-sysroot这个参数),但也有不少收获,而且我认为我当时的想法没有错,这可以在我以前的两篇文章《体积小巧、功能单一的LFS》和《LFS反向分析》中看到这个方法的影子,而后续包制作也和我在做憨牛包管理器中的打包方式方法类似,所以我感觉CLFS2.0方法不光适合用在交叉编译上,同样在非交叉的情况下也是适用的。
下面我就将我对CLFS2.0方法的理解总结一下,希望对CLFS感兴趣的朋友有所帮助,同时附加上我根据CLFS2.0的原理制作的PowerPC和MIPS的工具链部分,但因能力和理解力的限制,难免会有差错,也希望各位发现问题后能及时提出,以便及时更改,谢谢。
更新,由于篇幅比较长所以难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载或者发现文章的更新日期已经比较久了,可能已经有更新,您可以在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。
linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=267672
我的Blog:http://youbest.cublog.cn
如须转载请注明作者为冲天飞豹(youbest),并提供转载出处。
好的开始:
设置好环境变量对于后面的编译参数变的通用,也便于输入方便不容易出错
这里需要注意的是在
cat > ~/.bashrc << "EOF"
set +h
umask 022
CLFS=/mnt/clfs
LC_ALL=POSIX
PATH=${CLFS}/cross-tools/bin:/bin:/usr/bin
export CLFS LC_ALL PATH
EOF
里的PATH设置,这个PATH设置一直到制作结束也没有变化,这不同于LFS在第五章和第六章使用不同的PATH,这个问题之后在文章中会回答。
另一个重要设置就是
export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
export CLFS_TARGET="arm-unknown-linux-gnu"
这个设置对于不同的体系平台会不一样,在文章的附录中有另外两个体系平台的定义。
一个说明:我们暂时把CLFS2.0中第五章的部分称为交叉工具链部分,而把第六章称为目标体系平台。
CLFS2.0中的绝招sysroot参数
sysroot参数一共出现了也就出现了三次,但这三次的使用可以说完全改变了以前的制作完整工具链的方法。
sysroot的目的其实很简单:就是将--with-sysroot所指定的目录作为根目录来使用。
我们会在文章中看到这三次sysroot是如何使用来达到目的的。
分析开始:
首先开始复制一些头文件到${CLFS}中的usr/include中,这个步骤似乎和以前没什么区别,但实际上我个人觉得这里少了一步,应该在复制前增加一句
代码:
make include/linux/version.h
../binutils-2.17/configure --prefix=${CLFS}/cross-tools /
--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} /
--disable-nls --enable-shared --disable-multilib
从参数上的理解是,binutls将被安装到${CLFS}/cross-tools中(--prefix=${CLFS}/cross-tools),编译出来的二进制文件将运行在${CLFS_HOST}所指定的平台上(--host=${CLFS_HOST}),而其连接出的可执行文件是运行在${CLFS_TARGET}所指定的平台上(--target=${CLFS_TARGET}),屏蔽国际化支持(--disable-nls),同时编译出共享链接库(--enable-shared),不支持多种架构库(--disable-multilib),同时将${CLFS}所定义的目录作为根目录(--with-sysroot)
接着的make configure-host不要少了,这样可以利用前面设置的参数全面配置binutils所有需要编译的部分。
编译这个binutils是使用主系统的binutils和gcc来实现的,主系统是i386结构的,因此,这次我们编译出的这个binutils是利用主系统这个工具链来完成编译的,编译出来的程序也是运行在i386上的。
下面我们图解这个部分
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
爆炒羊肺
羊肺怎么做好吃
羊肺子的做法大全
吃羊肺对人有坏处吗
洗耳
洗耳多少钱
医院洗耳
去医院洗耳流程
医院洗耳多少钱
医院洗耳朵多少钱
洗耳朵有什么危害吗
洗耳朵多少钱
洗耳朵挂什么科
医院洗耳朵是怎么洗的
医院可以洗耳朵吗
洗耳朵疼吗
过氧化氢洗耳朵的步骤
去医院洗耳朵要多少钱
双氧水可以洗耳朵吗
医院洗耳朵怎么洗
医院洗耳朵过程
双氧水怎么洗耳朵
如何洗耳朵
洗耳朵的用什么药水
洗耳朵怎么洗
去医院洗耳朵多少钱
去医院洗耳朵流程
医院洗耳朵
耳朵清洗
去医院清洗耳朵多少钱
怎么洗耳朵
怎样洗耳朵
狗狗洗耳朵
冲洗耳朵
清洁耳朵
过氧化氢溶液洗耳朵方法
过氧化氢可以洗耳朵吗
用双氧水怎么洗耳朵
洗耳球
洗耳球中号
洗耳球的使用方法