嵌入式ARM板程序的生成器 ---- 交叉编译器

姓名:刘琛  学号:19020100265   学院:电子工程学院

转自:https://blog.csdn.net/weixin_38815998/article/details/103144982?utm_source=app&app_version=4.13.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

【嵌牛导读】交叉编译器的基础介绍

【嵌牛鼻子】交叉编译器的原理和作用

【嵌牛提问】什么是交叉编译器?如何使用?

【嵌牛正文】

1. 什么是编译器以及交叉编译器

    对于C语言程序,编译器是啥?通俗的来讲编译器就是把C程序“翻译”机器语言(二进制)的“翻译官”,那么编译器和交叉编译器有什么区别?下面通过一张图感受一下:

图1-1 编译器和交叉编译器对比图  

    通过上面图我们可以很直观的看到使用编译器和交叉编译器去编译和执行程序大致流程是大同小异的,只不过交叉编译器的可执行程序需要从X86(PC)平台传送到ARM板平台提供用户执行。那么我们可能存在如下几个问题:

1. 交叉编译器编译出来的可执行程序可以在X86执行吗?

2. 为什么不直接在ARM平台编译?

3. ........?(欢迎评论补充)

2. 为什么需要交叉编译器

首先,我们先来分析一个问题:

2.1 为什么需要分普通编译器和交叉编译器?

这个问题涉及的知识面非常广,我们首先来看看两个编译器面向的平台,普通编译器面向的是X86平台,处理器绝大多数都是Intel的X86架构,注重的是性能,主频更高,多用于计算机领域;交叉编译器面向的是ARM平台,处理器大多数是ARM架构,注重性能和功耗平衡,多用于嵌入式领域。由于两者使用的指令集是有区别的,所以需要不用的编译语言,进而分开不同的编译器。

2.2 交叉编译器编译出来的可执行程序可以在X86执行吗?

上面也说了,X86和ARM的指令集是完全不同的,所以两者的可执行程序当然不具有两个平台运行的兼容性。

如何查看可执行程序属于的平台:

使用命令:file <文件名>

图 2-1 使用GCC编译程序并查看文件属性流程图  
图 2-2 使用arm-linux-gcc编译程序并查看文件属性流程图  
图2-3 在X86平台执行ARM平台可执行程序出错示意图  

2.3 为什么不直接在ARM平台编译

其实这个是可以实现的,某些ARM平台的系统具有这样的编译环境,但是

    因为通常编译工具链对编译环境有较高的要求,编译复杂的程序时,可能需要巨大的存储空间以及强大的CPU运算能力加快编译速度。常见的ARM架构平台资源有限,无论存储空间还是CPU运算能力,都与PC相去甚远,特别是对于MCU平台,安装编译器根本无从谈起。有了交叉编译,我们就可以在PC上快速编出译针对其他架构的可执行程序。

                                                                                                               ----《野火 i.MX+Linux开发实战指南》

在此插句话,推荐大家可以去看看正点原子和野火的ARM资料,目前已经开售板子和开放资料,ARM linux入门需要一个指路人,少走很多弯路。博主出生早了,入门学习时没赶上,现在去薅羊毛。。。。

3. 安装交叉编译器

3.1 交叉编译器介绍

(Ubuntu)安装交叉编译器主要有三种方式:

1. 下载 Linaro 制作好的第三方工具链(选择多)

2. 通过apt-get在线安装(方便快速)

3. 使用crosstool-ng 根据需要自己自作(复杂,不会)

主要介绍第一种:

Linaro 交叉工具链下载链接

选择最新(截止2019/11/19)的:7.4-2019.02

图3-1 交叉工具链类型一览

交叉工具链说明

名称 / 适用的平台

aarch64-linux-gnu /    适合64-bit Armv8 Cortex-A,little-endian(小端)

aarch64_be-linux-gnu / 适合64-bit Armv8 Cortex-A,big-endian(大端)

arm-linux-gnueabi / 适合32-bit Armv7 Cortex-A,soft-float(软件浮点),little-endian(小端)

arm-linux-gnueabihf / 适合32-bit Armv7 Cortex-A,hard-float(软件浮点),little-endian(小端)

armeb-linux-gnueabi / 适合32-bit Armv7 Cortex-A,soft-float(软件浮点),big-endian(大端)

armv8l-linux-gnueabihf / 适合32-bit Armv8 Cortex-A,soft-float(软件浮点),little-endian(小端)

接下来我们可以去分析我们的平台适用哪一种交叉工具链:

3.2 分析平台架构

一般来说,根据使用的处理器就可以得到架构(Armv7 or Armv8),博主使用的是三星的S5P6818处理器,Cortex-A53内核,64位Armv8架构(兼容32位Armv7架构)。

图3-2 S5P6818芯片官方手册介绍截图  

但是最稳妥的办法还是去看看实际的系统信息:

使用命令查看系统属性:uname -a

图3-3 uname查看系统信息  

可以看到我的系统属于armv7l架构,也就是选择:

arm-linux-gnueabi、arm-linux-gnueabihf

两者随便选吗?会发生如下错误:

图3-4 在只有 soft float 环境的平台运行hard float 出错示意图  

3.3 分析平台支持的浮点计算方式

那么怎么确定系统是soft float还是 hard float 呢?我们可以通过一个巧妙的方法去确定,将ARM板上动态库文件(例如:/lib/libc.so.6)传输到PC上使用readelf查看文件信息(因为ARM板没有readelf工具):

图3-5 使用readelf工具查看文件信息示意图  

可以看到,我的动态库属于soft-float类型文件,所以支持hard-float的平台也得看看动态库支持的类型。当然,你也可以静态编译文件,不是使用动态库,这样就可以支持hard-float(前提是硬件支持)。

3.4 下载工具链

图3-6 下载工具链一览图

我的是64位机,下载第二个,这个网站对于国内来说稳定性不行.

3.5 解压、配置和使用工具链

将工具链压缩包拷贝到 /usr/local/arm/   目录下

这个路径是随意的,与后面的配置环境变量相关,但是usr(Unix Software Resource)目录下通常存放各类软件,工具链其实也就是一个软件。

图3-7 解压工具链压缩包流程图  
图3-8 解压目录文件一览
图3-9 bin目录文件一览

重点关注 bin ,bin下存放的就是可执行程序,也就是我们需要的工具链。

include 是标准库文件的头文件存放目录,lib存放一些库文件。

做软链接(不是必须)

做软链接的目的就相当于 Windows 下创建一个快捷方式。不是必须但是方便使用。 

图3-10 做软链接流程图

配置环境变量,方便全局使用

打开家目录下的 .bashrc 在最后加入配置语句,.bashrc属于个人用户配置文件,PATH属于系统全局的变量,这样做的可以使工具链全局可见(也就是整个操作系统任意位置都可以使用 amr-linux-gcc ),操作如下图:

图3-11 打开.bashrc配置文件  
图3-12 配置文件图

使环境变量立即生效(重启也行),查看工具链版本

图3-13 生效工具链,查看版本  

4. 说在最后

其实工具链的安装和大多数linux工具的安装流程都是十分相似的:

下载工具  --->  移动到指定位置  --->  配置环境变量

通过配置工具也是去了解和熟悉操作系统工作原理的有效途径。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容