分类: LINUX
2008-04-12 17:17:44
制作交叉工具链(转) 1. 交叉编译
Glibc Binutils GCC 配置选项简介2 工具链工具链的获取途径 从stracths自己制作工具链 从网络下载工具链 用网络下载的脚步自动生成工具链 2.1.1 从stracths自己制作工具链 2.1.1.1 在ubuntu下动手编译arm-elf工具 来源: 最近,再次拜读了youbest版主的大作——CLFS2.0原理分析,又结合Cross-Compiled Linux From Scratch - Version SVN-2.0.0-20060808-ARM一书的详细过程,觉得受益匪浅。自己也看了一些关于Linux系统的移植的文章,就有了一些疑问。 2.1.1.2 自己制作arm-linux交叉编译环境(一)-2.1.1.3 scratch篇
来源:http://blog.csdn.net/chenzhixin/archive/2007/01/12/1481442.aspx 交叉编译是指在一台电脑上来编译另一种结构的电脑上的代码,编译生成的程序不是运行在本机上的,而是另一种结构的机子上(^_^,快晕了...),打个比方吧,比如我的系统是x86结构的,如果我需要编译一个arm结构的程序,那编译器等就都要重新弄过了,这个编译过程就叫做 交叉编译,在嵌入式开发中就必须要交叉编译,在开发主机x386上开发arm目标机上可以运行的代码 在<<嵌入式linux系统开发技术详解-基于arm>>这本书中,有一章是将怎样制作自己的交叉编译环境的,不过用的是gcc2.95,很早以前的东西了,而且不能编译linux.2.6的内核,为了锻炼自己,我就打算自己编译下,在网上一搜索,都是差不多的文章,比如 一步步制作自己的交叉编译环境,等,但版本都比较低,我想用最新的版本来编译,经过几天的google,发现个crosstool比较好用,只要稍微改动下就能自动编译,目前最新版本为0.43,最高支持gcc-4.1.1-glibc-2.3.6,下载地址为:
还有个LFS工程,这个工程是教会大家怎样从代码制作自己的小linux系统的,主页为 ,这个工程包含很多小工程,其中的CFLS是专门为跨平台用的(Cross Linux From Scratch) ,clfs sysroot 是用来测试新的编译方法的,SVN版本已经包含了对最新软件包的支持 BOOK下载地址为: 编译的时候用到的补丁包 : 编译用的软件包: 由于编译过程复杂,又可能碰到一些莫名其妙的错误,所以最好还是用别人已经弄好的 (arm-elf-toolchain) ) 强烈建议编译的过程中边编译边看clfs-sysroot文档中的cross-compier tool,也就是第5章,因为我是新手,不能保证编译的过程中会没有错误,或者编译后无法使用等等,所以.......
0:准备好所要用到的资料和其他准备工作
1). 首页要准备好编译用的软件包:
binutils-2.17.tar.bz2 gcc-4.1.1-tar.bz2 glibc-2.5.tar.bz2 glibc-ports-2.5.tar.bz2 gdb-6.6.tar.bz2 linux-header-2.6.20-rc4 (补丁自己打) 来源: 1。两种不同的方式,哪种更好? 在ARM上移植Linux系统,大体步骤是:移植Bootloader,Linux kernel移植,文件系统的移植。 在ARM上创建Linux系统,好像是先创建文件系统和安装必要的工具包,然后再去配置和编译内核。斗胆的问一句:这种方式做出的Linux系统能在ARM平台上跑起来么?
2。在ARM上创建Linux系统,因为针对ARM平台有好几个型号的处理器,而export CLFS_TARGET="arm-unknown-linux-gnu"对目标平台只是一个unknown,对后面的工作有影响么?
3。在ARM上创建Linux系统,到最后的时候才去配置和编译内核,在这一步才确定所用的处理器的具体型号,但再第六章已经完成了一些包的编译安装的工作,这有什么不妥么?这对整个创建的系统有影响么?
4。在ARM上创建Linux系统,有没有考虑在ARM目标平台上所使用的文件系统?一般ARM上都是flash的存储器。
5。在ARM上创建Linux系统,如果我想去装一个应用程序,是在第六章去编译安装么。
2.1.2 从网络下载工具链 直接通过网上下载已经制作好的交叉编译工具链。该方法的优点是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的,也就是固定的没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名的错误,建议读者慎用此方法 2.1.2.1 Sourcery G++ 是一种完善、可靠、方便的基于GNU工具链的软件开发环境。 完善性: 它能够提供创建应用程序的一切工具,包含一个增强的基于Eclipse的集成开发环境和一个完整的GUN工具链:优化的ISO C/C++ 编译器,一个灵活的汇编器,一个强大的连接器,实时库,一个基于汇编级的源代码调试器。Sourcery G++可以在GNU / Linux和微软Windows上运行。支持多种CPU芯片和操作系统. 可靠性: Sourcery G++包含了最新的对GNU 工具链的改进。CodeSourcery 已经在它的extensive hardware lab上通过很多的测试对Sourcery G++进行了验证。CodeSourcery同时提供更广泛的支持。 方便性: 通过 Sourcery G++ graphical installer就可以安装Sourcery G++,很方便的用Sourcery G++ IDE来编译和调试我们的应用程序。 Sourcery G++有专业版(企业版)和个人版,可以通过Compare Sourcery G++ editions 来决定哪个版本对自己最合适。
GNU C & C++ Compilers GNU Assembler & Linker C & C++ Runtime Libraries GNU Debugger Debug Sprites Eclipse IDE Access to Updates GNU/Linux Prelinker Unlimited Support(个人版本没有) 企业版本和个人版本没什么大的区别,以上的特性基本上都具有,唯一不同的是企业版能无限支持。 我们可以通过:下载最新版本
我现在制作出了GCC 4.1.x的toolchain,我知道从GCC 4.0.x开始就支持EABI了,但是我希望制作一个使用EABI的根文件系统。
通过测试我也已经确认,使用Gcc 4.1.x编译内核,在不开启EABI Feature的情况下,可以在使用Gcc 3.4.x制作的根文件系统中运行。 问题是,我需要开启EABI Feature编译内核,但这要求一个支持EABI的根文件系统,有谁有类似的经验? 嵌入式Linux开发中使用的CPU速度往往向对不会太高,因此,尽可能提高代码的性能就非常必要。通常开发人员应该对该CPU的具体型号有一定的了解,以便启用编译器中对该型号的优化,以ARM为例,我们可以通过 -march=armv5te 和 -mtune=arm9tdmi 来对代码在ARM9上的运行进行优化。有时这些优化体现出来的性能改善是比较大的,我曾对比过一些复杂算法的代码优化前后的性能(执行速度),都有一定的提升 2.1.2.2 arm-linux-gcc-3.4.1.tar.bz2下载
2.1.3 用网络下载的脚步自动生成工具链
buildroot-20070205 用于生成linux操作系统下的交叉编译工具链和嵌入式linux系统的根文件系统,支持x86、arm、powerpc等处理器 来源: croostool-0.43
下载地址: (tarball)
Howto文档:
制作工具链的tarball搭配情况:
详细步骤,以制作制作arm-linux-gcc-3.4.5-glibc-2.3.5工具链为例子.
制作之前确保你的机子上有如下几个工具:bison flex build-essential。build-essential 主要是用于提供GCC、GLIBC等必要的编译资源,一般做开发的人员机子上应该都会有的。如果没有,对于ubuntu用户:sudo apt-get install build-essential bison flex. 用croostool-0.43制作arm-linux-gcc-3.4.4-glibc-2.3.5工具链
cd /opt/workspace/croostool-0.43
vim demo-arm.sh
以下两个变量可以修改成自己需要的目录: TARBALLS_DIR=/opt/workspace/downloads RESULT_TOP=/opt/workspace/toolchains 如果需要编译哪个版本工具链那就把以#开头的如下条目打开 eval `cat arm.dat gcc-3.4.4-glibc-2.3.5.dat` sh all.sh --notest |