现有的嵌入式LINUX系统开发过程中,所有的工程师都疲惫于使用两种不同的调试模式分别调试系统的内核和应用程序。首先通过一个JTAG调试工具来配置和启动LINUX系统;嵌入式LINUX系统正常运行起来后,就要通过GDB来继续调试工作。
LAUTERBACH公司综合了上述两种传统调试技术特长提供了一种新的LINUX调试技术。
本文以ARM架构上的LINUX系统开发为例,详细介绍和对比这三种不同的调试模式的实现和应用。
静态调试模式
通过JTAG调试接口进行软件调试的工具一般都只能工作在静态调试模式下,处理器和整个系统都必须被同时挂起。然后调试工具通过JTAG接口把处理器和目标系统的当前状态获取并显示出来(如图1所示)。

静态调试模式具有如下的优点:
● 静态调试模式唯一的环境需求就是目标系统必须支持JTAG调试标准,该调试模式最大的优点就是可以支持从复位向量表开始调试;
● 只要调试工具支持LINUX和MMU调试,就可以实现对LINUX内核及进程越界等问题的调试;
● 如果软件异常,随时可以挂起处理器,查看当前错
误代码及系统状态;
● 因为处理器处于挂起状态,内核和其它进程都不会再对系统造成任何的干扰。
然而静态调试模式也有其不足之处,一旦处理器被挂起,所有的通信接口进程同时被终止。造成的结果就是所有通过Ethernet、Bluetooth或者CAN等接口和处理器进行通信的外部设备, 都会因为等待响应超时而中断连接。因此通过静态模式进行调试时,即使你只调试其中的一个进程或函数,也有可能改变整个系统的状态和配置;接下来再继续运行和调试程序,就无法保证系统的完整性和连续性,所以后续的调试可能就没有任何意义。
动态调试模式
GDB 调试模式是嵌入式LINUX系统的通用的动态调试模式。 在该模式下,可以实现只对当前进程挂起,系统的内核和其它的所有进程都继续处于运行状态。
然而GDB是一个纯粹的软件调试工具,同时需要下面的软件环境才可以实现:
● 目标系统上要有活动的GDB Server LINUX进程
● 主机端要有相应的调试软件,例如TRACE32(如图2所示)

TRACE32与GDB Server通过RS232或者Ethernet接口进行通信,收集当前被挂起的进程的状态信息。但是要实现动态调试模式,还必须建立在如下两个条件都成立的基础之上:
● 目标系统已经被完全正确的初始化并正确启动
● GDB Server 永远处于活动状态——即通信接口已经正确运行,处理器或GDB Server不会被其它程序错误的挂起
综上所述,两种调试模式都有各自的优点和不足,静态调试模式比较容易实现,操作也比较简单,但是无法保证系统的连续和完整性;动态调试模式环境需求比较复杂。因此,LAUTERBACH提供了可以实现上述两种调试模式的调试工具,在完全克服了各自的缺陷的同时充分发挥了各自的优势,实现了嵌入式LINUX调试技术的飞跃。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