用于调试目标计算机上的应用程序代码的系统和方法与流程

文档序号:23052496发布日期:2020-11-25 17:28阅读:141来源:国知局
用于调试目标计算机上的应用程序代码的系统和方法与流程

本公开大体上涉及嵌入式系统的调试,并且更具体地说,涉及使用dma可存取存储器在目标计算机与调试主计算机之间通信i/o请求。



背景技术:

嵌入式计算系统(或嵌入式系统)可以包括由一个或多个处理器或中央处理单元以及存储器和输入/输出(i/o)单元控制的电力系统。嵌入式系统的例子包括:电器,例如微波炉、洗碗机、烤箱和冰箱;电信系统,例如无绳电话、手机和电话基站;汽车系统,例如防抱死制动系统和发动机控制系统;娱乐系统,例如便携式音频播放器、电影播放器和便携式游戏装置;工业系统,其包括工业控制、测量装置、医疗装置等。

这些嵌入式装置的软件可能相当复杂。软件通常在一个或多个开发计算机上开发。在开发的早期阶段,此软件通常经历调试过程,以确保软件在目标嵌入式系统环境中的正确操作。通常,作为此调试过程的一部分,期望输出在跟踪应用程序执行时有用的调试消息。在典型的调试系统中,使用库提供输出调试消息,该库要求调试工具在调用i/o函数时停止在目标系统上执行的程序的执行,从存储器堆叠读取i/o参数,并且恢复执行。此类方法具有若干限制,包括对目标系统上的程序的连续操作的侵入,以及具有减少的存储器的目标处理器的不稳定性。克服这些限制的先前解决方案引入了额外的开销,包括额外的硬件和支持该硬件的关联库,这又会占用目标系统上的额外空间。

因此,期望引入一种调试解决方案,其在目标嵌入式系统上引入对程序执行的最小破坏,同时利用已经存在于目标系统上的硬件。



技术实现要素:

一种用于调试目标计算机上的应用程序代码的系统。该系统包括主计算机和目标计算机。目标计算机包括执行应用程序代码的目标处理器、直接存储器存取(dma)引擎以及主计算机和dma引擎可存取的存储器区域。存储器区域在由目标处理器使用来执行应用程序代码的存储器的外部。应用程序代码被链接到软件dmai/o库,该软件dmai/o库包括被配置成将i/o操作参数传输到主计算机可存取的存储器区域的一个或多个i/o函数。目标计算机被配置成在将i/o操作参数传输到存储器区域之后继续执行应用程序代码。

在上述实施例的一个方面中,主计算机包括执行调试器的主处理器,其中调试器被配置成存取存储器区域。在另外的方面中,一个或多个i/o函数被配置成当完成dma传输时,将dma传输完成标志写入存储器区域。在又一另外的方面中,调试器包括监视器线程,该监视器线程被配置成轮询存储器区域以获得dma传输完成标志。在另一另外的方面中,在胎视器线程找到dma传输完成标志之后,调试器从存储器读取i/o操作参数,并且主计算机使用i/o操作参数在主计算机上执行i/o操作。在又一另外的方面,调试器被配置成在i/o操作完成时使dma传输完成标志无效。

在上述实施例的另一方面中,存储器区域在目标计算机的外部。在另一方面,该系统包括ddr存储器,该ddr存储器包括存储器区域。在又一方面,目标计算机包括嵌入式系统。

另一实施例提供一种用于调试在耦合到主处理器的目标处理器上执行的应用程序代码的方法。该方法包括:通过目标处理器上的应用程序代码调用i/o函数;参考与i/o函数对应的库应用程序编程接口(api)函数;以及响应于库api函数,执行到目标处理器可存取的存储器区域的dma传输。存储器区域在由目标处理器使用来执行应用程序代码的存储器的外部,并且可由在主处理器上执行的调试器存取。所述dma传输将i/o操作参数存储在所述存储器区域中。

在上述实施例的一个方面中,i/o操作参数包括与所请求的操作类型相对应的信息,以及与所请求的操作类型相关联的自变量。在另一方面中,存储器区域在目标计算机的外部。在又一方面,该方法还包括当完成dma传输时,由目标处理器将dma传输完成标志存储在存储器区域中。在另外的方面中,该方法还包括在存储dma传输完成标志之后,由目标处理器继续执行应用程序代码。

