读书频道 > 系统 > linux > 深度探索Linux操作系统系统构建和原理解析
2.2.4 构建二进制工具
2013-09-28 14:25:44     我来说两句 
收藏    我要投稿   
全书一共8章:第1章介绍了如何准备工作环境。在第2章中构建了编译工具链,这是后面构建操作系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链  立即去当当网订购

Binutils包含各种用来操作二进制目标文件的工具,其中包括GNU汇编器as和链接器ld,处理静态库的工具ar和ranlib,系统程序员常用的objdump、readelf、nm、strings、stip等。
Binutils推荐使用单独的目录进行编译:
vita@baisheng:/vita/build$ tar xvf \
    ../source/binutils-2.23.1.tar.bz2
vita@baisheng:/vita/build$ mkdir binutils-build
vita@baisheng:/vita/build$ cd binutils-build
vita@baisheng:/vita/build/binutils-build$
    ../binutils-2.23.1/configure \
    --prefix=$CROSS_TOOL --target=$TARGET \
    --with-sysroot=$SYSROOT

下面介绍各个配置参数的意义。

--prefix=$CROSS_TOOL:通过参数--prefix指定安装脚本将编译好的二进制工具安装到保存交叉编译工具链的$CROSS_TOOL目录下。

--target=$TARGET:因为没有显示指定参数--host和--build,所以编译脚本将自动探测HOST和BUILD的值。对于笔者的机器来说,探测到的HOST和BUILD值相同,都为i686-pc-linux-gnu。在前面设置环境变量时,我们故意将环境变量TARGET的值设置i686-none-linux-gnu,与HOST自动探测的值不同,因此,编译脚本据此判断这是在构建交叉编译工具链,继而将指导宿主系统的工具链编译“运行在本机,但是最后编译链接的程序/库是运行在$TARGET上”的交叉二进制工具。

--with-sysroot=$SYSROOT:我们通过参数--with-sysroot告诉链接器,目标系统的根文件系统放置在$SYSROOT目录下,链接时到$SYSROOT目录下寻找相关的库。

配置完成后,使用如下命令编译并安装:
vita@baisheng:/vita/build/binutils-build$ make
vita@baisheng:/vita/build/binutils-build$ make install

Binutils将二进制工具安装在$CROSS_TOOL/bin目录下,这里不浪费篇幅一一列举各个工具的具体功能了,读者可以使用man进行查看。

除了安装二进制工具外,Binutils还安装了链接脚本,安装目录是:
$CROSS_TOOL/i686-none-linux-gnu/lib/ldscripts

其中elf_i386.x用于IA32上ELF文件的链接,elf_i386.xbn、elf_i386.xc等分别对应ld使用不同的链接参数时使用的链接脚本,如果使用了“-N”参数,那么ld使用链接脚本elf_i386.xbn。

Binutils在$CROSS_TOOL/i686-none-linux-gnu/bin目录下也安装了一些二进制工具,这些是编译器内部使用的,我们不必关心,其实这个目录下的工具与$CROSS_TOOL/bin目录下的工具完全相同,只是名称不同而已。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:4. 切换到vita用户
下一篇:2.2.5 编译freestanding的交叉编译器
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站