新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式系统的除错策略

嵌入式系统的除错策略

作者: 时间:2013-01-22 来源:网络 收藏

JTAG 是除错通信的传输层,位于运行在主机上的除错器与处理器除错资源之间。命令被移入命令暂存器,以存取除错中的硬体 IP。由于 ICE 增加了成本,很多半导体供应商将更多除错硬体整合在晶片上,以解决除错限制的问题,并提供与 ICE 相似的功能。片上除错硬体的一种常见实现是飞思卡尔半导体公司在 68-kbit Coldfire处理器和 PowerPC(现在是 Power 架构)处理器上的背景除错模式(background debugger mode ,BDM)。其他供应商也有相似功能的专有名称。

片上除错硬体增加了一些功能,如硬体中断点、内部暂存器存取、读/写到记忆体,以及观察点(watchpoint)等,这些功能以前只能透过 ICE 使用。在一个多处理器 SoC 中,可以将每块晶片除错硬体连接到主 JTAG 控制器。不同供应商的连接可能有所不同,但典型的作法是在片上除错 JTAG 状态机和主除错器之间建立起一个 TDI-TDO JTAG 链(图 4)。

跟踪

即时除错中最大的问题之一就是海森堡的臭虫(Heisenberg bug),或探针效应(probe effect):为除错或监控而增加的任何软体或硬体都可能改变即时的行为。当增加用于剖析、除错或监控资讯的软体时,就会发生这种情况。使用除错硬体时也会有类似的影响。例如,片上除错硬体可能将处理器的执行流程修改到插入中断点处,或者用于剖析的硬体可能偷取(steal)从处理器到记忆体的部分频宽,以便用来保存剖析的资讯。

除错硬体还可能以 UART 连接来记录资讯,而产品软体也可能使用这个介面。ICE 通常提供非侵入式的跟踪功能,开发者可以在任何时候存取处理器的程式计数器。越来越多的 SoC 供应商正在把跟踪硬体整合到晶片上,以提供类似的功能(图 5)。

透过专用的跟踪硬体、专用的跟踪埠、跟踪资料与处理器资料分离的资料R流排,以及 JTAG 介面,使跟踪硬体得以实现非侵入式的跟踪。

使用者可以利用一个跟踪埠来X取跟踪资讯。在这种方式下,将一个跟踪盒或逻辑分析仪连接到跟踪埠,以重建资讯并让它们与原始码建立关联性。另一种X取跟踪资讯的方法是使用一个虚拟跟踪缓n记忆体,处理器记忆体将跟踪资讯存入缓n记忆体,而当测试结束时由主机(例如透过 JTAG 埠)来检索(retrieve)这些资讯。第叁种方法是使用一个专用的跟踪缓n记忆体,专门用来保存跟踪资讯,这可以让主机在测试结束时检索。

全球处理器除错介面(Global Embedded Processor Debug Interface)的IEEE-ISTO 5001TM 2003 Nexus 5001TM 论坛标准可为嵌入式处理器的软体发展和除错提供一个开放而通用的介面(参考文献 7)。Nexus Forum 在 1998 年开始运作,在1999 年发表了第一个 Nexus 标准,并在 2003 年做了更新。其目标是,在嵌入式除错与工具领域多个供应商的经验基础上,实现片上除错功能与介面的标准化。由于该论坛的多个供应商已经为片上除错提供了专有产品,因此基本的片上除错要求已经足以轻地达到 Nexus 的符合性。好处是 Nexus 跟踪介面的标准化,例如跟踪功能、信号、消息协定和应用编程介面(application-programming interface,API)。同时,标准化还为供应商的定制化提供充分的空间。Nexus 标准最初是针对汽车应用的,现已快速扩充到无线与网路市场。

多核心除错

缓衡记忆体能提供高性能,但却难以除错,因为它们将 CPU 的执行情况与外部记忆体R流排隐藏起来,并且难以了解到核心与 DMA 或加速硬体之间的一致性。嵌入式跟踪硬体有助于解决这个问题,因为被跟踪的R流排通常是虚拟的(在缓衡记忆体以前),而非实体的。跟踪缓n记忆体前、后的R流排也非常有助于更完整地了解缓衡记忆体的行为(图 6)。

两个跟踪结果的比较,能够提供快取失败(cache miss)的良好指示,此时缓衡记忆体造成对实体R流排的存取。这种方法有助于减少快取失败,并提高软体的性能。另一种方法是增加嵌入式的缓衡记忆体除错硬体,在除错模式下读取缓衡记忆体内容,或写入缓衡记忆体。这种方法通常采用缓衡记忆体除错暂存器形式,并透过软体或 JTAG 埠存取。使用者使用除错器可以暂停程式的执行,并检查缓衡记忆体的内容。使用者可以用这个资讯解决各种缓衡记忆体清除问题,如无效、同步或溢出。

现代 SoC 经常在一颗晶片内整合多个处理器,用传统的除错硬体难以对多个核心之间的互通性进行除错。有一种最新出现的除错技术叫交叉触发(Cross-triggering),它成为对复杂多核心 SoC 除错的常用方法(参考文献 8)。该方法的原理是将一个核心域的事件转换到其他核心域或相同核心域的产生触发器(generate trigger)上。典型事件是进入除错模式、发生中断、出现观察点,以及出现中断点。输入触发器一般是除错要求。触发器产生一个除错要求、一个中断,或一个 SoC 垫(SOC pad)的突波杂讯(glitch)。它们都可以⒍或停止处理器上的跟踪。触发器的组合将所有弹性留给了最终使用者,使他们能够设计出复杂的除错序列。可以在 Core B 到达某个程式位址时,用交叉触发器⒍ Core A 上的一个跟踪,或当 Core A 进入除错时,停止 Core B 的活动。

随着对 SoC 尺寸压力不断地增加,低成本除错可能成为嵌入式系统架构的圣杯。但是必须牢记一件重要的事:永远不要在系统的除错能力方面作出妥协。如果不能预先处理好系统的所有臭虫,那么以后就无法获得更大发现问题的机会。在减少嵌入式除错硬体上所节省的成本,其代价可能是在专案后期付出更高昂的软体除错成本。另外还应记得,除错与安全两种要求是相互矛盾的。很多制造商现在交付产品时只是简单地关掉除错功能来防止骇客的攻击。这种做法是不明智的。你永远不可能预期会在现场遇到什么问题。比较好的做法是采用各种安全方式防止进入除错部分,如用密钥或熔丝(fuse),这样才不会危及你的除错功能。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词:策略系统嵌入式

评论


相关推荐

技术专区

关闭