另一实施例提供一种用于调试在耦合到主处理器的目标处理器上执行的应用程序代码的方法。该方法包括:由在主处理器上执行的调试器轮询存储器区域的dma传输完成标志;如果存在dma传输完成标志,则由主处理器读取存储在存储器区域中的数据;以及由主处理器执行与数据相关联的i/o函数。在目标处理器将与i/o函数相关联的数据存储在存储器区域中之后,目标处理器将dma传输完成标志存储在存储器区域中。存储器区域在由目标处理器使用来执行应用程序代码的存储器的外部。

上述实施例的一个方面还包括在执行i/o函数之后使dma传输完成标志无效。在以上实施例的另一方面中,与i/o函数相关联的数据包括与所请求的i/o操作类型相对应的信息,以及与所请求的操作类型相关联的自变量。在另一方面中,存储器区域在目标处理器的外部。在又一方面中,与i/o函数相关联的数据还包括由目标处理器响应于由应用程序代码调用i/o函数而存储的数据,其中响应于库api函数而执行将i/o操作参数存储到存储器区域的dma传输。在又一方面,i/o函数包括打印到标准输出、从标准输入进行扫描以及将信息存储在存储器中的一种。

附图说明

通过参考附图可以更好地理解本发明的实施例。

图1是示出现有技术调试系统的一个例子的简化框图,其中主机系统经由耦合到串行连接的调试探针与目标系统通信。

图2是示出现有技术调试系统的另一例子的简化框图,其中主机系统使用半主机应用程序与目标系统通信。

图3是示出根据本发明的实施例的实现半主机调试环境的调试系统的例子的简化框图。

图4是示出根据本发明的实施例在调试操作期间对目标执行的执行流程的例子的简化流程图。

图5是示出根据本发明的实施例在调试操作期间由主机执行的执行流程的例子的简化流程图。

在不同附图中使用相同的参考符号指示相同的项目,除非另有说明。附图不必按比例绘制。

具体实施方式

本发明的实施例提供了一种不需要由正在经历调试的目标嵌入式系统提供特殊硬件的仅软件调试方法。相反,利用目标系统已经存在的dma性能将i/o操作参数传输到目标处理器和在主机系统上执行的调试器均可存取的存储器区域中。以此方式,调试器可以在不停止对目标的程序执行的情况下存取并且执行i/o操作。通过使用半主机库代替标准ci/o库来提供解决方案。半主机库提供一系列与所述标准ci/oapi等价的函数,其对dma传输进行编程,以将所述i/o函数参数复制到目标核心处理器未另外使用的外部存储器区域。然后,在目标继续执行核心应用程序的同时,由主计算机上的调试工具存取外部存储器区域。

在嵌入式系统的调试操作期间所期望的特征是提供装置i/o操作,例如状态消息、终端i/o、磁盘操作等。此类操作可以被提供以响应于在程序执行期间在程序代码中或其它地方到达调试断点。对于断点系统,目标cpu被停止,需要大约10-100ms来提供一个i/o操作。此类过程可以包括以下步骤:目标嵌入式系统的软件中的函数输出含有断点的字符串或字符;当目标系统遇到断点,目标系统被停止;主计算机上执行的调试软件读取目标上的一个或多个cpu寄存器的内容以确定停止原因;调试器读取目标系统存储器的一部分以读取输出指令;然后,目标系统被重新启动。这可以使目标系统处于停止状态,在该状态下其是无响应的,持续大约5-50ms。

作为现有调试系统中的此类延迟的结果,调试可能会中断系统的实时操作,从而导致软件的非现实世界条件。因此,嵌入式系统的实时操作的问题可能无法正确地识别。这导致延迟了解决程序代码的问题,增加了开发时间,并且一些漏洞可能根本不能被正确地修复。

为了克服这些问题中的一些问题,已经实现了需要额外硬件的解决方案,这增加了支持该硬件的额外库。因此,调试应用程序占用更多的物理空间,并且变得更复杂。例如,一种解决方案提供了通过串行端口或以太网连接发送i/o消息。此解决方案的缺点在于,应用程序可能需要串行端口或以太网用于其它目的,或在以太网的情况下,不是所有目标系统都具有此类硬件。另一例子使用专用硬件寄存器来在目标系统和主机系统之间传输数据。此解决方案的问题在于目标系统可能不具有此性能。

