2.交叉工具链

发布者:快乐的成长最新更新时间:2024-10-31 来源: cnblogs关键字:交叉工具链  环境  编译 手机看文章 扫描二维码
随时随地手机看文章

一、交叉工具链:

交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的。就像我们现在,编译裸机程序是在pc机上面执行的。可我们运行程序是在开发板。链,就是很多的意思,就是一个工具的集合。在我们前面配置arm-linux-gcc的工具中。在/usr/local/arm/4.3.2/bin的目录下有很多编译工具。例如图1-1:

图1.-1 交叉工具链

下面我们来写一个简单的程序,用这些工具编译。

Hello.c:

#include

void main(){

    printf('hello fish!n');

}

这是一个简单的hello程序。首先我们先用我们熟悉的gcc编译并执行。图1-2:

图1-2

我们看到程序正常运行。输出了内容。

接下来我们用刚安装的交叉工具来编译运行。图1-3:

图1-3

我们看见程序出错了。提示的信息是不能运行的二进制文件。这就奇怪了。这是为啥呢?其实呢。我在前面已经提过了,arm-linux-*工具,编译的程序是在开发板运行的。其实我们可以通过:file 文件名.来查看该应用程序运行的平台。图1-4:

图1-4

可以看到信息,hello是gcc编译生成的是运行在x86架构的,hello1是arm-linux-gcc编译生成的是运行在ARM架构的。

接下来我们把hello1拷贝到开发板运行看看。

我已在开发板烧写好了linux系统,通过u盘,把hello1拷贝到开发板。然后插入开发板的usb口。在终端可以看见提示信息,这是因为我们的linux带有usb驱动,当我们的usb插进去的时候,它检测到了usb,加载好了驱动。现在我们进入u盘,运行hello1程序。图1-5.这时仍然提示错误。如下:

 

 

这是为啥呢?这是我们的开发板缺少程序运行时需要的动态库,因为我刚才编译的时候没有加-static属性。加上-static属性重新编译。图1-6:

图1-6

可以看到,这次加入了-static条件,编译生成的hello2程序比hello1大了许多,就是因为把运行需要的库文件都静态链接进来了。同样拷贝到u盘,可以看到顺利运行。图1-7:

图1-7

二、交叉工具链的详述:

1.arm-linux-gcc编译器:

前面,可以看到gcc和arm-linux-gcc工具的编译条件都是一样的。可为什么编译出来的应用程序会运行在不同的平台呢?这是因为,他们两个在编译的时候引用的头文件不同。传统的gcc是默认去/usr/include寻找它需要的头文件。图1-8:

图1-8头文件

而arm-linux-gcc寻找的头文件的目录不同。首先使用arm-linux-gcc –help查看它的使用:图1-9:

图1-9

注意到参数-print-search-dirs就是显示寻找头文件的参数目录。加上该参数得到一下信息图1-10:

图1-10

从上面的显示看到arm-linux-gcc默认是到我们安装arm-linux-gcc的目录去找头文件的。

 

 

2.arm-linux-ld:

arm-linux-ld是链接器,下面介绍它的使用。

首先先用arm-linux-gcc生成中间文件.o文件。图2-1:

arm-linux-gcc -g -c led.S

图2-1

在上面的参数中-g表示可以用gdb来调试信息,-c是只编译不链接。最后生成led.o中间文件。接下来就是使用arm-linux-ld把该文件链接成elf文件:图2-2:

arm-linux-ld -Tled.lds -o led.elf led.o

图2-2

上面语句的意思是利用arm-linux-ld链接器,按照-T指定的链接器脚本,把生成的led.o(如果有多个.o文件,在后面继续加上),链接成led.elf文件。

 

3.arm-linux-readelf:

利用该工具可以查看生成的.elf文件的内容:

执行:arm-linux-readelf -a led.elf。-a参数是all的意思,表示查看所有信息:图2-3:

图2-3

从上面看到elf文件有一个固定的头:ELF Header:然后:

Data: 2's complement, little endian

是表示他是运行在小端处理器的。

Machine: ARM

是表示他是运行在ARM平台的。

所以当运行一个程序出错的时候,当检查完语法没问题,仍然不能运行的时候,就应该用readelf查看一下这些信息是否符合。如果上面的两种检查完了之后还是不能运行。接下来就是查看需要的库是否存在。使用的命令:

