文章目录

  • 嵌入式开发之交叉编译工具链制作
    • 1. 为什么需要交叉编译工具链?
    • 2. 一定要自己制作吗?
    • 3. 交叉编译工具链命名解释
    • 4. 交叉编译工具链制作实战
      • 4.1 下载crosstool-ng源码,进行安装
      • 4.2 `ct-ng list-samples`
      • 4.3 `ct-ng arm-cortex_a8-linux-gnueabi`
      • 4.4 `ct-ng menuconfig`
        • 4.4.1 Paths and misc options
        • 4.4.2 Target options
        • 4.4.3 Toolchain options
        • 4.4.4 Operating system
        • 4.4.5 C compiler
      • 4.5 `ct-ng build`
    • 5.成果物

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

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源码,编译工具等

嵌入式开发之交叉编译工具链制作相关推荐

  1. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

  2. Linux下gcc交叉编译工具链制作实例详细总结(附下载地址)

    一.简介 本文主要讲解gcc交叉编译工具链搭建的全过程,以本人实际的操作去讲述整个工具链的搭建,希望对大家有所帮助. 二.工具链的搭建流程 1.下载相关源码:包括binutils.kernel.gcc ...

  3. 嵌入式Linux开发环境搭建-(4)安装交叉编译工具链

    在ubuntu16.04.2中,安装交叉编译工具链 在ubuntu中进行嵌入式应用程序开发,安装交叉编译工具链是不可缺少的一个环节. PC操作系统:ubuntu16.04.2 LTS 开发板:天嵌科技 ...

  4. 香橙派嵌入式arm开发板下载交叉编译工具链说明

    香橙派开发板以处理器分类,包含全志H2.全志H3.全志H5.全志H6等系列,下文以全志H3芯片的开发板为例,对交叉编译工具链的下载进行说明: 1) orangepi-build第一次运行的时候会自动下 ...

  5. 全手工制作arm-linux交叉编译工具链《一》-转

    全手工制作arm-linux交叉编译工具链 (Gcc 4.2.1 + Glibc 2.6.1 + Linux 2.6.22.6)<一> 作者:Garfield Trump 仅仅是本人在学习 ...

  6. 制定交叉编译工具_制作交叉编译工具链的方法总结(详细)

    网上这类文章比较多,但是都不是很具体,刚好有门课结课论文要写这个,所以就总结了一下.以下的过程都是在ubuntu7.10上实际运行过的. 手工制作交叉编译工具 在制作工具开始前先要选好所需要的Binu ...

  7. Linux环境下交叉编译工具链的制作

    本文参照教材嵌入式Linux开发入门宝典 一.在Windows上安装虚拟机 1.浏览器搜索VMware,下载VMware Workstation Pro最新版,目前为16.2.3,并完成安装. 2.打 ...

  8. 制定交叉编译工具_配置交叉编译工具链-嵌入式Linux

    注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构 ...

  9. 配置交叉编译工具链-嵌入式Linux

    在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...

  10. java交叉编译安卓可用,Android开发实践:Android交叉编译工具链的使用

    前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供 ...

最新文章

  1. 大佬带你详解Python反爬虫措施以及爬虫编写注意事项
  2. 杭电2055 另一种
  3. 转代码判断邮箱是否合法
  4. asp.net实现GZip压缩和GZip解压
  5. 考教育统计与测量可以带哪种计算机,《教育统计与测量》练习题库及答案
  6. 在线便携小电视源码 云电视源码
  7. Python中numpy读取高维数组中特定的行,列
  8. php 创建 cookie文件,php创建、获取cookie及基础要点分析
  9. 设计模式-04-行为型模式详解
  10. 正则判断手机号地区_判断手机号正则表达式
  11. DDSM数据库转换图像格式——LJPEG转为PNG格式
  12. 专业物联网数据采集解决方案,专业无线传感器,专业非接触测量数据采集,非侵入式数据采集
  13. 准备启动一个开源项目 - 技术族谱 - 先期利用Goolge云计算平台
  14. python用百度云接口实现植物识别和动物识别
  15. 050002《马云说》读后感——勇者无畏
  16. 2018世界杯球队热度CGI榜:大数据预测巴西、法国成夺冠热门
  17. 【drawio笔记】向ERD表,列表和UML类添加行
  18. windows无法启动MySQL服务(位于本地计算机上)。错误1067:进程意外终止
  19. 广西南宁机器人比赛_南宁市两名小学生夺得世界教育机器人大赛一项冠军
  20. SuperMap iDesktop中DEM数字高程模型数据的生成

热门文章

  1. 林軒田《机器学习基石》课程总结
  2. SVN创建分支及合并
  3. ROS下usb_cam的安装
  4. Python调用搜狗语音API实现文字转音频
  5. Java菜鸟入坑——字符串中输出数字
  6. linux 123端口,关闭123端口和1900端口的方法
  7. 计算机系统基础-袁春风老师-mooc-第二章测试习题及解析
  8. 微信小程序中播放视频 例子
  9. CAD迷你画图2019破解补丁|CAD迷你画图2019r3注册机下载
  10. abb机器人伺服电机报闸是什么_什么是抱闸电机