图1是示出现有技术调试系统100的一个例子的简化框图,其中主机系统经由耦合到串行连接的调试探针与目标系统通信。主机110可以是任何计算装置或甚至另一嵌入式系统。主机系统包括调试器112,其可以包括通过调试探针120向目标系统130发送数据或从目标系统130接收数据的调试器软件。许多unix系统使用的调试器软件的一个例子是gdb调试器。调试器112可以被加载到主机系统的存储器中并且由主机110的处理器执行。主机110还包括可以由调试器112响应于由目标130提供的i/o操作而存取的一个或多个i/o装置116。

目标130包括存储器132,中央处理单元(cpu)134以及任选的其他硬件135,例如i/o端口、定时器、数据存储装置,传感器等。cpu134可以是包括单核或多核的硬件处理器。目标130还可以包括多个离散的cpu134。存储器132可以包括ram或rom。如图所示,存储器132存储一个或多个可以被配置成实时或非实时执行的程序138,以及一个或多个调试缓冲器136。调试缓冲器136可以包括一个或多个循环或循环缓冲器,例如一个用于输出端,第二个用于输入端。由于调试缓冲器136是圆形或环形缓冲器,所以每个调试缓冲器可以是固定大小或动态大小的。这是支持此种现有技术调试系统所需的额外硬件的例子。

例如,当执行程序138将文本写入终端输出时,所述程序可以调用存储在存储器132中的调试库139的一个或多个调试子程序。调试库可以是与程序138静态链接或动态链接的代码模块、组件等。调试子程序操作以将文本存储在调试缓冲器136中。在将文本复制到缓冲器之后,调试子程序可以更新与调试缓冲器136相关联的写指针。

调试探针120周期性地读取写入指针和已经被写入缓冲器136的存储器,从而接收由程序138写入的文本。然后,调试探针120可以更新读取指针以指示文本已经被读取,使得调试探针能够在下次将数据插入缓冲器136时从适当的地址开始读取。因此,目标系统130写入调试缓冲器136,并且主机系统110通过调试探针120读取调试缓冲器136。如上所讨论,调试探针120可以使用例如串行端口耦合到目标130。

图2是示出现有技术调试系统200的另一例子的简化框图,其中主机系统使用半主机应用程序与目标系统通信。半主机是一种使在目标上执行的代码能够将i/o请求通信到运行调试器的主计算机并且利用位于主计算机上的i/o设施的机制。例如,可以使用半主机来使c库中的函数能够使用主机的屏幕和键盘,而不是在目标系统上具有屏幕和键盘。传统的半主机是通过一组定义的软件中断(swi)操作来实现的。目标应用程序调用适当的swi,然后主机上的调试代理处理swi异常。半主机传统上使用断点型指令来实现。

与图1中所示的例子一样,主机210可以是任何计算装置或甚至另一嵌入式系统。主机系统包括调试器212,其可以是能够向目标130发送数据或从目标130接收数据的调试器软件。调试器212被加载到主机系统的存储器中并且在主机210的处理器中执行。主机210还可以包括可以由调试器212响应于由目标220提供的i/o操作而存取的一个或多个i/o装置216。

目标220可以包括如以上关于图1所讨论的硬件。如图2中所示,应用程序代码225在目标220的cpu上执行。如上所讨论,为了实现半主机,由软件中断库230提供一组定义的软件中断操作。当应用程序代码225调用软件中断库230中的指令中的一个时,该指令的执行由调试器212捕获以确定正在请求什么操作。一旦作出此确定,调试器212随后将从目标220读取数据并且在主机216上执行适当的i/o操作。

传统的半主机机制无法提供高性能的i/o系统。每次半主机操作发生时,目标处理器停止,同时发生数据传输。该操作所花费的时间取决于各种因素,例如目标cpu的性质、主机210与目标220之间的链路、主机硬件以及主机上的操作系统。所有这些因素的结合可以使得应用程序代码225看起来运行更慢。本发明的实施例避免了这些限制。

图3是示出实现根据本发明的实施例的半主机调试环境的调试系统300的例子的简化框图。主机310可以直接并且通过共享的外部存储器区域340与目标320通信。主机310可以是运行各种操作系统的任何计算装置或甚至另一嵌入式系统。主机310包括调试器312,其可以并入被配置成在执行调试器软件时向目标320发送数据或从目标320接收数据的调试器软件。调试器312并入了可以确定何时从目标320接收到i/o指令的监控器线程314,这将在下面更详细地讨论。调试器312被加载到主机系统的存储器中并且在主机310的硬件处理器中执行。主机310还包括可以由调试器312响应于由目标320提供的i/o操作而存取的一个或多个i/o装置316。