arm-linux-readelf -d hello

运行结果:图2-4:

图2-4

上面显示了该hello应用程序需要的库是libc.so.6.如果没有该库,该程序运行不了。

 

 

 

 

4.arm-linux-objdump:

ARM反汇编器。

上面已经使用arm-linux-gcc编译产生了可执行文件hello2.现在对它进行反汇编。命令:

arm-linux-objdump -D -S hello2 >mydump

该命令的意思是将hello2可执行程序反汇编,输出到mydump文件。执行之后会在该目录下产生一个mydump文件:图2-5:

打开可以看到对应的汇编代码:

但是,都是汇编代码,看起来还是非常困难。可以在编译的时候加上-g调试信息的参数,这样反汇编之后会有部分的c代码存在。这样可以让我们更加容易看懂程序。

图2-5

可以看到加上-g编译,反汇编后,在汇编代码里居然有c代码出现。在上面的代码中printf('hello fish!n');的汇编实现就是它下面两行。源代码:

5.最后一个是文件格式转换工具:arm-linux-objcopy:

从上面的操作知道,汇编代码通过arm-linux-gcc -g -c led.S,把一个汇编文件转化为一个led.o文件,接着使用:arm-linux-ld -Tled.lds -o led.elf led.o,把led.o利用led.lds脚本,链接成一个led.elf文件。但是elf文件无法在板子运行,必须转化为.bin格式的二进制文件。这就是arm-linux-objcopy的功能:

arm-linux-objcopy -O binary led.elf led.bin

图2-6:

图2-6


关键字:交叉工具链  环境  编译 引用地址:2.交叉工具链

上一篇:3.Makefile工程管理
下一篇:1.裸机开发环境的体验(Redhat 6.4 + vbox)

推荐阅读最新更新时间:2024-11-20 10:49

爆款DIY|手把手教你如何搭建X1000编译环境
    年初的智能音箱领域出现了一个爆款——DingDong智能音箱青春版,因其时尚的外形、靓丽的配色,更重要的是强大的功能而备受关注。199元的售价,更是给这款音箱带来了高的性价比,同时降低了语音入口的门槛,1月19日上市至今,多次断货,足以见得大家对它的喜爱程度。   DingDong智能音箱青春版不仅是一款便携式的云音乐播放器,更延续了DingDong语音识别和智能家居入口的强大基因,通过语音点播歌曲、控制家电一样都不少,内置锂电也让这款音箱更便携。   DingDong青春版了拥有一颗强大智慧“芯”——君正X1000处理器。X1000最高运行1GHz,支持硬件浮点运算单元(FPU)和SIMD加速指令,具有强大的计
