前言:
此刻看官们对“linux 交叉编译环境”大体比较注意,看官们都需要知道一些“linux 交叉编译环境”的相关内容。那么小编在网络上收集了一些有关“linux 交叉编译环境””的相关知识,希望同学们能喜欢,姐妹们一起来学习一下吧!开发平台说明
典型的交叉平台开发环境,包含三个高度集成的部分:
①运行在宿主机和目标机上的强有力的交叉开发工具和实用程序。
②运行在目标机上的高性能、可裁剪的实时操作系统。
③连接宿主机和目标机的多种通信方式,例如,以太网、USB、串口等
嵌入式软件的开发可以分为几个阶段: 编码、交叉编译、交叉调试
开发工具
编辑器:
用于编写嵌入式源代码程序,从理论上来说,任何一个文本编辑器都可以用来编写源代码。各种集成开发环境会提供功能强大的编辑器,如VS系列、eclipse等。常见的独立编辑器: UE、Source Insight、 vim等。
编译器gcc:
编译阶段的工作是用交叉编译工具处理源代码,生成可执行的目标文件,在嵌入式系统中,由于宿主机和目标机系统不一样,需要使用交叉编译,GNU c/C++ (gcc) 是目前常用的一种交叉编译器,支持非常多的宿主机/目标机组合。
调试器gdb:
在开发嵌入式软件时,交叉调试是必不可少的一步。
嵌入式软件调试特点:
调试器运行在宿主机上,被调试程序运行在目标机上。
调试器通过某种通信方式与目标机建立联系,如串口、并口、网络、JTAG等。
在目标机上一般有调试器的某种代理,能配合调试器一起完成对目标机上运行程序的调试,可以是软件或支持调试的硬件。
gdb是GNU开源组织发布的一个强大的程序调试工具。
代码的编译和调试
交叉编译:
嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统,因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。
嵌入式系统的开发需要借助宿主机 (通用计算机)来编译出目标机的可执行代码。
交叉编译链
首先编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程(如下图)。
编译过程包括了预处理、编译、汇编、链接等功能。既然有不同的子功能,那每个子功能都是一个单独的工具来实现,它们合在一起形成了一个完整的工具集。
同时编译过程又是一个有先后顺序的流程,它必然牵涉到工具的使用顺序,每个工具按照先后关系串联在一起,这就形成了一个链式结构。
在嵌入式开发的编译中,需要交叉编译链进行交叉编译。交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)。
交叉调试:
嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。
在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
为什么会有交叉编译
主要原因是:
Speed: 目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能。
Capability: 整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间。。
Availability: 即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
Flexibility: 一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标板上。
标签: #linux 交叉编译环境