目标320可以包括如以上关于图1和图2所讨论的硬件。应用程序代码325在目标320的cpu上执行。为了实现不需要停止应用程序代码325的核心执行的半主机环境,使用仅软件的方法,利用dma引擎335所提供的性能将i/o操作参数传输到调试器312可存取的外部存储器区域340中。外部存储器区域340可以是可由dma引擎335存取的任何种类的存储器硬件,包括例如ddr存储器。外部存储器区域340可以物理地在目标320之内或之外。这里,术语“外部”指的是未被应用程序代码325使用或未被目标核使用的存储器区域,而当目标320继续执行时,该存储器区域可由调试器312存取。

此解决方案是由代替标准ci/o库的新的半主机库提供的。软件dmai/o库330提供一系列来自标准ci/oapi的等价的函数,其最常用于调试目的。与标准文件i/o库相比,该库的大小显著减小,因为该库将仅对dma传输进行编程,并且调试器工具将处理i/o命令参数。代替api函数启动dma传输以将i/o函数参数复制到外部存储器区域340。调试器312存取外部存储器区域,同时目标320继续执行。以此方式,i/o操作参数被传输到外部存储器区域340。

图4是示出根据本发明的实施例在调试操作期间对目标320执行的执行流程的例子的简化流程图。在目标320(410)的cpu上执行被调试的程序(例如,应用程序代码325)。根据本发明的实施例,此程序被链接到软件dmai/o库330,以提供利用dma传输操作的代替i/o函数。在执行应用程序代码325中的一点处,程序启动i/o操作并且调用库api函数中的一个(420)。库调用实现到外部存储器区域340的dma传输(430)。如以上所讨论,外部存储器区域340可由调试器312存取。传输到外部存储器区域的信息可以包括例如与所请求的操作类型相关的信息,以及与操作类型相关联的输入/输出自变量。当dma传输完成时,设定(440)dma传输完成标志。dma传输完成标志由被调用的库api函数设定。在将信息传输到外部存储器区域之后,目标320继续执行应用程序代码325。一旦i/o操作信息被传输到外部存储器区域340,该信息就准备由主机310上的调试器312读取。

图5是示出根据本发明的实施例在调试操作期间由主机310执行的执行流程的例子的简化流程图。如关于图3所论述,调试器312包括调试监视器线程314。调试监视器线程314向外部存储器区域340轮询dma传输完成标志(510)的存在。dma传输完成标志的存在是i/o操作到外部存储器区域340的dma传输已经完成的信号。如果存在dma传输完成标志(515),则调试器312读取由目标320传输到外部存储器区域的数据的内容(520)。调试器312然后可以基于从外部存储器(530)读取的自变量来执行所指示的i/o操作。在i/o操作的参数已经由调试器312处理并且i/o操作被解决之后,调试器随后使完成字无效,作为i/o操作已经完成的目标320的标志。此时,调试监视器线程314可以返回以轮询外部存储器区域以用于下个i/o操作(510)。

本发明的实施例提供了比传统方法更有效和更少侵入的调试i/o解决方案。使用软件dmai/o库编程仅dma传输到外部存储器区域,该库的存储器大小显著小于现有技术方法的存储器大小。另外,本方法允许来自在目标上执行的应用程序的i/o通信,而不会在将i/o信息通信到主计算机并且等待主计算机服务i/o操作的过程期间停止目标执行。因此,这允许在实时执行此类应用程序的同时调试应用。

因为实现本发明的设备大部分由本领域的技术人员已知的电子组件和电路组成,所以为了理解和鉴别本发明的基本概念以及为了不混淆或分散本发明的教导,将不以超出如上所述认为必要的程度解释电路细节。

如本文中所使用的术语“程序”被定义为设计用于在计算机系统上执行的指令序列。程序或计算机程序可以包括子程序、函数、过程、对象方法、对象实现、可执行应用程序、小应用程序、小服务程序、源代码、目标代码、共享库/动态加载库和/或设计用于在计算机系统上执行的其它指令序列。

