1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
编译器: 就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables) 。 一:什么叫交叉编译器呢? 在解释什么叫交叉编译器前,我们必须要知道“本地编译”这个概念,在我们之前学习过得软件开发中,都属于本地编译,换而言之就是在x86平台下,直接将源文件编译出来的程序,编译出来的程序可以在当前平台下进行运行。在理解这个概念的前提下,我们接下来再来学习什么叫交叉编译器。 而所谓的交叉编译器,其实也很简单,就是在一种平台上编译出来的程序,不在是放在自己的机器上去运行,而是放到另外一个平台上去运行,也就是我们所说的环境不一样,而这也就是为什么称之为交叉编译器的原因,用英文解释,这就是所谓的cross。 二:体系结构与操作系统 1,常见的体系结构有ARM结构、x86结构等. 2,常见的操作系统有linux,windows等. 3,同一个体系结构可以运行不同操作系统,如x86上可以运行Linux、Windows等,在ARM上可以运行Linux、WinCE. 4,同一个操作系统可以在不同的体系结构上运行,比如Linux可以运行在x86上,也可以运行在ARM上. 5.同样的程序不可能运行在多个平台上,比如Windows下应用程序不能在Linux下运行.如果一个应用程序想在另一个平台上运行,必须使用针对该平台的编译器,来重新编译该应用程序的二进制代码,就像我们现在在身边进程遇到的,如果你使用的是苹果手机,下载需要的app,会提醒你下载适合苹果版本的,而如果你使用的是,那你就要选择androin的应用程序。 三:使用交叉编译器的原因 ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使用本地的编译器来编译程序.但是,编译器在编译程序时,会产生大量的中间文件,这会占用很大的内存和磁盘空间,且对CPU处理速度要求较高,比如S3C2440A内存、磁盘空间只有几十到100多兆,CPU只有400-500MHz,完全达不到编译程序的要求.所以,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器(当然我们也可以从我们简答的认识下去认识为什么使用交叉编译器,在我们平时开发的过程中,我们最多的使用的还是基于x86的平台,确切的可以说就是我们的pc机,因为pc机相对我们的开发板而言,资源是相对丰富的,我们可操作性较强)。 如果要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链,然后才能使用去编译源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.但编译器不是万能的,受版本限制,编译某些程序时会报错.常见的交叉编译工具链有: 1,Cross -2.95.3 tar: 该版本较早,除了编译vivi外一般不使用. 2,arm920t-eabi.tgz: 4.1.2版本的编译器,支持eabi,可以编译TX2440A开发板上的所有程序. 3,arm-linux-gcc: 4.3.2版本的编译器,支持eabi,是最常见的交叉工具链. 什么是EABI EABI,Embeded application binary interface,即嵌入式应用二进制接口,是描述可连接目标代码、库目标代码、可执行文件影像、如何连接、执行和调试以及目标代码生成过程,和c, c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础.简而言之,EABI就是一种编译规范,交叉编译器在编译时,对于浮点运算会使用硬浮点运算,提高了浮点运算的性能,节省了编译时间. 四:交叉编译工具链实例 1、arm-none-eabi-gcc (ARM architecture,no vendor,not target an operating system,complies with the ARM EABI) 用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是 newlib 这个专用于嵌入式系统的C库。 2、arm-none-linux-gnueabi-gcc (ARM architecture, no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI) 主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过 Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有 Linux 操作系统的会用到. 3、arm-eabi-gcc Android ARM 编译器 4、armcc ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的. 5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc arm-none-uclinuxeabi 用于uCLinux,使用Glibc. arm-none-symbianelf 用于symbian,没用过,不知道C库是什么 . 五:安装交叉工具链实例 1,将arm-cortex_a8-linux-gnueabi.tar.bz2交叉编译器压缩包复制到虚拟机主目录; 2,解压arm-cortex_a8-linux-gnueabi.tar.bz2压缩包; tar xvf arm-cortex_a8-linux-gnueabi.tar.bz2 3,进入配置文件修改环境变量; sudo vi /etc/bash.bashrc 进入之后在最后一行添加如下代码: export PATH=$PATH:/home/fs/arm-cortex_a8/bin 注:fs为名叫fs的用户 4,配置生效: source /etc/bash.bashrc 5,测试: 在命令行输入: arm-c{TAB}(按TAB可以补全,说明交叉编译器安装成功) |
|
相关推荐
|
|
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11990 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:02 , Processed in 0.591871 second(s), Total 63, Slave 46 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号