您的位置:首页 > 运维架构 > Linux

crosstool-ng 制作arm交叉工具链心得

2016-04-21 11:15 567 查看
最近用crosstool-ng 最新版(当前是1.22.0)编译出了交叉工具链工具

以下是基本操作步骤:

首先,编译安装crosstool-ng

    1)配置 sudo ./configure --prefix=/opt/crosstool-ng       #配置安装目录为/opt/crosstool-ng

    2)编译 sudo make

    3)安装  sudo make install

    4)设置环境变量 echo "export PATH=$PATH:/opt/crosstool-ng/bin " >> ~/.bashrc

第二,配置工具链

     1.查看一下有哪些工具链选项

          1)ct-ng list-samples 

          2)ct-ng arm-unknown-linux-gnueabi (以arm-unknown-linux-gnueabi为例,可以选其它)

          3)ct-ng menuconfig

              这个有点多:

      Paths and misc options  --->
      (${HOME}/development/crosstool-ng/src) Local tarballs directory   保存源码包路径
      (${HOME}/development/x-tools/${CT_TARGET}) Prefix directory  交叉编译器的安装路径

                (4) Number of parallel jobs    指定同时执行 4个工作线程

        Target options  --->     从datasheet中的 BLOCK DIAGRAM 中可以看到
           *** Target optimisations ***
           (armv4t) Architecture level 
           (arm9tdmi) Emit assembly for CPU    
           (arm920t) Tune for CPU

crosstool-ng中的Architecture level, Emit assembly for CPU, Tune for CPU,分别对应的是gcc中的-march=xxx, -mcpu=xxx, -mtune=xxx

S3C2440的对应的配置是:

Architecture level=CT_ARCH_ARCH=-march=armv4t

Emit assembly for CPU=CT_ARCH_CPU=-mcpu=arm9tdmi

Tune for CPU=CT_ARCH_TUNE=-mtune=arm920t

Toolchain options --- >

(cortex_a8 )  Tuple's vendor string

添加自定义 信息 ,比如:

cortex_a8 ,制作后的交叉编译器名如: arm -cortex_a8 -linux-gnueabi-

zjhzjh ,制作后的交叉编译器名如: arm -zjhzjh -linux-gnueabi-

不设置,制作后的交叉编译器名如: arm -unknown-linux-gnueabi-

(armarm -linux) Tuple's alias) Tuple's alias

设置别名,这样会给每个工具创建一软链接比如 :

arm -linux-gcc链接到 到 arm -cortex_a8-linux-gnueabi-gcc

第三,开始编译工具链

        ct-ng build

         (注意,硬盘空间要预留大一些,至少6G以上,上次用10G )

当然在制作工具链的时候,根据其提示,自行用wget将源代码下载到src目录会更快捷,同时也可以下载最新的软件包,这步在进阶步骤中会用到

以下是进阶步骤:

由于即使是最新版的crosstool其中的内核,gcc binuntils等工具包版本也是过时的,比如,内核版本是4.3,而当前版本是4.5.1

所以,需要动手修改crosstool中的配置文件进行最新版本更新,当然,此步骤是在编译过crosstool中的最新版本后进行

主要修改/opt/crosstool-ng/lib/crosstool-ng-1.22.0/config目录下各文件

以内核为例:

内核 kernel目录下linux.in 

4.5.1是我添加的 还有定义主要修改这两处

config KERNEL_V_4_5_1

bool

prompt "4.5.1 (stable)"

config KERNEL_V_4_3

bool

prompt "4.3"

default "4.5.1" if KERNEL_V_4_5_1

default "4.3" if KERNEL_V_4_3

更改gcc  在目录/opt/crosstool-ng/lib/crosstool-ng-1.22.0/config/cc

config CC_GCC_V_5_3_0

bool

prompt "5.3.0"

select CC_GCC_5

config CC_GCC_V_5_2_0

bool

prompt "5.2.0"

select CC_GCC_5

default "5.3.0" if CC_GCC_V_5_3_0

default "5.2.0" if CC_GCC_V_5_2_0

最新版本的是5.3.0 crosstool-ng中的最高版本是5.2.0

就是添加版本号,仿造它原来的,以此类推

其它的库在companion_libs中

哪个升版本了就添加升级后的版本号

这样编译出来的工具链就是最新版本的组合了。

还有一个是在编译cortex A8等高端CPU时,在配置的时候可以将FPU改为硬件浮点,这样,才编译时会用到CPU内部的硬件浮点部件

以s5pv210为例:由于支持neon和vfpv3所以可以使用硬件浮点

(cortex-a8) Emit assembly for CPU 

(neon) Use specific FPU                          此处也可以使用vfpv3因为s5pv210支持

Floating point: (hardware (FPU)) --->

这样,编译出来的就是使用硬件浮点的工具链了。

参考资料:

使用crosstool-ng-1.9.3为S3C2440制作交叉编译工链 (http://blog.163.com/allegro_tyc/blog/static/337437682011512101413873/)

嵌入式Linux学习笔记(基于S5PV210 TQ210) (http://blog.csdn.net/zjhsucceed_329/article/details/32336019)

【总结】crosstool-ng使用心得和注意事项 (http://www.crifan.com/summary_crosstool_ng_note/)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息