MyFPGA Forum

 找回密码
 注册
搜索
查看: 4116|回复: 2
打印 上一主题 下一主题

HPS开发之谈谈交叉编译链

[复制链接]
跳转到指定楼层
1#
发表于 2014-8-11 18:03:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 matthew_wang 于 2014-8-11 18:03 编辑


●什么是交叉编译链
交叉编译链的英文名称叫做Cross Compile Toolchain,其功能是实现在一种构架(如X86)的机器上完成软件编译连接的工作,这台机器叫做Host!编译出来可执行程序却是到另外一种构架(如ARM)机器上去执行,这种机器叫做TARGET。与交叉编译相对的就是本地编译(Native Compile)或者叫做当前平台编译!所以这里的交叉主要体现在处理器的构架方面!关于为何要引入交叉编译:主要原因就是编译时间,复杂指令集构架的CPU比精简指令集的嵌入式芯片在性能上会强很多,而且PC的CLOCK相对较高,下图比较了在ARM上进行本地编译和X86上进行交叉编译一些标注库的耗费时间对比!可以发现使用X86交叉编译相对于ARM进行本地编译。能够节省十多倍的时间!
                                    

                    X86交叉编译与ARM本地编译时间比较
图片引自 http://www.scratchbox.org/docume ... /html/tutorial.html
另外由于开发人员习惯在X86上进行开发,为各个嵌入式处理器进行交叉编译开发就是高效开发的必然因素!

●SoCEDS中的交叉编译链
Altera针对HPS在SoCEDS开发环境中整合了两套交叉编译链,一是针对了Baremental程序或者叫做裸机程序的编译链,名称为arm-none-eabi-。其版本号可以再Embedded_Command_Shell中输入arm-none-eabi-gcc -v 命令查看版本!Quartus 13.1中版本为4.6.3!包括了编译C 文件的arm-none-eabi-gcc 和编译c++文件的arm-none-eabi-g++,链接工具arm-none-eabi-ld和调试工具arm-none-eabi-gdb。另外还有些这里就不列了。需要说明的是baremetal 程序和 preloader ,ubootc都是使用这个编译链进行的编译。
SoCEDS中还有另外一条编译链,叫做arm-linux-gnueabihf-。同样使用命令arm-linux-gnueabihf-gcc -v 命令查看版本,Quartus 13.1中使用的是4.7.3版主的Linaro开发的工具链。这个工具链是编译嵌入式ARM-linux应用程序的编译链。

如何调用交叉编译链
无论是在Embedded_Command_Shell还是在DS-5中进行编译,最后都是调用了这两条编译链!但是如何调用到这两条编译链的呢?答案是Makefile。Makefile 是告诉make 工具以何种方式编译,链接设计文件的。这中间就要告诉Make工具调用哪条编译链了!具体在makefile 中通过CROSS_COMPILE这个变量进行指定。可以打开embedded\examples\software\Altera-SoCFPGA-HelloWorld-Baremetal-GNU 、Altera-SoCFPGA-HardwareLib-FPGA-CV-GNU和DE1_SoC的CD demo 。看看每个工程的CROSS_COMPILE变量,就明白每个应用程序应该在什么情况下执行了!
推荐
发表于 2014-8-12 10:39:41 | 只看该作者
编译Baremental程序编译链叫arm-altera-eabi-吧.我用的14.0就是这个链的。
回复 支持 1 反对 0

使用道具 举报

3#
 楼主| 发表于 2014-8-12 11:52:43 | 只看该作者
linjionghui 发表于 2014-8-12 10:39
编译Baremental程序编译链叫arm-altera-eabi-吧.我用的14.0就是这个链的。

是  14.0 以后SoCEDS中的把baremetal 编译练确实有些改动 多谢提醒  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-28 04:52 , Processed in 0.042935 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表