可以使用各种不同的信息处理系统来实现上述实施例中的一些实施例。例如,尽管图3及其讨论描述了示例性信息处理架构,但是呈现此示例性架构仅仅是为了在讨论本发明的各个方面时提供有用的参考。当然,为了讨论的目的,已经简化了该架构的描述,并且它仅仅是可以根据本发明使用的许多不同类型的适当架构中的一种。本领域的技术人员将认识到,逻辑块之间的边界仅是说明性的,并且替代实施例可以合并逻辑块或电路元件或对各种逻辑块或电路元件施加功能性替代分解。

因此,应理解,本文中所描绘的架构仅是示例性的,并且实际上可以达到实现相同功能性的许多其它架构。在抽象但是仍明确的意义上,实现相同功能性的组件的任何布置被有效地“相关联”,以便达到所期望的功能性。因此,本文中组合以实现特定功能性的任何两个组件可以被视为彼此“相关联”,使得达到所期望的功能性,而不管架构或中间组件如何。同样,如此关联的任何两个组件也可以被视为彼此“可操作地连接”或“可操作地耦合”以实现所期望的功能性。

此外,本领域的技术人员将认识到以上描述的操作的功能性之间的边界仅仅是说明性的。多个操作的功能性可以组合成单个操作,和/或单个操作的功能性可以分布在额外的操作中。此外,替代实施例可以包括特定操作的多个实例,并且在各种其它实施例中可以改变操作的顺序。

本文中所描述的所有或一些软件可以是例如从例如存储器132或其它计算机系统上的其它介质等计算机可读介质收容的系统100、200和300的元件。此类计算机可读介质可以永久地、可移除地或远程地耦合到信息处理系统。计算机可读介质可以包括,例如但不限于以下的任何数量:磁性存储介质,其包括磁盘和磁带存储介质;光存储介质,例如光盘介质(例如,cd-rom、cd-r等)和数字视频磁盘存储介质;非易失性存储器存储介质,其包括基于半导体的存储器单元,例如闪存、eeprom、eprom、rom;铁磁数字存储器;mram;易失性存储介质,其包括寄存器、缓冲器或高速缓存、主存储器、ram等;以及数据传输介质,其包括计算机网络、点对点电信装备等。

在一个实施例中,主机310是例如个人计算机系统的计算机系统。其它实施例可以包括不同类型的计算机系统。计算机系统是可以被设计成向一个或多个用户提供独立计算能力的信息处理系统。典型的计算机系统包括至少一个处理单元、相关联的存储器和多个输入/输出(i/o)装置。

计算机系统根据程序处理信息,并且经由i/o装置产生结果输出信息。程序是例如特定应用程序和/或操作系统的指令列表。计算机程序通常内部地存储在计算机可读存储介质中,或经由计算机可读传输介质传输到计算机系统。计算机进程通常包括执行(运行)程序或程序的一部分、当前程序值和状态信息,以及操作系统用来管理进程执行的资源。父进程可以产生其他子进程以帮助执行父进程的整体功能性。因为父进程特别地产生子进程以执行父进程的整体功能性的一部分,所以由子进程(以及孙子进程等)执行的函数有时可以被描述为由父进程执行。

尽管在本文中参考特定实施例描述了本发明,但是在不脱离如所附权利要求中阐述的本发明的范围的情况下,可以进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的,并且所有此类修改旨在被包括在本发明的范围内。本文中关于特定实施例描述的任何益处、优点或问题的解决方案不旨在被解释为任何或所有权利要求的关键的、必需的或基本的特征或元素。

本文中所使用的术语“耦接”并不旨在限于直接耦接或机械耦接。

此外,本文中所使用的术语“一(a)”或“一个(an)”被定义为一个或多个。此外,在权利要求中使用例如“至少一个”和“一个或多个”的介绍性短语不应被解释为暗示通过不定冠词“一(a)”或“一个(an)”引入另一权利要求元素,将含有此类引入的权利要求元素的任何特定权利要求限制为仅包含一个此类元素的发明,甚至在相同的权利要求中包括介绍性短语“一个或多个”或“至少一个”以及不定冠词例如“一(a)”或“一个(an)”。使用定冠词也是如此。

除非另有说明,否则例如“第一”和“第二”等术语用于任意区分此类术语所描述的元素。因此,这些术语不一定旨在指示此类元素的时间或其它优先级。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1