[手机便携]
IAR for Arm集成开发环境全面支持芯驰科技9系列SoC和E3系列MCU
IAR Embedded Workbench for Arm集成开发环境已全面支持芯驰科技9系列SoC和E3系列MCU 最新版 IAR Embedded Workbench for Arm 全面支持芯驰科技9系列SoC和E3 MCU 芯片,帮助中国汽车行业开发者打造强大的嵌入式开发解决方案 中国上海—2022年6月17日——全球领先的嵌入式开发软件工具和服务提供商IAR Systems日前宣布:其最新发布的IAR Embedded Workbench for Arm 9.30版本已全面支持芯驰科技9系列SoC和E3 MCU芯片。 国内领先的车规芯片企业芯驰科技致力于为未来智慧出行提供高性能、高可靠的车规芯片
[嵌入式]
IAR for Arm集成开发<font color='red'>环境</font>全面支持芯驰科技9系列SoC和E3系列MCU
s3c2416裸跑环境配置
最近刚刚开始学习ARM-linux,上周买了块tq2416的板子,给的Linux资料太复杂太深奥不愿看,等不及想要把2416跑起来。于是到处找相关裸跑资料,可是用2416的人实在少,网上的资料更少,裸跑的资料几乎是空白。最后在amobbs上找到一个相关的帖子 http://www.amobbs.com/thread-5529091-1-1.html ,并通过同事下载了Tifosi_分享的代码,再通过自己的摸索,终于实现s3c2416的裸跑,这里向Tifosi_及我那位同事渊哥表示感谢! 调试软件环境:Keil uVision 4.7,这里需要特别注意,有些版本的Keil支持s3c2416 Device,但是不能通过编译,例如
[单片机]
s3c2416裸跑<font color='red'>环境</font>配置
关于KEIL5编译出现“Target not createt”全系列解决办法——情况1
前言 在KEIL5编程,往往遇到许多“Target not createt”,即目标不能实现这类情况。由此为帮助大家解决这些问题特开此贴。 情况如下: 1、2K字节限制错误 ERROR:RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 或者 ADDRESS SPACE OVERFLOW 直达链接:https://blog.csdn.net/SumubeiFZ/article/details/125344372 2、程序溢出错误 ERROR: PUBLIC REFERS TO IGNORED SEGMEN 直达链接:https://blog.csdn.
[单片机]
关于KEIL5<font color='red'>编译</font>出现“Target not createt”全系列解决办法——情况1
国家电网加快客户侧泛在电力物联网建设,持续优化营商环境
市场添活力 客户获实惠 营商环境是企业生存发展的土壤,是城市综合竞争力的综合体现。国家电网有限公司认真贯彻落实党中央、国务院决策部署,主动变革传统办电模式,创新办电服务理念,深化长效机制建设,推动我国“获得电力”世行评价排名提升至第12位,完成国务院下达的在直辖市、省会城市全面推广小微企业办电服务、实现30个工作日内接电的任务目标,为优化我国营商环境作出了积极贡献。 办电环节、成本指标达全球最佳水平 “获得电力”世行排名显著提升 水美则鱼肥,土沃则稻香。营商环境是企业生存发展的土壤,是推动高质量发展的内生动力。 2020年1月1日,《优化营商环境条例》(以下简称“《条例》”)正式施行。《
[新能源]
华虹NEC加速建立PDK及芯片验证环境
(中国,上海—2012年1月10日)世界领先的纯晶圆代工厂之一,上海华虹NEC电子有限公司 (以下简称“华虹NEC”)与全球专业IC设计软件供应商SpringSoft Inc.今日共同宣布,HHNEC已采用SpringSoft Laker定制IC设计解决方案,运用于建立制程设计工具(PDK)流程中,同时也在其晶圆厂的验证参考流程中整合了屡获奖项的Verdi自动侦错系统。 藉由SpringSoft提供的设计工具,华虹NEC已开发第一版Laker PDK,使其0.13微米的内嵌式闪存技术的定制芯片流程更有效率,并在侦错与功能验证流程中增加百分之五十以上的产能。华虹NEC所提供的0.13微米的内嵌式闪存是最受欢迎的嵌入式非挥发性内存平
[测试测量]
深入解析SMT工厂加工车间的环境要求
在当今的电子制造业中,表面贴装技术(Surface Mount Technology,简称SMT)已经成为了主流的生产方式。SMT工厂的加工车间环境对产品质量、工艺效率及设备寿命都有着显著影响,因此其环境要求应尽可能严格以保障生产效率和产品质量。以下将详细介绍SMT工厂加工车间的环境要求。 一、温湿度控制 首先,SMT加工车间必须对温湿度进行严格控制。一般来说,车间内的温度应保持在23±3℃,而相对湿度则应维持在45%-65%之间。这是因为,如果温度太高,可能会导致电子元器件和PCB板出现热应力,影响产品质量;若温度过低,则可能导致一些元器件出现低温脆性。同时,湿度过高会导致元器件吸湿、氧化,甚至引发静电事故;湿度过低则会使元
[嵌入式]
IAR开发环境使用串口printf输出(基于STM8L15x系列单片机)
这里我们以STM8L15x系列单片机使用ADC内部参考电压测量VDD电压并将电压值value通过窗口打印为例编写程序,相关的adc配置可参见另一篇博客http://blog.csdn.net/m0_37973607/article/details/77141756(STM8L使用ADC内部参考电压通道测量VDD电压) usart.h头文件: #ifndef _usart_H #define _usart_H #include stm8l15x.h void Usart_Init(void); #endif usart.c源文件: #include usart.h void Usart_Init(void) { CLK_
[单片机]
IAR开发<font color='red'>环境</font>使用串口printf输出(基于STM8L15x系列单片机)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved