嵌入式设备无处不在,从家里到汽车,从办公室到遥远的装配工厂、甚至海上石油钻井平台。由于这些设备已渗透到世界每一个角落,远程维护和远程调试就变得十分重要。当然,在理想世界里,远程调试是不必要的。但在现实世界中,这还是必要的。
典型的调试系统由一台主机pc、一个目标连接和被测试设备组成。大多数情况下,主机是运行微软视窗操作系统的pc,偶尔也会是运行linux的系统。与被测设备的通信有几种方式,一般通过并行、串行或以太网连接来实现。许多制造商提供连接以利用被测目标的片上调试(ocd)功能。然后,ocd接口通过一个特定的管道与目标处理器相连。
为了便于远程调试,一台设备在制造时必须考虑三点。第一,目标的ocd如何与外部相连?如果用于ocd通信的连接器处于系统深处,那么被测目标可能要在现场拆卸下来才能调试,或者只有以某种无法接受的方式才能对其进行修改。第二,ocd接口应该植入被测目标内还是放置在外部?如果在实验室,设计师利用主机的串行接口通过ocd接口与被测目标通信,那么最终产品是否要内置ocd接口,而只把串行端口留在外面?或者,ocd接口是否应与被测目标一起放置在远程位置?这里要考虑的因素不只是成本。如果被测目标处在恶劣的环境下,而且必须小心密封,那么问题就与被测目标处在工厂环境中的情况完全不同。第三,如何从主机到达ocd接口的问题也必须考虑。主机可能位于数英里外的地方,如果要将主机运抵现场,其尺寸和重量又是一个问题。即便是现代的笔记本电脑,要带着它在危地马拉的帐篷里进行调试也非易事。
远程调试也包括不太极端的情况,如待在家里调试一个正在实验室中开发的新原型。在这种情况下,问题不是测试设备如何访问目标,而是工程师如何访问主机,或者主机如何访问测试设备。每种情况都有不同的处理方法。
首先看一下最简单的情况,即工程师想待在家里调试位于实验室的系统。假设他的主机在物理上与测试设备相连,现在的问题是如何从他的家庭电脑控制主机。市面上有几款商业产品可以很容易做到这点。假设两个系统都可以访问互联网,那么我们有几种商业解决方案。通过利用基于web的gotomypc简单地建立一个账户,任何人都可以从任何网络浏览器安全、方便地访问远程pc。因此,坐在家里,这位工程师也可以在本地计算机上看到其办公室电脑的工作桌面,就像本人在办公室一样有效地测试和调试目标。其它类似产品,如symantec公司的pcanywhere,也可以实现同样的功能,但安全性和客户端要求可能有所不同。这种情况要求所有的调试和维护软件都安装在实验室的系统上。
仍然是针对远程目标,如果这位工程师想在本地做一些测试和调试工作,那么问题将变得更复杂。如果他还处于设计阶段,或者如果维护和调试涉及大量的编译或仿真,那么使用本地主机可能更容易处理。在这种情况下,我们必须指出如何通过调试接口连接到本地计算机。考虑到工具仍在实验室,我们只需要把主机与调试器的连接抽象化。这种连接可以是串行、并行、usb或以太网连接。我们将考虑以太网连接,因为它已经非常普遍。
在本地测试环境下,我们经常利用企业内部互联网(内联网),它连接了许多pc和一些测试设备,并具有一个连接到互联网的网关。在内联网的元素中,办公室的每台pc和测试设备都有一个本地的ip地址,一般从外部无法看到它们。这提供了安全保障,而且是必须采取的措施,因为没有足够的外部ip地址可以分配给每个办公室的每台设备。网关设备通常是一个路由器,它是网络的门户,往往具有一个外部能看到的ip地址。为了执行远程调试或维护,外部世界的客户端需要访问内部的设备。路由器有一个简单的方法来处理这项任务。网络地址转换(nat)功能是通过路由器的查找表来实现的。其原理非常简单:tcp/ip(内联网和互联网所用的典型通信协议)通信采用双地址方案。地址的一部分是ip地址,而另一部分是端口号。在本例中,路由器的ip地址通过互联网暴露给外部世界。任何人从任何地方都可直接与其通信。当路由器接收到一个带有地址的信息数据包时,它将查看目标端口号,然后,将这个端口号与路由器nat表中的端口号进行比较。如果有匹配的结果,该表将包含目标通信设备的内部ip地址。然后,数据包被发送到正确的内部设备,在本例中是基于以太网的ocd接口。这种情况几乎没有任何安全性可言,因为任何人只要知道路由器ip地址及调试器的端口号,就可以访问该系统。这一问题的严重性取决于很多因素,将不在本文予以讨论。
如