嵌入式开发之交叉编译工具链制作

嵌入式开发之交叉编译工具链制作

1. 为什么需要交叉编译工具链?

pclinux发行版都自带gnu工具,包括gcc/g++等,其编译出来的应用程序只能运行在pc平台上,如果需要编译针对嵌入式平台的应用程序,则需要嵌入式平台操作系统提供的gnu工具,一般嵌入式linux系统都是裁减过的,系统不会有gcc/g++,就算有,用其编译大型软件也不现实,可以想象速度之慢,
因此,我们需要制作符合目标平台的交叉编译工具链,该工具链运行在PC平台上,用其编译出来的应用程序运行于对应目标平台上,交叉由此而来。

2. 一定要自己制作吗?

可以使用网上他人制作好的一些通用的交叉编译工具链,但由于其不是特定于某一平台,因此编译出来的程序不是最优的,性能可能会打折扣,也可能会出现一些兼容性问题,因此建议针对特定平台制作符合目标平台的交叉编译工具链。
比如常见的codesourcery公司基于GCC推出的的ARM交叉编译工具:
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

3. 交叉编译工具链命名解释

arch [-vendor] [-os] [-(gnu)eabi]

arch - 架构,比如arm
vendor - 工具链提供商,比如none
os - 目标平台操作系统,比如linux
eabi - 嵌入式应用二进制接口

  • 比如rm-none-linux-gnueabi-gcc 主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过 Codesourcery公司优化过推出的编译器。arm-none-linux-gnueabi-xxx交叉编译工具的浮点运算非常优秀,一般ARM9、ARM11、Cortex-A 内核,带有 Linux操作系统的会用到,见上文。
  • 另外这里说明下arm-linux-gnueabi-gccarm-linux-gnueabihf-gcc的区别,两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,只是armel 和 armhf 这两种架构在对待浮点运算采取不同的策略。带hf(hard模式)说明使用fpu计算,同时传参也用fpu中的浮点寄存器,性能最好,不带hf说明要么用fpu计算,但传参用普通寄存器(softfp模式),或者不用fpu,软件模式(soft模式)。

4. 交叉编译工具链制作实战

编译环境:
centos7, gcc/g++4.8.5
目标平台:
Hardware : Freescale i.MX6 Ultralite (Device Tree)
model name : ARMv7 Processor rev 5 (v7l)

4.1 下载crosstool-ng源码,进行安装

解压、configure、make、make install
成果物:ct-ng

4.2 ct-ng list-samples

选择最接近的配置模板,比如我的是A7平台,选择了最接近的arm-cortex_a8-linux-gnueabi,如下图:
在这里插入图片描述

4.3 ct-ng arm-cortex_a8-linux-gnueabi

会在当前工作目录生成默认.config配置文件

4.4 ct-ng menuconfig

使用menuconfig进行图形化配置选择,就像裁减内核一样

4.4.1 Paths and misc options

在这里插入图片描述
在这里插入图片描述

4.4.2 Target options

在这里插入图片描述

4.4.3 Toolchain options

在这里插入图片描述

4.4.4 Operating system

目标系统Linux的内核为4.1.15,此处选择的内核不大于4.1.15
在这里插入图片描述

4.4.5 C compiler

考虑到稳定性,选择稍微低一点版本的gcc
在这里插入图片描述

4.5 ct-ng build

执行命令ct-ng build, 会开始下载一些源码包到目录/home/sam/src,比如linux内核,gnu工具等,如果在公司内网可能无法下成功(速度过慢或者网站被过滤了),这个时候就需要发挥自己网络上寻找资源的能力了,手动下载tarball(源码包)到/home/sam/src目录,最终会用到的源码资源如下:
在这里插入图片描述
libelf-0.8.13.tar.gz
https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz
另外可以查看.config配置文件中给出的资源下载路径,上面的libelf就是这样找到的。
接下来就是漫长时间的等待,我自己build时长如下(2个多小时):在这里插入图片描述

5.成果物

c++5.5.0源码,编译工具等
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值