交叉编译工具链在arm开发中出很重要的位置,开发之前肯定要先有编译器 连接器 汇编器等基础的编译工具。arm体系是一个很复杂的体系,里面的指令有数个版本不同的体系level还有很多自己的特点 ,这就要求编译器也要出几个版本的针对不同的应用。
当然网络上存在很多的编译器的资源,但是作为一个嵌入式开发人员还是要会自己构建出来一个工具链的,做到只能说不想做,不能说做不到,不然真的遇到特殊应用的需要无法作出编译器项目就直接挂了。
整个工具链的编译过程如果采用纯手工的step by step 真的需要几天时间,并且对于意志力的要求会很高,因为每一步都会产生很多的问题。对于整个文件结构,系统环境,需要关联的各种库要求很复杂,尤其是很多库的版本组合是很难确定的。
这里我们用一个先用一个简单的方法区进行,就是利用一个存在的强大脚本crosstool-ng 来编译出工具链
这个脚本可以帮助我们下载需要的文件,做目录的准备等工作。
下载地址是在 http://crosstool-ng.org/ 这里想一个ftp站 ,我用的事最新的1.19.0版本
虽然crosstool-ng 可以帮我们自动的下载关联文件,但是对于系统的环境还是我们自己需要搞定的,有几个是系统必须有的
这里我们就直接系统联网直接更新了
#sudo apt-get install g++ libncurses5-dev bison flex texinfo automake libtool patch gcj cvs gawk
这些要安装的工具中 gcj实力面比较复杂的 ,需要手动下载,这里就自己在网络下嗖嗖。
安装步骤
1.到home文件路径下 就是家目录,不是HOME 目录
2.建立真个编译运行的工作目录
#mkdir crosstool
3.拷贝下载脚本压缩文件到工作目录 并解压
#cp ~/下载/tar/crosstool-ng-1.9.0.tar.bz2 ./crosstool
#tar jxvf crosstool-ng-1.9.0.tar.bz2
4.建立需要的文件目录结构
进入工作目录
#cd crosstool
#mkdir crosstool-build
#mkdir crosstool-install
#mkdir src
5.进入脚本目录 运行脚本 拷贝依赖文件到工作目录
#cd crosstool-ng-1.19.0
#./configure --prefix=~/crosstool/crosstool-install
#make
#make install
#cp ../crosstool-ng-1.9.0/samples/arm-unknown-linux-gnueabi/* ./
6.必要的修改
#mv crosstool.config .config
7.运行图形界面配置工具编译过程和编译选项
#../crosstool-install/bin/ct-ng menuconfig
会出来一个界面进行选择 y 选择 n不选
几个关键配置
Paths and misc options ---> 添(/home/xuww/crosstool/src) Local tarballs directory 存放源码包围之
(/home/yao/crosstool/tools) Prefix directory 编译器安装路径,也就是编译结果生成的编译器存在的位置
Target options --->
*** Target optimisations ***
(armv4t) Architecture level
(arm9tdmi) Emit assembly for CPU
(arm920t) Tune for CPU
编译的线程 回教快编译速度,不宜超过四
Paths and misc options --->
(2) Number of parallel jobs
关闭java编译器
C compiler --->
[ ] Java
缺省是开得 中间有星号 按N
设置编译器前缀中的第二个字符 一般是公司名吗
Toolchain options ---> (xuww) Tuple‘s vendor string
C compiler --->(crosstool-NG-${CT_VERSION}-yh) gcc ID string #cd ~/crosstool/crosstool-build
8.开始进入编译的目录 crosstool-build
#cd ~/crosstool/crosstool-build
#../crosstool-install/bin/ct-ng build
就开始等吧 估计网速可以的换也就一个小时 如果网速慢机器破 就挂机吧 两小时以上那
ubuntu下编译交叉编译工具链