- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Linux的嵌入式交叉开发技术王兴杰
基于Linux的嵌入式交叉开发技术*
王兴杰,李 允,江 浩,李 涛
(西南交通大学信息科学与技术学院,成都610031)
了调试命令和调试信息的数据格式及通信过程。
图4 嵌入式软件的生成阶段图5 交叉调试系统体系结构
此交叉调试的特点是主机端环境为Linux系统,主机调试
器采用GDB+JTAGER的方案,由GDB完成对源文件、目标
文件和符号表的访问处理及与用户的交互,由JTAGER程序封
装对交叉调试的支持;调试协议是JTAGER程序与调试代理程
序之间的通信规范。调试代理程序handler则通过特有的
LDIC指令载入目标芯片的微型指令缓存中。
4.1 调试协议
调试协议是整个交叉调试系统的中心。它规定了主机和
目标机之间的数据通信过程。主机和目标机采用尽量简单的
数据包交互,JTAGER需要发往handler的调试命令包括读写
目标机内存(g和p)、增加断点(b)、继续运行(c)。由于读写
目标机寄存器会频繁发生,采用轮询方式定时完成。
在主机和目标机通信过程中用到的通信协议主要有普通
RX握手协议、快速数据下载握手协议、TX握手协议。
4.2 主机端调试器GDB+JTAGER
GDB是公开源码的一种功能强大的通用调试器。它支持
丰富的调试命令和多种编程语言,并支持远程调试方式。运行
GDB的平台通过并行端口(或网口、串口等)连接到已建立运
行环境的目标机时,GDB可以按照远程串行协议(RSP)与目
标机上的插桩程序通信来调试目标系统。但当目标机为裸机
时,GDB无法与之通信而不能调试,所以再增加一个中间软件
JTAGER。其功能是应用JTAG技术实现对裸机的交叉调试。
1)GDB交互数据包
交互过程必须遵守GDBRSP进行数据包处理[4]。数据包
格式为$packet data#checksum。其中:$为数据包的头标志;
packet data为数据包内容;#是数据包结束标志;checksum表
示整个数据包的检验码,用来保证数据的正确传送。
在JTAGER运行过程中,其主控循环不断地接收RSP数
据包、解析,并将处理结果封装成应答RSP数据包,交给GDB。
以读内存为例,
GDB发往JTAGER的数据包:$mc0018004,4#8d
JTAGER应答GDB的数据包:$00d82de9#30
2)JTAGER主控流程
JTAGER在主机上与GDB并行运行。它使用UNIX的I/
O多路转换机制监听指定的tcp调试端口与GDB进行通信。
JTAGER主体控制流程伪码如下:
JTAGER主控程序(…)
{
初始化目标板的JTAG接口;
往目标板的MiniIC载入handler;
打开GDB远程tcp端口,接收gdb远程调试数据;
while(1)
{
监视tcp调试端口和用户标准输入;
if(有数据包)解析后进入相应调试命令处理函数;
else轮询目标机的传输寄存器TX;
}
收到退出命令作结束程序的处理,进行tcp连接的中断和内
存的回收。
}
4.3 目标机代理handler
目标机调试代理handler按照调试协议[4]和JTAGER进行
调试命令与调试信息的交互。当调试事件发生时作为一个事
件处理器对目标芯片进行控制。需要注意的是,由于微型指令
缓存大小的限制(2KB),handler代码量要尽量地精简。使用
ARM汇编编写,其程序流程伪码如下所示:
handler程序流程(…)
{
初始化handler,使目标机处于就绪状态(haltmode);
向JTAGER发送目标机就绪的信号;
while(1)
{
等待JTAGER发送相应调试指令;
//通过mrc实现对RX的读出
if(接收到调试指令)进入相应调试处理子程序;
else向JTAGER发送调试结果;
//通过mcr实现对TX的写入
}
}
5 系统测试
整个软件系统编译过程中,嵌入式系统的硬件一般采用专
门的测试仪器进行测试[3]。软件则需要有相关的测试技术和
测试工具的支持,并要采用特定的测试策略。嵌入式软件测试
中经常用到的测试工具主要有内存分析工具、性能分析工具、
覆盖分析工具和缺陷跟踪工具等。
在嵌入式软件测试中,常常要在基于目标机的测试和基于
宿主机的测试间作出折中。基于目标机的测试需要消耗较多
的时间和经费;基于宿主机的测试虽然代价较小,但毕竟是在
仿真环境中进行的,因此难以完全反映软件运行时的实际情
况。这两种环境下的测试可以发现不同的软件缺陷,关键是要
对目标机环境和宿主机环境下的测试内容进行合理取舍。
6 嵌入式软件的固化运行
当调试和测试完成后,程序代码需要被完全烧入到目标板
的非易失性存储器中,并且在真实的硬件环境上运行。这个过
程
原创力文档


文档评论(0)