新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式系统基础之:嵌入式软件开发流程

嵌入式系统基础之:嵌入式软件开发流程

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257144.htm

这里一般将进行的主机称为宿主机,也就是普通的通用PC,而将程序实际的运行环境称为目标机,也就是环境。由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。

由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的也包括、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等,交叉编译过程如图4.18所示。

2.

经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,开发过程中的与通用软件开发过程中的调试方式有很大的差别。在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。而在开发中,调试时采用的是在宿主机和目标机之间进行的,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。

嵌入式系统的交叉调试有多种方法,主要可分为软件方式和硬件方式两种。它们一般都具有如下一些典型特点。

n 调试器和被调试进程运行在不同的机器上,调试器运行在PC机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板)。

n 调试器通过某种通信方式(串口、并口、网络、等)控制被调试进程。

n 在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如gdbserver)。

n 目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别。

下面分别就软件调试桩方式和硬件片上调试两种方式进行详细介绍。

(1)软件方式。

软件调试主要是通过插入调试桩的方式来进行的。调试桩方式进行调试是通过目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试。该方式的典型调试器有gdb调试器。

gdb的交叉调试器分为GdbServer和GdbClient,其中的GdbServer就作为调试桩在安装在目标板上,GdbClient就是驻于本地的gdb调试器。它们的调试原理图如图4.19所示。

gdb调试的工作流程。

n 首先,建立调试器(本地gdb)与目标操作系统的通信连接,可通过串口、网卡、并口等多种方式。

n 然后,在目标机上开启GdbServer进程,并监听对应端口。

n 在宿主机上运行调试器gdb,这时,gdb就会自动寻找远端的通信进程,也就是GdbServer的所在进程。

n 在宿主机上的gdb通过GdbServer请求对目标机上的程序发出控制命令。这时,GdbServer将请求转化为程序的地址空间或目标平台的某些寄存器的访问,这对于没有虚拟存储器的简单的嵌入式操作系统而言,是十分容易的。

n GdbServer把目标操作系统的所有异常处理转向通信模块,并告知宿主机上gdb当前有异常。

n 宿主机上的gdb向用户显示被调试程序产生了哪一类异常。

这样就完成了调试的整个过程。这个方案的实质是用软件接管目标机的全部异常处理及部分中断处理,并在其中插入调试端口通信模块,与主机的调试器进行交互。但是它只能在目标机系统初始化完毕、调试通信端口初始化完成后才能起作用,因此,一般只能用于调试运行于目标操作系统之上的应用程序,而不宜用来调试目标操作系统的内核代码及启动代码。而且,它必须改变目标操作系统,因此,也就多了一个不用于正式发布的调试版。



评论


相关推荐

技术专区

关闭