1.3 嵌入式系统开发流程
1.3.1 流程概述
由嵌入式系统本身的特性所影响,嵌入式系统开发和通用系统的开发有很大的区别.嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发三大部分,其总体流程如图1-2所示.
图1-2 嵌入式系统开发流程图
在系统总体开发中,由于嵌入式系统与硬件相互依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求.另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择.往往通过硬件实现会增加产品的成本,但能大大提高产品的性能和可靠性.
另外,开发环境的选择对于嵌入式系统的开发也有很大的影响.这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等.比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择VxWorks等.
由于本书主要讨论嵌入式软件的应用开发,因此对硬件开发不做详细讲解,而主要讨论嵌入式软件开发的流程.
1.3.2 嵌入式软件开发概述
嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解.
(1)交叉编译.
嵌入式软件开发所采用的编译为交叉编译.所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码.编译最主要的工作就是将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件.要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行.嵌入式系统交叉编译环境如图1-3所示.
图1-3 交叉编译环境
这里一般将进行交叉编译的主机称为宿主机,也就是普通的通用PC,而将程序实际的运行环境称为目标机,也就是嵌入式系统环境.由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码.
由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等,交叉编译过程如图1-4所示.
(2)交叉调试.
嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别.在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程.而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态.
图1-4 嵌入式交叉编译过程
嵌入式系统的交叉调试有多种方法,主要可分为软件方式和硬件方式两种.它们一般都具有如下一些典型特点:
①调试器和被调试进程运行在不同的机器上,调试器运行在PC机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板).
②调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程.
③在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试.这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如gdbserver).
④目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行.此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别.
思考与练习
1.举出本书中3个未提到的嵌入式系统的例子.
2.什么叫嵌入式系统?
3.什么叫嵌入式处理器?嵌入式处理器分哪几类?
4.解释交叉编译的概念.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。