一般吧,都是用的制作好的交叉编译工具,买的ARM开发板里都带的有配套的常用开发工具。只有像看文章的你和写文章的我这般闲的浑身都疼的人才自己编译制作交叉编译工具。当然我们的目的是为了知其然还知其所以然。知识的学习是无穷尽的,here we go。
Well,首先要明白什么是交叉编译工具链。这个我就不嗷述了,说不定你比我看过的解释的版本还多。这里常用的制作工具链的方法是基于gcc和uClibc或者是gcc 和 glibc 。gcc就是pc用的c、c++ 、甚至Java等的一个功能强大的编译器。而uClibc和glibc ,故名思意lib就是库,c就是c语言……貌似说了太多闲话,意在解释这个为什么不是交叉编译工具而是交叉编译工具链。uClibc和glibc是用于编译嵌入式程序的链接库,而程序编译的本质就是把源代码编译成目标代码,链接成应用程序。而这里强调链就是因为嵌入式开发的独特性,他需要交叉编译,从主机生成可以在目标机上运行的代码,那么在生成时最关键的就是链接的过程看吧,因为同主机有着不同的内存映射和运行机制。这下了解了吧,其实编译这东西没有什么含量,就是通过语法语义分析,物理的生产机器代码,相当于一个查表替换的过程,而链接决定了编译后的程序能不能跑在对应的平台上。
啊,那个……啊……那个……哈……(这个源自赵本山老爷爷在模仿领导讲话,仅供娱乐,程序猿也要会自娱自乐,对着电脑傻笑)。
啊,因为uClibc比glibc短小精悍,一般用于要求较高,程序要求要较小的嵌入式设备,虽说它兼容glibc的大多接口,但是还是有些没有实现的,所以牵涉到部分程序编译不了,故,我们就gcc 和 glibc来制作这个工具链。
首先需要下载编译crosstools工具,这个是我们用来制作编译链的工具,上crosstool官网:http://kegel.com/crosstool/,下载
让我们下载好crosstool-0.43.tar.gz,然后进入crosstool-howto.html------》Quick Start,然后看到下边的配置说明:
Quick Start
Download and unpack. For instance:
wgethttp://kegel.com/crosstool/crosstool-0.43.tar.gz
tar-xzvf crosstool-0.43.tar.gz
cdcrosstool-0.43
Then look at the demo scripts; there'sone for each supported CPU type. For instance, demo-i686.sh is an example ofhow to build a toolchain that targets the i686 processor. It sets threeimportant variables:
TARBALLS_DIR=$HOME/downloads # where it will save source tarballs
RESULT_TOP=/opt/crosstool # where it will install the tools
GCC_LANGUAGES="c,c++,java,f77" # which languages it will make compilersfor
(自己编译的话,可以是GCC_LANGUAGES="c,c++")
It then builds gcc-3.4.0 andglibc-2.3.2 for i686 with the line
eval `cat i686.datgcc-3.4.0-glibc-2.3.2.dat` sh all.sh--notest
Edit the script if you want to changeany of these settings or versions. Then (as root) create the directory/opt/crosstool and make it writable by you, and finally (as yourself) run thedemo script, e.g.
sudomkdir /opt/crosstool
sudochown $USER /opt/crosstool
shdemo-i686.sh
(当然,这里是一i686为例的,我们执行脚本的话当然是选的 demo-arm-softfloat.sh 。)
When it finishes, you can run the new compiler as/opt/crosstool/gcc-3.4.0-glibc-2.3.2/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-gcc.(You might want to put/opt/crosstool/gcc-3.4.0-glibc-2.3.2/i686-unknown-linux-gnu/bin on your PATH;then you can run the compiler as i686-unknown-linux-gnu-gcc.)
(ps:默认情况下crosstool会自己下载glibc进行编译,配置,所以我们说他是工具么。)
不难吧,照着做就OK了(看不懂的使劲看就懂了)。把下载好的crosstool-0.43.tar.gz用之前文章配置好的FTP服务,从windows上传到Ubuntu中,我放到了/home/jun/arm/ 下,以后arm开发相关的东西都会放到这个里边。
》》》》》》》》》》》》------------------华丽的分割线-------------------》》》》》》》》》》》》
额,我也不想一个一个编译配置了,因为这样会使得目录结构比较混乱,并且默认的工具名称好多还学要该,我就直接用TQ2440开发板自带的交叉编译工具了。在光盘中的路径为:TQ2440_CD\Linux资源\Linux平台开发工具包,里边有个EABI-4.3.3_EmbedSky_20091210.tar.bz2。我们将它通过FTP上传至jun/arm目录下。你可以在这里下载http://115.com/file/dn11lww4,该编译器用于arm9系列,基于arm v4T 。
然后解压:
$ tar-xjvf EABI-4.3.3_EmbedSky_20091210.tar.bz2
额,这个比较扯的是他默认的路径都是opt/EmbedSky/ 和 要拷贝到usr下的一些工具,我们移除它的默认路径,把对应的工具也手动的拷贝到对应的目录下。
当前目录为/home/jun/arm
$ sudo cp -r usr /
(ps:是一些后边会用的制作文件系统的工具,会自动拷贝到对应sbin目录)
$ cp -r opt/EmbedSky/* ./
(ps:会把4.3.3和crosstool-***拷贝过来,文件比较多,会比较慢吧)
然后就可以把opt和usr给rm掉了。
$ rm –rf opt usr
然后我们把 /home/jun/arm/4.3.3/bin 这个目录加入到环境变量里边
$ sudo vi /etc/environment
里边只有个path,加入时,别忘了用:隔开。并执行:
$ export PATH=$PATH:/home/jun/arm/4.3.3/bin
这样当前环境会有效,而修改的environment文件会在下次开机后有效。
或者修改/etc/profile文件:在末尾添加如下,保存/etc/profile文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
通过下边命令刷新path。
$ source /etc/profile
然后让我们验证一下:
$ arm-linux-gcc –v
Ok,出了一大堆版本说明,安装成功。
好了,文章完成,吃饭去,哈哈。
【本文doc文档下载】
。
。