首先建立预工具链
先编译生成汇编连接器Binutils,然后编译生成编译器GCC。按照书上操作即可,遇到编译错误,我采取的方法是把解压的文件全部删除,然后重新执行,确定每步命令的正确。
其中提到了几个命令
CC
make中常用到的环境变量,CC指定使用C程序的编译器,CXX指定使用C++的编译器,CFLAGS,CXXFLAGS分别设置传递给编译器的参数
make
这是一个很强大编译工具,以后有机会在仔细学习吧
在这本书中常用到的命令有 make clean ,清除.o
make install,安装软件
make mrproper ,清除代码中多余的内容
在编译GCC的时候用到了Bootstrap编译方式,
因为GCC可以支持很多语言,C语言是最基本的,在编译过程必须带有,Bootstrap就是先由主系统的gcc编译生成C语言的编译器(I),然后由新生成的C语言的编译器再编译生成新的编译器(II),再由编译器(II)编译生成编译器(III),最后比较(II)和(III),相同则编译成功,然后再编译其他语言的支持。
然后建立临时工具链
要先编译内核的头文件,
因为编译基本C库的时候要用到
编译基本C库
Glibc是GNU Library C 保证了程序和内核之间的调用
在编译过程用到了march设置架构,mtune设置优化的架构
configure
对编译进行配置,生成Makefile
--prefix=/tools 指定编译到的文件名
调整工具链
使接下来的编译使用刚刚编译好的Glibc
find
*是通配符,包含所有文件,除了以 . 开头的文件,-maxdepth 指定搜索的深度, -xtype 指定文件类型,-exec 指定搜索完成执行的命令
编译汇编工具和GCC
预工具链中汇编工具和编译工具还依赖主系统中的Glibc
patch应用补丁
编译测试工具集 Tcl,Expect,Dejagnu
Tcl是工具控制语言的缩写 (Tool control Language)
Expect实现自动和交互任务进行通信
DejaGNU 包含了测试其他程序的框架
不明觉厉
临时系统的构成
这其中包含大量的工具,只要按照书上的操作执行即可,遇到错误删掉重新执行,直接覆盖可能还会继续报错
sed
这是经常用到的一个命令,后面总是跟着一串复杂的表达式,书中介绍可以配合diff比较两个文件(原文件和用sed新产生的文件)的不同,来观察sed的命令的作用,我选了一个比较简单的sed命令进行了比较
我找到了一篇比较详细的教程http://www.cnblogs.com/fgds/archive/2012/02/14/2350839.html
grep
这也是一个比较常见的命令,他可以用正则表达式搜索文本,并将匹配的行打出来
http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
strip
清理临时系统要用到的命令,
--strip-all ,删除所有符号和定位信息
--strip-debug,删除所有调试符号和调试片段
--strip-unneeded,删除所有符号及不需要的定位信息
退出临时系统制作用户
exit
现在临时系统就已经构建完成了,接下来就需要开始建立目标系统了