多核调试方案加速开发进程
对于嵌入式设备而言,多核技术是指在单一处理器芯片中放入多个处理内核,可提供更高的处理器性能、更有效的电源利用率,并且占用更少的物理空间,因此给硬件和软件开发工程师带来了许多优势。与多核解决方案相提并论的是多处理器技术,即在单块电路板或一个集成系统中包含多个处理器。为充分发挥多核以及多处理解决方案的潜能,仅仅拥有高性能的芯片是不够的,还需要采用新的调试方法和工具,以帮助软件和硬件开发人员在完整的多核系统环境中高效地进行调试工作,进而对“编译—编辑—调试”的流程进行优化。
在传统上,JTAG调试技术主要是用于硬件bring-up,近来也常常被用于配合基于代理的调试(agent-based debugging)。不过,在多核和多处理的环境中,片上调试(on-chip debugging)正扮演着越来越重要的角色,因为这种技术可隔离运行在单个或多个内核中不同软件之间复杂的交互活动,从而帮助开发人员对操作系统或中间件实施更加有效的调试。
多核处理器在单个芯片中植入了多个处理器引擎,这就可以提供更高的CPU性能、功能特性和分区选项。多核处理器通常有两种实现形式:第一种是对称多处理(SMP)。在这种情况下,开发人员面对的并非是多个内核,而是单一的抽象化硬件平台,由SMP操作系统决定具体由哪一个内核来运行哪个任务,其中每个内核都是相同的,而且在同一个操作系统的管理控制之下,共享同一个内存。第二种是非对称多处理(AMP)。在这种情况下,各个处理器内核都运行着各自独立的操作系统。这种独立性意味着,系统中的各个处理器内核既可以是同构的(运行同样的操作系统),也可以是异构的(运行各自不同的操作系统)。
由于多核环境显著增加了系统复杂度,因此在对操作系统和与多核相关的硬件进行调试的时候,就必须采用一整套更有效的工具。尽管传统的多核是指在单个芯片中放入多个内核,但是在实际开发工作中所遇到的与多核有关的问题,实际上不仅仅局限于在单一芯片中的多个内核。调试工作中的问题常常呈现为多处理的形式,而这些处理器的内核却不一定是在同一个芯片之中。不论这些处理器内核是在同一个芯片之中,或者是分布在同一个电路板中的多个芯片之中,甚至是同一个系统中的多个电路板之中,开发人员都必须解决好多处理环境中的调试问题。在一个非常复杂的系统中,开发人员很可能面临着系统中的多个CPU板采用了多内核和多处理器技术的问题。
多核与多处理技术带来了许多新的调试挑战,因为系统复杂度不断增加,以及要求通过优化硬件和软件来充分发挥多核的性能潜力,难度就更大了。其中最主要的挑战来自以下几个方面:
如何有效地管理内存和外设等共享资源;
如何在多内核、多电路板和多操作系统的环境中对操作系统和应用代码进行调试;
如何优化JTAG接口并充分利用JTAG带宽;
如何调试单个芯片中的同构和异构内核,进而实现整个系统的协同调试;
如何有效地利用基于代理的JTAG调试方法,并确保不同调试任务之间的平滑过渡;
如何确保多核环境中应用系统调试的同步机制。
对于多核JTAG调试来说,有三种主要的技术选择:以单一JTAG接口支持所有内核的调试器;在单一JTAG调试接口中采用独立调试器的JTAG多路技术;JTAG链接器或可编址扫描端口(addressable scan port)。在多核调试中,上述三种技术途径都是在处理同一个核心问题——由SoC厂商所提供的JTAG接口所造成的局限性。为了节省成本,许多SoC厂商都只为芯片提供单一的JTAG接口,而不理会其中包含了多少个内核。对于开发者来说,最大的挑战就是成本有效地使用这些接口来同步多核以及多处理器的调试工作。其中,单个调试器方式采用IEEE 1149.1标准菊花链(daisy chain)方法。
http://www.ed-china.com/ART_8800021750_400013_500015_TS_d8b613e4.HTM