CN113138918B - 应用于具有多系统的终端的调试方法、终端和存储介质 - Google Patents

应用于具有多系统的终端的调试方法、终端和存储介质 Download PDF

Info

Publication number
CN113138918B
CN113138918B CN202110412220.5A CN202110412220A CN113138918B CN 113138918 B CN113138918 B CN 113138918B CN 202110412220 A CN202110412220 A CN 202110412220A CN 113138918 B CN113138918 B CN 113138918B
Authority
CN
China
Prior art keywords
gdb
debugging
chip
client
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110412220.5A
Other languages
English (en)
Other versions
CN113138918A (zh
Inventor
马迎斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202110412220.5A priority Critical patent/CN113138918B/zh
Publication of CN113138918A publication Critical patent/CN113138918A/zh
Application granted granted Critical
Publication of CN113138918B publication Critical patent/CN113138918B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • G06F11/364Software debugging by tracing the execution of the program tracing values on a bus

Abstract

本申请提供了一种应用于具有多系统的终端的调试方法、终端和存储介质,该终端包括通过总线连接的第一片上系统和第二片上系统,第一片上系统上运行第一操作系统,第二片上系统上运行第二操作系统,第一操作系统上运行GDB客户端,第二操作系统上运行GDB服务端;该方法包括:GDB客户端接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;GDB服务端执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;GDB客户端显示所述调试结果。能够实现在不依赖硬件仿真器,在不改变被调试终端的整机硬件的情况下,一个片上系统对第二片上系统上的操作系统的调试。

Description

应用于具有多系统的终端的调试方法、终端和存储介质
技术领域
本发明涉及芯片调试技术领域,并且更具体地,涉及一种应用于具有多系统的终端的调试方法、终端和存储介质。
背景技术
在一些场景中,嵌入式终端可以支持双系统,例如,手机终端上应用处理器(Application Processor,AP)片上系统(System On Chip,SOC)运行安卓(android)系统,图像信号处理器(Image Signal Processor,ISP)SOC运行实时操作系统(Real TimeOperating System,RTOS)。在相关技术中,通常采用硬件仿真器调试终端的RTOS,采用此方式,需要被调试的设备预留连接硬件仿真器的接口,并且硬件仿真器一般用于调试基于Linux内核或者RTOS操作系统的开发板,无法直接与android系统对接,在手机终端的整机场景下,预留接口通常只有typc-c usb接口,此情况下,如何对手机终端上的RTOS进行调试是一项急需解决的问题。
发明内容
本申请提供了一种应用于具有多系统的终端的调试方法、终端和存储介质,被调试终端的不同的SOC通过总线连接,并且在不同的SOC上运行不同的OS,在一个OS上运行GDB客户端,其他OS上运行GDB服务端,从而能够实现通过一个SOC上的OS对另一SOC上的OS进行调试的目的。
第一方面,提供了一种应用于具有多系统的终端的调试方法,所述终端包括第一片上系统和第二片上系统,所述第一片上系统和所述第二片上系统通过总线连接,所述多系统包括第一操作系统和第二操作系统,所述第一操作系统运行于所述第一片上系统,所述第二操作系统运行于所述第二片上系统,所述第一操作系统上运行GDB客户端,所述第二操作系统上运行GDB服务端;所述方法包括:
所述GDB客户端接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;
所述GDB服务端执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;
所述GDB客户端显示所述调试结果。
在一些实现方式中,所述调试命令包括以下中至少一种:
断点的设置命令,断点的删除命令,观察点的设置命令,观察点的删除命令,寄存器的读取命令,寄存器的设置命令,内存单元的读取命令,内存单元的设置命令,堆栈的跟踪命令。
在一些实现方式中,所述GDB服务端通过配置调试异常和监视器控制DEMCR寄存器使所述调试监视器模式使能以使所述ARM cortex-M处理器陷入调试监视器模式异常。
在一些实现方式中,所述方法还包括:
所述GDB服务端确定所述调试命令是否为所述GDB服务端支持的调试命令;
在所述调试命令为所述GDB服务端支持的调试命令的情况下,控制所述ARMcortex-M处理器陷入调试监视器模式异常以执行所述调试命令。
在一些实现方式中,在执行所述调试命令之前,所述方法还包括:
在所述ARM cortex-M处理器陷入调试监视器异常的情况下,所述GDB服务端确定是否和所述GDB客户端第一次建立连接;
在所述GDB服务端和所述GDB客户端不是第一次建立连接的情况下,所述GDB服务端向所述GDB客户端回复所述调试命令的接收确认信息;或者
在所述GDB服务端和所述GDB客户端是第一次建立连接的情况下,所述GDB服务端对所述GDB服务端的用于调试的变量进行初始化,并将已设置的断点去使能。
在一些实现方式中,所述GDB客户端接收调试终端发送的调试命令,包括:
所述GDB客户端接收所述调试终端通过安卓调试桥ADB发送的所述调试命令。
在一些实现方式中,所述GDB客户端通过ADB显示解封装的所述调试结果。
在一些实现方式中,所述第一操作系统为安卓系统,所述第二操作系统为实时操作系统RTOS。
在一些实现方式中,所述第一片上系统为所述终端的应用处理芯片AP,所述第二片上系统为多媒体芯片。
第二方面,提供了一种终端,用于执行上述第一方面或其各实现方式中的方法。具体地,该终端包括第一片上系统,所述第一片上系统上运行第一操作系统,所述第一操作系统上运行GDB客户端;
第二片上系统,所述第二片上系统上运行第二操作系统,所述第二操作系统上运行GDB服务端;
所述第一片上系统和所述第二片上系统通过总线连接;
其中,所述GDB客户端用于接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;
所述GDB服务端用于执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;
所述GDB客户端还用于显示所述调试结果。
在一些实现方式中,所述GDB客户端还用于:
根据远端串行协议RSP对所述调试命令进行封装,得到第一RSP数据包;
通过总线向所述GDB服务端发送所述第一RSP数据包。
在一些实现方式中,所述GDB服务端还用于:
根据RSP对所述第一RSP数据包进行解封装,得到所述调试命令。
在一些实现方式中,所述GDB服务端还用于:
根据RSP对所述调试结果进行封装,得到第二RSP数据包;
通过总线向所述GDB客户端发送所述第二RSP数据包。
在一些实现方式中,所述GDB客户端还用于:
根据RSP对所述第二RSP数据包进行解封装,得到所述调试结果。
在一些实现方式中,所述GDB服务端通过配置调试异常和监视器控制DEMCR寄存器使所述调试监视器模式使能以使所述ARM cortex-M处理器陷入调试监视器模式异常。
在一些实现方式中,所述GDB服务端还用于:
确定所述调试命令是否为所述GDB服务端支持的调试命令;
在所述调试命令为所述GDB服务端支持的调试命令的情况下,控制所述ARMcortex-M处理器陷入调试监视器模式异常以执行所述调试命令。
在一些实现方式中,所述GDB服务端还用于:
在所述ARM cortex-M处理器陷入调试监视器异常的情况下,确定是否和所述GDB客户端第一次建立连接;
在所述GDB服务端和所述GDB客户端不是第一次建立连接的情况下,向所述GDB客户端回复所述调试命令的接收确认信息;或者
在所述GDB服务端和所述GDB客户端是第一次建立连接的情况下,对所述GDB服务端的用于调试的变量进行初始化,并将已设置的断点去使能。
在一些实现方式中,所述断点寄存器包括断点控制寄存器和N个断点比较寄存器中的至少一种,所述N为所述ARM cortex-M处理器支持的断点个数,N为正整数;
其中,所述断点控制寄存器用于存储所述ARM cortex-M处理器支持的断点个数和所述FPB单元的使能状态;
所述N个断点比较寄存器和所述ARM cortex-M处理器支持的N个断点一一对应,每个断点比较寄存器用于存储对应的断点的地址和使能状态。
在一些实现方式中,所述观察点寄存器包括观察点控制寄存器,M个观察点功能寄存器,M个观察点比较寄存器和M个观察点范围寄存器中的至少一种,所述M为所述ARMcortex-M处理器支持的观察点个数,M为正整数;
其中,所述观察点控制寄存器用于存储所述ARM cortex-M处理器支持的观察点个数;
所述M个观察点功能寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点功能寄存器用于存储对应的观察点的类型;
所述M个观察点比较寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点比较寄存器用于存储对应的观察点的地址;
所述M个观察点范围寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点范围寄存器用于设置对应的观察点涉及的范围。
在一些实现方式中,所述GDB客户端还用于:接收所述调试终端通过安卓调试桥ADB发送的所述调试命令。
在一些实现方式中,所述GDB客户端通过ADB显示解封装的所述调试结果。
在一些实现方式中,所述第一操作系统为安卓系统,所述第二操作系统为实时操作系统RTOS。
在一些实现方式中,所述第一片上系统为所述终端应用处理芯片AP,所述第二片上系统为多媒体芯片。
第三方面,提供了一种终端,包括处理器和存储器。该存储器用于存储计算机程序,该处理器用于调用并运行该存储器中存储的计算机程序,执行上述第一方面或其各实现方式中的方法。
第四方面,提供了一种计算机可读存储介质,用于存储计算机程序,该计算机程序使得计算机执行上述第一方面或其各实现方式中的方法。
第五方面,提供了一种计算机程序产品,包括计算机程序指令,所述计算机程序指令使得计算机执行上述第一方面或其各实现方式中的方法。
第六方面,提供了一种计算机程序,当其在计算机上运行时,使得计算机执行上述第一方面或其各实现方式中的方法。
通过上述技术方案,通过在被调试终端的不同的SOC上运行不同的OS,例如,在第一SOC上运行第一操作系统,在第二SOC上运行第二操作系统,进一步在第一操作系统中实现GDB client,在第二操作系统中实现GDB server,调试终端向被调试终端的GDB client发送调试命令,GDB client通过总线与GDB server交互调试命令,GDB server完成执行调试命令后,通过总线将调试结果返回至GDB client,从而能够实现在不依赖硬件仿真器,在不改变被调试终端的整机硬件的情况下,对第二SOC上的第二操作系统的调试。
并且,本申请实施例的被调试终端中的不同SOC上运行不同的OS,在被调试OS上实现GDB服务端,在其他OS上实现GDB客户端,从而能够实现通过一个SOC上的OS对另一个SOC上的OS进行调试的目的,相对于通过日志打印的调试方式能够更好的保留调试现场,同时还能提升调试效率。
附图说明
图1是基于硬件仿真器的调试方式的设备之间的连接示意图。
图2是本申请实施例提供的调试方法的一种应用场景的示意图。
图3是根据本申请实施例提供的一种应用于具有多系统的终端的调试方法的示意性交互图。
图4是根据本申请实施例提供的另一种应用于具有多系统的终端的调试方法的示意性交互图。
图5是GDB服务端对接收到的调试命令的处理过程的示意图。
图6是根据本申请实施例提供的一种终端的示意性框图。
图7是根据本申请另一实施例提供的一种终端的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。针对本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在一些场景中,嵌入式终端多采用ARM架构,采用ARM架构的终端一般采用硬件仿真器来调试开发板上的RTOS,此类硬件仿真器或称ARM仿真器,具体可以为用于调试基于ARM内核的硬件模块,市面上ARM仿真器有很多种,例如,jtag、jlink、stlink、trace32等。
图1是以stlink硬件仿真器调试stm32开发板上的RTOS为例的连接示意图。如图1所示,GDB客户端(client)可以运行在本地或者远程计算机上的windows或linux操作系统上,通过传输控制协议(Transmission Control Protocol,TCP)与本地计算机上stlinkGDB服务端(server)连接。stlink GDB server作为一个命令行应用通过jtag探针(probe)与stm32开发板连接。在GDB client与stlink GDB server建立连接后,GDB server可以处理client发送过来的远端串行协议(Remote Serial Protocol,RSP)协议包,stlink硬件仿真器根据该RSP协议包操作stm32开发板的运行状态,处理完毕后,向GDB client返回响应结果。其中,stlink GDB server和stlink jtag probe和Jtag线缆(cable)都需要与stlink硬件仿真器配套使用。
由此,可以看出通过硬件仿真器调试开发板存在以下几个缺点:
(1)对硬件仿真器过度依赖,具体地,要求被调试设备必须预留支持硬件仿真器的接口。但在手机的整机场景下,往往只存在type-c usb接口,无法接入硬件仿真器。
(2)硬件仿真器的调试环境要求局限,具体地,需要在本地计算机上运行GDBclient和硬件仿真器配套的GDB server,然后通过硬件仿真器的cable接入被调试设备。
(3)硬件仿真器一般用于调试基于Linux内核或者RTOS操作系统的设备,无法直接与Android系统对接。
有鉴于此,本申请实施例提供了一种应用于具有多系统的终端的调试方法,可以在不改变被调试设备的整机硬件的情况下,实现多系统间的调试功能。
图2是本申请实施例的调试方法的一种应用场景的示意图。
图2中,终端22为被调试终端,或称,被调试设备,终端21为调试终端,或称调试设备,其中,终端22具有多个片上系统(Systme On Chip,SOC),例如图2所示的第一片上系统221和第二片上系统222,其中,所述第一片上系统221上运行第一操作系统,所述第二片上系统222上运行第二操作系统。
所述第一片上系统221和所述第二片上系统222通过总线223连接。所述总线223例如可以为串行外设接口(Serial Peripheral Interface,SPI)总线,安全数据输入输出(Secure Digital Input and Output,SDIO)总线等。
在一些实施例中,所述第一片上系统221可以为终端22的应用处理芯片(Application Processor,AP),第二片上系统可以为其他处理芯片,例如多媒体芯片,更具体地可以为ISP芯片。
在一些实施例中,所述第一操作系统为安卓系统,所述第二操作系统为RTOS,或者也可以为其他OS。
在本申请实施例中,设备的调试通过GDB客户端和GDB服务端配合完成,其中,GDB客户端运行在所述第一操作系统上,GDB服务端运行在所述第二操作系统上。
在本申请实施例中,调试终端21和被调试终端22可以通过有线或无线方式连接,例如通过通用串行总线(Universal Serial Bus,USB)连接,或者通过无线保真(WirelessFidelity Access,WiFi)连接。
在一些实施例中,调试终端21可以通过安卓调试桥(andriod debug bridge,ADB)向GDB客户端发送调试命令。
应理解,在本申请实施例中,在调试终端21对该调试终端21进行调试之前,调试终端21和被调试终端22已通过adb建立连接。
应理解,在本申请实施例中的终端可以是手机、手机、平板电脑、笔记本电脑或者个人计算机(Personal Computer,PC)等。
图3是根据本申请实施例的应用于具有多系统的终端的调试方法300的示意性图。
其中,所述终端为被调试终端,所述终端包括第一片上系统和第二片上系统,所述第一片上系统和所述第二片上系统通过总线连接,所述多系统包括第一操作系统和第二操作系统,所述第一操作系统运行于所述第一片上系统,所述第二操作系统运行于所述第二片上系统,所述第一操作系统上运行GDB客户端,所述第二操作系统上运行GDB服务端。
在一些实施例中,所述第一片上系统可以为所述终端的AP,所述第二片上系统可以为多媒体芯片,例如ISP。
在一些实施例中,所述第一操作系统为安卓系统,所述第二操作系统为实时操作系统RTOS。
应理解,以上所示例的终端包括的片上系统的个数以及操作系统的个数仅为示例,在其他实施例中,被调试终端还可以支持更多个片上系统,或者,更多个操作系统。例如,第三片上系统,第三片上系统上运行第三操作系统,该第三片上系统和第一片上系统通过总线连接,调试终端可以通过第一片上系统上的OS实现对第三片上系统上的OS的调试,具体实现方式类似,这里不再赘述。
在本申请实施例中,被调试终端和调试终端通过有线或无线方式连接,例如通过USB连接,或者通过WIFI连接。
作为示例,调试终端为PC,被调试终端为手机,PC和手机通过USB接口连接,或者通过WIFI连接。
如图3所示,根据本申请实施例的调试方法100包括如下至少部分内容:
S101,GDB客户端接收调试终端的调试命令。
在一些实施例中,调试终端上安装有ADB客户端,调试终端可以通过ADB客户端向被调试终端的第一片上系统上运行的GDB客户端发送调试命令。
例如,调试人员可以通过在adb客户端的命令行输入调试命令,将该调试命令发送给GDB客户端。
S102,GDB客户端向GDB服务端发送所述调试命令。
如前所述,第一片上系统和第二片上系统通过总线连接,该总线例如可以为SPI总线,SDIO总线等。因此,第一片上系统上的GDB客户端可以通过总线向第二片上系统上的GDB服务端发送该调试命令。
在本申请一些实施例中,GDB客户端和GDB服务端可以按照预定协议进行数据通信,例如数据的发送端可以将待发送数据封装成预定协议的格式,数据的接收端在接收到数据后可以按照该预定协议的格式对数据进行解封装和校验,以确定数据的发送是否成功。
在一些实施例中,该预定协议可以为远端串行协议(Remote Serial Protocol,RSP),或者也可以为其他协议,以下,以GDB客户端和GDB服务端按照RSP进行数据通信为例进行说明,但本申请并不限于此。
RSP协议是一种简单的,通过串口线、网络等至少支持半双工通信的媒介进行ASCII消息传输的协议。RSP数据包以$符号作为数据包的开始,后跟实际数据,并以#作为数据包的结束,后面跟着校验和。即一个完整的RSP数据包格式如下:$packet-data#checksum,其中,packet-data表示实际数据,checksum表示校验和。在一些场景中,校验和的位数为两位,此情况下,校验和需要对256取模。
在一些实施例中,当接收端接收到一个RSP数据包后,可以对该RSP数据包进行解封装,根据该RSP数据包中的实际数据和校验和检查这个RSP数据包的合法性。在一些实施例中,如果接收端经检查确定该RSP数据包是一个正常的数据包,可以向该RSP数据包的发送端返回一个'+',如果是确定该RSP数据包是一个损坏的数据包,则可以向该RSP数据包的发送端返回一个′-′。
应理解,RSP数据包中的数据可以用','、';'或':'分隔成不同的段,具体采用哪个符号根据不同的调试命令不同而不同。
在本申请一些实施例中,S102可以包括:
GDB客户端根据RSP对该调试命令进行封装,得到第一RSP数据包;
GDB客户端向GDB服务端发送第一RSP数据包。
在一些实施例中,GDB客户端将第一RSP数据包发送给GDB服务端可以包括GDB客户端通过总线将第一RSP数据包发送给GDB服务器。
在本申请一些实施例中,所述调试命令包括以下中至少一种:
断点的设置命令,观察点的设置命令,寄存器的读取命令,寄存器的设置命令,内存单元的读取命令,内存单元的设置命令,堆栈的跟踪命令。
在一些实施例中,寄存器的读取命令可以表示为p n,表示读取寄存器n的取值,其中,n为16进制。
在一些实施例中,通用寄存器的读取命令可以表示为g。
在一些实施例中,寄存器的设置命令(或称,写入命令)可以表示为P n=r,表示向寄存器n写入数据r,其中,n为16进制,对于寄存器的每个字节,r可以包括两个十六进制数字。
在一些实施例中,通用寄存器的设置命令可以表示为G。
在一些实施例中,内存单元的读取命令可以表示为m addr,length,表示读取起始地址为addr,长度为length的内存单元。
在一些实施例中,内存单元的设置命令(或称,写入命令)可以表示为m addr,length:XX…,表示向起始地址为addr,长度为length的内存单元写入数据XX…。
在一些实施例中,堆栈的跟踪命令可以设置在断点处,用于显示函数调用栈,帮助调试人员分析函数的调用情况。
例如,断点设置在函数A调用函数B处,则程序运行到该断点时,GDB服务端可以将函数A的返回地址和PC指针等信息存放到GDB服务端维护的全局变量函数调用数组中。等到GDB服务端收到GDB客户端端发送的堆栈的跟踪命令时,将函数调用数组中的信息返回给GDB客户端,GDB客户端再通过adb向调试人员显示函数调用信息。
在一些实施例中,断点或观察点的设置命令可以表示为Z type,addr,kind,表示从地址addr起插入type类型的断点或观察点。例如,Z0 addr,kind表示在地址addr插入软件断点,Z1 addr,kind表示在地址addr插入硬件断点。
在一些实施例中,断点或观察点的删除命令可以表示为z type,addr,kind,表示从地址addr起删除type类型的断点或观察点。例如,z0 addr,kind表示删除在地址addr设置的软件断点,z1 addr,kind表示删除在地址addr设置的硬件断点。
断点和观察点对应的寄存器的具体设置方式在下文实施例中描述。
应理解,以上所示例的调试命令仅为示例,在具体实现中,可以根据调试人员的实际需求,实现更多的调试命令,本申请对此不作限定。
S103,GDB服务端接收调试命令,并执行该调试命令,得到调试结果。
在一些实施例中,该调试命令是根据RSP封装的,例如,GDB服务端接收到GDB客户端的所述第一RSP数据包,所述第一RSP数据包包括所述调试命令,则GDB服务端可以根据RSP对该第一RSP数据包进行解封装,获取其中的调试命令。
例如,GDB服务端首先根据第一RSP数据包中的$和#之间的数据和#之后的校验和检查该第一RSP数据包的合法性,在该第一RSP数据包为合法的数据包的情况下,确定$和#之间的数据为待处理的调试命令。
可选地,执行该调试命令可以包括执行寄存器的读取或写入,执行内存单元的读取或写入,执行断点的设置或删除,执行观察点的设置或删除等。
作为示例,若调试命令为寄存器的读取命令,调试结果例如可以为读取的寄存器的取值。
作为又一示例,若调试命令为寄存器的设置命令,该调试结果可以为设置成功或设置失败等。
作为再一示例,该调试命令为堆栈的跟踪命令,该调试结果例如可以为函数调用信息等信息。
S104,GDB服务端向GDB客户端发送调试结果。
在一些实施例中,所述GDB客户端可以通过总线向所述GDB客户端发送调试结果。
在本申请一些实施例中,S104可以包括:
GDB服务端根据RSP对调试结果进行封装,得到第二RSP数据包;
GDB服务端向GDB客户端发送第二数据包。
其中,GDB服务端根据RSP封装调试结果得到第二RSP数据包的具体实现方式参考GDB客户端封装调试命令得到第一RSP数据包的实现方式,为了简洁,这里不再赘述。
S105,GDB客户端接收该调试结果,并显示该调试结果。
在一些实施例中,该调试结果是根据RSP封装的,例如,GDB客户端接收到GDB服务端的所述第二RSP数据包,所述第二RSP数据包包括所述调试结果,则GDB客户端可以根据RSP对该第二RSP数据包进行解封装,获取其中的调试结果。
其中,GDB客户端根据RSP解封装第二RSP数据包得到调试结果的具体实现方式参考GDB服务端解封装第一RSP数据包得到调试命令的实现方式,为了简洁,这里不再赘述。
在本申请一些实施例中,被调试终端和调试终端通过adb建立连接,则GDB客户端可以通过调用adb shell命令将该调试结果显示给调试人员。
作为示例,第一操作系统为Android系统,Android系统支持dumpsys机制,GDB客户端通过adb shell dumpsys命令显示调试结果。
结合图4,以GDB服务端和GDB客户端基于RSP进行通信为例,说明根据本申请实施例的调试方法的整体流程。
如图4所示,该调试方法可以包括如下步骤:
S301,GDB客户端接收调试终端的调试命令。
该步骤S301对应于图3中的S101,具体实现参考S101的相关描述,为了简洁,这里不再赘述。
S302,GDB客户端将接收到的调试命令进行封装。
例如,GDB客户端根据RSP对该调试命令进行封装,得到第一RSP数据包。
S303,GDB客户端将第一RSP数据包发送给GDB服务端。
在一些实施例中,所述GDB客户端可以通过总线将第一RSP数据包发送给GDB服务端。
S304,GDB服务端对该第一RSP数据包进行解封装,得到调试命令,并执行该调试命令,得到调试结果。
具体地,GDB服务端根据RSP对第一RSP数据包进行解封装,获取其中的调试命令。
S305,GDB服务端对该调试结果进行封装。
例如,GDB服务端根据RSP对调试结果进行封装,得到第二RSP数据包。具体的封装方式和GDB客户端封装调试命令的实现方式类似,这里不再赘述。
S306,GDB服务端将第二RSP数据包发送给GDB客户端。
例如,GDB服务端通过总线将该第二RSP数据包发送给GDB客户端。
S307,GDB客户端对第二RSP数据包进行解封装。
例如,GDB客户端根据RSP对第二RSP数据包进行解封装,获取其中的调试结果。具体的解封装方式参见GDB服务端解封装第一RSP数据包的相关实现,为了简洁,这里不再赘述。
S308,GDB客户端显示该调试结果。
在本申请一些实施例中,被调试终端和调试终端通过ADB建立连接,则GDB客户端可以通过调用ADBshell命令将该调试结果显示给调试人员。
作为示例,第一操作系统为Android系统,Android系统支持dumpsys机制,GDB客户端通过ADB shell dumpsys命令显示调试结果。
综上,在本申请实施例中,通过在第一操作系统中实现GDB客户端,在第二操作系统中实现GDB服务端,调试终端通过ADB向GDB客户端发送调试命令,GDB客户端通过总线向GDB服务端发送调试命令,GDB服务端执行调试命令后,通过总线将调试结果返回至GDB客户端,从而能够实现在不依赖硬件仿真器,并且不改变终端的整机硬件的情况下,对第二片上系统上的第二操作系统的调试。
并且,被调试终端的不同SOC上运行不同的OS,在被调试OS上实现GDB服务端,在其他OS上实现GDB客户端,从而能够实现通过一个SOC上的OS对另一个SOC上的OS进行调试的目的,相对于通过日志打印的调试方式能够更好的保留调试现场,同时还能提升调试效率。
以下,具体说明GDB客户端和GDB服务端的具体实现方案。
在本申请实施例中,GDB客户端需要实现如下主要功能:
1、对调试终端发送的调试命令进行封装;
2、将封装的调试命令发送给GDB服务端;
3、将GDB服务端回复的封装的调试结果进行解封装;
4、显示调试结果。
对于上述功能1和3,该GDB客户端可以根据RSP协议标准的要求进行数据的封装和解封装。
对于上述功能2,可以通过第一片上系统和第二片上系统之间的总线协议实现二者之间的通信。
对于上述功能4,GDB客户端通过安卓系统的dumpsys机制显示调试结果。
在本申请一些实施例中,GDB服务端可以基于ARM cortex-M架构的处理器实现。其中,该ARM cortex-M架构的处理器支持调试监视器(debug monitor)模式,该GDB服务端可以通过将处理器陷入debug monitor异常来暂停应用程序的执行来达到调试的目的。应理解,debug monitor异常是在debug monitor模式使能并且发生调试事件时,系统自动触发的异常。
在一些实施例中,发生调试事件可以包括接收到GDB客户端发送的封装的调试命令。
因此,GDB服务端需要实现的主要功能如下:
1、陷入debug monitor异常;
2、对封装的调试命令进行解封装,并执行调试命令,得到调试结果;
3、对调试结果进行封装,并将封装的调试结果发送给GDB客户端。
在一些实施例中,debug monitor模式使能可以通过配置调试异常和监控器控制寄存器(Debug Exception and Monitor Control Register,DEMCR)实现。
例如,该DEMCR的比特16(B16)用于使能debug monitor模式使能,在需要使能debug monitor模式时,可以将该DEMCR的B16设置为1。
在一些实施例中,所述GDB服务端可以在接收到封装的调试命令的情况下,配置DEMCR以使debug monitor模式使能。
作为示例,该DEMCR寄存器的地址可以为0xE000EDFC。例如可以通过如下程序实现debug monitor模式的使能:
结合图5说明,GDB服务端对接收到的调试命令的处理过程。
如图5所示,包括如下至少部分步骤:
S401,GDB服务端接收到封装有调试命令的第一RSP数据包之后,首先对该第一RSP数据包进行解封装处理,得到调试命令。
S402,判断调试命令是否为支持的调试命令。
例如,若该调试命令不是支持的调试命令,则执行S409,退出,否则,执行S43。
S403,陷入debug monitor异常,以执行该调试命令获得调试结果。
例如,可以通过配置DEMCR寄存器以使debug monitor模式使能,从而陷入debugmonitor异常。
在本申请一些实施例中,在执行调试命令之前,首先需要保证GDB服务端的变量已经被初始化,并且断点被去使能,以保证该新的调试命令的正常执行。具体可以包括如下步骤:
S404,判断GDB服务端和GDB客户端之间是否第一次建立连接。
如果GDB服务端和GDB客户端之间不是第一次建立连接,此情况下,则执行S405,则GDB服务端向GDB客户端发送回复信息,例如回复接收到调试命令的确认信息。
如果GDB服务端和GDB客户端之间是第一次建立连接,则执行S406,对GDB服务端的变量进行初始化,并且对GDB服务端之前所设置的断点进行去使能。
进一步地,执行S407,对该调试命令进行处理,即执行该调试命令获取调试结果。
S408,确定是否需要退出调试。
例如,若GDB服务端又接收到GDB客户端的其他调试命令,则不退出,或者,若接收到GDB客户端发送的其他命令,例如,kill命令,detach命令,执行(continue,简称c)命令或单步执行(step,简称s)命令等,则退出调试。
可选地,在退出调试的情况下,该GDB服务端跳出陷入debug monitor异常,例如,通过配置DEMCR寄存器以使debug monitor模式去使能,从而跳出debug monitor异常。
断点和观察点均是程序调试中的重要的调试手段,二者的区别在于暂停的逻辑不同。断点是程序运行到一定位置(例如函数的某一行,或者某个函数)时暂停程序的运行,此时,调试人员可以在该位置查看变量的值,堆栈情况,从而找出代码的症结所在。观察点是让程序在某一变量发生改变时停止。例如,在某一循环处,调试人员希望能够观察一个变量的变化情况,这时就通过设置观察点来观察变量的变化情况。
以下具体说明,基于ARM cortex-M处理器,如何实现对断点和观察点的处理。
在本申请一些实施例中,所述ARM cortex-M处理器中配置断点寄存器,其中,所述断点寄存器用于存储断点的信息,例如断点的个数,断点的地址,断点的使能状态等信息。
在一些实施例中,所述断点寄存器包括断点控制寄存器和N个断点比较寄存器中的至少一种,其中,所述N为ARM cortex-M架构支持的断点个数。所述断点控制寄存器用于存储所述ARM cortex-M架构支持的断点个数和所述FPB单元的使能状态。所述N个断点比较寄存器和所述ARM cortex-M架构支持的N个断点一一对应,每个断点比较寄存器用于存储对应的断点的地址和使能状态,所述N为正整数。
在一些实施例中,断点寄存器通过ARM cortex-M处理器中的闪存补丁和断点(Flash Patch and Breakpoint)FPB单元实现。
例如,通过FPB单元中的闪存补丁控制寄存器(Flash Patch Control Register,记为FP_CTRL寄存器)实现上述断点控制寄存器的功能,通过配置闪存补丁比较器寄存器(Flash Patch Comparator Register,记为FP_COMPn寄存器)用于实现上述断点比较寄存器的功能,其中,n=0,1,2,…,N-1。
即GDB服务端可以利用FPB单元实现断点的相关功能。
在一些实施例中,FP_CTRL的地址为0xE0002000,用于存储ARM cortex-M架构所支持的断点个数和FPB单元的使能状态。
在一些实施例中,FP_COMPn寄存器的地址为0xE0002008-0xE0002008+4n,用于存储断点地址和使能状态。
例如,FP_COMP[31:30]对应断点地址instr_addr[1:0],FP_COMP[28:2]对应断点地址instr_addr[28:2],最低位FP_COMP[0]用于控制该断点是否使能。
作为示例,断点的设置功能可以通过如下代码实现:
/>
在本申请一些实施例中,所述ARM cortex-M处理器中配置观察点寄存器,用于存储观察点的信息,例如,观察点的个数,观察点的使能状态,观察点的类型等。
在一些实施例中,所述观察点寄存器包括观察点控制寄存器,M个观察点功能寄存器,M个观察点比较寄存器和M个观察点范围寄存器中的至少一种,所述M为ARM cortex-M架构支持的观察点个数,M为正整数。
其中,所述观察点控制寄存器用于存储所述ARM cortex-M处理器支持的观察点个数;
所述M个观察点功能寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点功能寄存器用于存储对应的观察点的类型;
所述M个观察点比较寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点比较寄存器用于存储对应的观察点的地址;
所述M个观察点范围寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点范围寄存器用于设置对应的观察点涉及的范围。
在一些实施例中,所述观察点寄存器可以通过ARM cortex-M处理器中的数据观察点和跟踪(Data Watchpoint&Trace,DWT)单元实现。
例如,通过配置DWT单元中的DWT控制寄存器(DWT Control Register,记为DWT_CTRL寄存器)实现上述观察点控制寄存器的功能,通过配置DWT功能寄存器(DWT FunctionRegister,DWT_FUNCTIONn寄存器)实现上述观察功能寄存器的功能,通过配置DWT比较寄存器(DWT Comparator Register,记为DWT_FUNCTIONn寄存器)实现上述观察比较寄存器的功能,通过配置DWT范围寄存器(DWT Mask Register,记为DWT_MASKn寄存器)实现观察范围寄存器的功能,其中,n=0,1,2,…,M-1。即GDB服务端可以利用DWT单元实现观察点的相关功能。
在一些实施例中,该DWT_CTRL寄存器的地址可以为0xE0001000,用于存储ARMcortex-M处理器支持的观察点个数。
在一些实施例中,该DWT_FUNCTIONn寄存器的地址可以为0xE0001028+16n,用于存储观察点的类型。
例如,该DWT_FUNCTIONn寄存器的低4bit用于控制观察点的类型,当寄存器的取值为0时,表明当前的观察点无效,为其他取值时,表示观察点的类型。例如,取值为0100,标识取指令(instruction fetch),取值为0101,表示读/加载数据访问(Read/Load DataAccess),取值为0110,表示写/存储数据访问(Write/Store Data Access),取值为0111,表示读或写数据访问(Reador Write Data Access)。
在一些实施例中,该DWT_COMPn寄存器的地址可以为0xE0001020+16n,用于存储观察点的地址。
在一些实施例中,该DWT_MASKn寄存器的地址可以为0xE0001024+16n,用于存储观察点涉及的范围。该观察点涉及的范围是以DWT_COMPn寄存器的取值作为起始地址。
举例说明,若读取DWT_CTRL寄存器确定ARM cortex-M处理器支持的观察点个数M为10,根据DWT_FUNCTIONn寄存器的取值确定有效的观察点为该10个观察点中的观察点1,即n=1,则读取DWT_COMP1寄存器的取值,确定观察点1的地址。进一步根据DWT_MASK1寄存器确定观察点涉及的范围,若DWT_MASK1寄存器的取值为2,则观察点涉及的范围为观察点1的地址ˉ观察点1的地址+22
作为示例,观察点的设置功能可以通过如下代码实现:
/>
应理解,当第二片上系统采用ARM Cortex-M架构的处理器实现时,该第二操作系统可以为RTOS,或者也可以为ARM Cortex-M架构支持的其他OS,本申请对此不作限定。
综上,GDB服务端可以利用ARM Cortex-M架构的调试功能实现对第二操作系统的调试,具体地,GDB服务端可以通过利用FPB单元、DWT单元中的寄存器达到设置断点或观察点的目的,而不是采用替换机器码指令的方式来实现断点和观察点的功能,若采用替换机器码的方案实现断点和观察点功能,GDB服务端一旦出现异常,则RTOS系统便会处于不安全状态,并且利用ARM Cortex-M架构的调试功能,既能够保证GDB调试功能的可用性,又能保证GDB服务端及时处理响应。并且利用ARM Cortex-M架构的调试功能,能够实现在使用相同架构的处理器的其他OS上的方案的可移植性。
上文结合图2和图5,详细描述了本申请的方法实施例,下文结合图6至图7,详细描述本申请的装置实施例,应理解,装置实施例与方法实施例相互对应,类似的描述可以参照方法实施例。
图6示出了根据本申请实施例的具有多系统的终端500的示意性框图。
如图6所示,该终端500包括:
第一片上系统501,所述第一片上系统501上运行第一操作系统,所述第一操作系统上运行GDB客户端;
第二片上系统502,所述第二片上系统502上运行第二操作系统,所述第二操作系统上运行GDB服务端;
所述第一片上系统501和所述第二片上系统502通过总线503连接;
其中,所述GDB客户端用于接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;
所述GDB服务端用于执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;
所述GDB客户端用于显示所述调试结果。
在本申请一些实施例中,所述GDB客户端还用于:
所述GDB客户端根据远端串行协议RSP对所述调试命令进行封装,得到第一RSP数据包;
通过总线向所述GDB服务端发送所述第一RSP数据包。
在本申请一些实施例中,所述GDB服务端还用于:
根据RSP对所述第一RSP数据包进行解封装,得到所述调试命令。
在本申请一些实施例中,所述GDB服务端还用于:
根据RSP对所述调试结果进行封装,得到第二RSP数据包;
通过总线向所述GDB客户端发送所述第二RSP数据包。
在本申请一些实施例中,所述GDB客户端还用于:
根据RSP对所述第二RSP数据包进行解封装,得到所述调试结果。
在本申请一些实施例中,所述调试命令中的至少一种:
断点的设置命令,观察点的设置命令,寄存器的读取命令,寄存器的设置命令,存储单元的读取命令,存储单元的设置命令,堆栈的跟踪命令。
在本申请一些实施例中,所述第二片上系统采用ARM cortex-M处理器,其中,所述ARM cortex-M处理器支持调试监视器模式,所述GDB服务端通过将所述ARM cortex-M处理器陷入调试监视器模式异常以执行所述调试命令。
在本申请一些实施例中,所述GDB服务端通过配置调试异常和监视器控制DEMCR寄存器使所述调试监视器模式使能以使所述ARM cortex-M处理器陷入调试监视器模式异常。
在本申请一些实施例中,所述GDB服务端还用于:
确定所述调试命令是否为所述GDB服务端支持的调试命令;
在所述调试命令为所述GDB服务端支持的调试命令的情况下,控制所述ARMcortex-M处理器陷入调试监视器模式异常以执行所述调试命令。
在本申请一些实施例中,所述GDB服务端还用于:
在所述ARM cortex-M处理器陷入调试监视器异常的情况下,确定是否和所述GDB客户端第一次建立连接;
在所述GDB服务端和所述GDB客户端不是第一次建立连接的情况下,向所述GDB客户端回复所述调试命令的接收确认信息;或者
在所述GDB服务端和所述GDB客户端是第一次建立连接的情况下,对所述GDB服务端的用于调试的变量进行初始化,并将已设置的断点去使能。
在本申请一些实施例中,所述ARM cortex-M处理器包括闪存和断点FPB单元,所述FPB单元中配置断点寄存器,其中,所述断点寄存器用于存储断点的信息。
在本申请一些实施例中,所述断点寄存器包括断点控制寄存器和N个断点比较寄存器,所述N为所述ARM cortex-M处理器支持的断点个数,所述N为正整数;
其中,所述断点控制寄存器用于存储所述ARM cortex-M处理器支持的断点个数和所述FPB单元的使能状态;
所述N个断点比较寄存器和所述ARM cortex-M处理器支持的N个断点一一对应,每个断点比较寄存器用于存储对应的断点的地址和使能状态。
在本申请一些实施例中,所述ARM cortex-M处理器包括数据观察点和跟踪DWT单元,所述DWT单元中配置观察点寄存器,其中,所述观察点寄存器用于存储观察点的信息。
在本申请一些实施例中,所述观察点寄存器包括观察点控制寄存器,M个观察点功能寄存器,M个观察点比较寄存器和M个观察点范围寄存器,所述M为所述ARM cortex-M处理器支持的观察点个数,所述M为正整数;
其中,所述观察点控制寄存器用于存储所述ARM cortex-M处理器支持的观察点个数;
所述M个观察点功能寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点功能寄存器用于存储对应的观察点的类型;
所述M个观察点比较寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点比较寄存器用于存储对应的观察点的地址;
所述M个观察点范围寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点范围寄存器用于设置对应的观察点涉及的范围。
在本申请一些实施例中,所述GDB客户端还用于:
接收所述调试终端通过安卓调试桥ADB发送的所述调试命令。
在本申请一些实施例中,所述GDB客户端通过ADB显示解封装的所述调试结果。
在本申请一些实施例中,所述第一操作系统为安卓系统,所述第二操作系统为实时操作系统RTOS。
在本申请一些实施例中,所述第一片上系统为所述终端应用处理芯片AP,所述第二片上系统为多媒体芯片。
综上,通过在终端的第一操作系统中实现GDB客户端,在第二操作系统中实现GDB服务端,调试终端通过ADB向GDB客户端发送调试命令,GDB客户端通过总线向GDB服务端发送调试命令,GDB服务端执行调试命令后,通过总线将调试结果返回至GDB客户端,从而能够实现在不依赖硬件仿真器,并且不改变终端的整机硬件的情况下,对第二片上系统上的第二操作系统的调试。
应理解,根据本申请实施例的终端500可对应于本申请方法实施例中的被调试终端,并且终端500中的各个单元的上述和其它操作和/或功能分别为了实现图3至图5所示方法实施例中被调试终端的相应流程,为了简洁,在此不再赘述。
图7示出了实现本申请另一实施例的终端的结构示意图。需要说明的是,图7示出的终端600仅是一个示例,不应该对本申请实施例的功能和使用范围带来任何限制。
如图7所示,终端600包括至少两个处理器,例如处理器601和处理器602,例如,该处理器601可以为AP,该处理器602可以为多媒体芯片,例如ISP。
在本申请一些实施例中,处理器601上运行第一操作系统,例如,安卓系统,处理器602上运行第二操作系统,例如RTOS系统,第一操作系统上运行GDB客户端,第二操作系统上运行GDB服务端。
该终端600中的处理器可以根据存储在只读存储器(Read-Only Memory,ROM)603中的程序或者从存储部分609加载到随机访问存储器(Random Access Memory,RAM)604中的程序而执行各种适当的动作和处理。在RAM604中,还存储有系统操作所需的各种程序和数据。处理芯片601,处理芯片602、ROM 603以及RAM 604通过总线605彼此相连。输入/输出(Input/Output,I/O)接口606也连接至总线605。
在一些实施例中,终端600中的处理器601可以通过通信部分610(例如,USB或WIFI)接收调试终端发送的调试命令,进一步对该调试命令进行封装,将封装的调试命令通过总线605发送给处理芯片602上的GDB服务端,该GDB服务端可以对接收到的数据进行解封装,得到调试命令,进一步执行该调试命令,得到调试结果。然后将调试结果进行封装,通过总线605将封装的调试结果发送给GDB客户端。然后GDB客户端对接收到的数据进行解封装,得到调试结果,并通过通信部分610将该调试结果发送给调试终端,从而实现该调试结果的显示。
以下部件连接至I/O接口606:包括键盘、鼠标等的输入部分607;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分608;包括硬盘等的存储部分609;以及包括诸如局域网(Local AreaNetwork,LAN)卡、调制解调器等的网络接口卡的通信部分610。通信部分610经由诸如因特网的网络执行通信处理。驱动器611也根据需要连接至I/O接口606。可拆卸介质612,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器611上,以便于从其上读取的计算机程序根据需要被安装入存储部分609。
特别地,根据本申请实施例,上文流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行上述流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分610从网络上被下载和安装,和/或从可拆卸介质612被安装。在该计算机程序被处理器执行时,执行本申请的终端600中限定的各种功能。
本申请实施例还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,用于存储计算机程序。该计算机可读存储介质可应用于计算机设备,并且该计算机程序使得计算机设备执行本申请实施例中的方法实施例中的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得计算机设备执行本申请实施例中的方法实施例中的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序,该计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得计算机设备执行本申请实施例中的方法实施例中的相应流程,为了简洁,在此不再赘述。
应理解,本申请实施例的处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用服务器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用服务器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
应理解,上述存储器为示例性但不是限制性说明,例如,本申请实施例中的存储器还可以是静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synch link DRAM,SLDRAM)以及直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)等等。也就是说,本申请实施例中的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种应用于具有多系统的终端的调试方法,其特征在于,所述终端包括第一片上系统和第二片上系统,所述第一片上系统和所述第二片上系统通过总线连接,所述多系统包括第一操作系统和第二操作系统,所述第一操作系统运行于所述第一片上系统,所述第二操作系统运行于所述第二片上系统,所述第一操作系统上运行GDB客户端,所述第二操作系统上运行GDB服务端;所述方法包括:
所述GDB客户端接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;
所述GDB服务端执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;
所述GDB客户端显示所述调试结果。
2.根据权利要求1所述的调试方法,其特征在于,所述GDB客户端通过总线向将所述调试命令发送给所述GDB服务端,包括:
所述GDB客户端根据远端串行协议RSP对所述调试命令进行封装,得到第一RSP数据包,并通过总线向所述GDB服务端发送所述第一RSP数据包;
所述方法还包括:
所述GDB服务端根据RSP对所述第一RSP数据包进行解封装,得到所述调试命令。
3.根据权利要求1或2所述的调试方法,其特征在于,所述GDB服务端通过总线将所述调试结果发送给所述GDB客户端,包括:
所述GDB服务端根据RSP对所述调试结果进行封装,得到第二RSP数据包,并通过总线向所述GDB客户端发送所述第二RSP数据包;
所述方法还包括:
所述GDB客户端根据RSP对所述第二RSP数据包进行解封装,得到所述调试结果。
4.根据权利要求1所述的方法,其特征在于,所述第二片上系统采用ARM cortex-M处理器,其中,所述ARM cortex-M处理器支持调试监视器模式,所述GDB服务端通过将所述ARMcortex-M处理器陷入调试监视器模式异常以执行所述调试命令。
5.根据权利要求4所述的方法,其特征在于,所述ARM cortex-M处理器包括闪存补丁和断点FPB单元,所述FPB单元中配置断点寄存器,其中,所述断点寄存器用于存储断点的信息。
6.根据权利要求5所述的方法,其特征在于,所述断点寄存器包括断点控制寄存器和N个断点比较寄存器中的至少一种,所述N为所述ARM cortex-M处理器支持的断点个数,所述N为正整数;
其中,所述断点控制寄存器用于存储所述ARM cortex-M处理器支持的断点个数和所述FPB单元的使能状态;
所述N个断点比较寄存器和所述ARM cortex-M处理器支持的N个断点一一对应,每个断点比较寄存器用于存储对应的断点的地址和使能状态。
7.根据权利要求4或5所述的方法,其特征在于,所述ARM cortex-M处理器包括观察点和跟踪DWT单元,所述DWT单元中配置观察点寄存器,其中,所述观察点寄存器用于存储观察点的信息。
8.根据权利要求7所述的方法,其特征在于,所述观察点寄存器包括观察点控制寄存器,M个观察点功能寄存器,M个观察点比较寄存器和M个观察点范围寄存器中的至少一种,所述M为所述ARM cortex-M处理器支持的观察点个数,所述M为正整数;
其中,所述观察点控制寄存器用于存储所述ARM cortex-M处理器支持的观察点个数;
所述M个观察点功能寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点功能寄存器用于存储对应的观察点的类型;
所述M个观察点比较寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点比较寄存器用于存储对应的观察点的地址;
所述M个观察点范围寄存器和所述ARM cortex-M处理器支持的M个观察点一一对应,每个观察点范围寄存器用于设置对应的观察点涉及的范围。
9.一种终端,其特征在于,包括:
第一片上系统,所述第一片上系统上运行第一操作系统,所述第一操作系统上运行GDB客户端;
第二片上系统,所述第二片上系统上运行第二操作系统,所述第二操作系统上运行GDB服务端;
所述第一片上系统和所述第二片上系统通过总线连接;
其中,所述GDB客户端用于接收调试终端发送的调试命令,并通过总线向将所述调试命令发送给所述GDB服务端;
所述GDB服务端用于执行所述调试命令,得到调试结果,并通过总线将所述调试结果发送给所述GDB客户端;
所述GDB客户端还用于显示所述调试结果。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序使得计算机执行如权利要求1至8中任一项所述的方法。
CN202110412220.5A 2021-04-16 2021-04-16 应用于具有多系统的终端的调试方法、终端和存储介质 Active CN113138918B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110412220.5A CN113138918B (zh) 2021-04-16 2021-04-16 应用于具有多系统的终端的调试方法、终端和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110412220.5A CN113138918B (zh) 2021-04-16 2021-04-16 应用于具有多系统的终端的调试方法、终端和存储介质

Publications (2)

Publication Number Publication Date
CN113138918A CN113138918A (zh) 2021-07-20
CN113138918B true CN113138918B (zh) 2023-12-01

Family

ID=76812902

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110412220.5A Active CN113138918B (zh) 2021-04-16 2021-04-16 应用于具有多系统的终端的调试方法、终端和存储介质

Country Status (1)

Country Link
CN (1) CN113138918B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1494688A (zh) * 2001-02-24 2004-05-05 �Ҵ���˾ 新颖的大规模并行超级计算机
KR20050063023A (ko) * 2003-12-19 2005-06-28 한국전자통신연구원 제이티에이지를 이용한 임베디드 시스템의 디버깅 장치 및방법
US7080283B1 (en) * 2002-10-15 2006-07-18 Tensilica, Inc. Simultaneous real-time trace and debug for multiple processing core systems on a chip
CN102968364A (zh) * 2012-11-16 2013-03-13 中国航天科技集团公司第九研究院第七七一研究所 一种基于通用调试接口的SoC硬件调试器
CN106598909A (zh) * 2016-11-11 2017-04-26 湘潭大学 一种可编程片上系统构建方法
CN107870855A (zh) * 2016-09-27 2018-04-03 北京计算机技术及应用研究所 基于天熠嵌入式操作系统的调试系统
CN110347639A (zh) * 2018-04-03 2019-10-18 三星电子株式会社 片上系统及其操作方法
US10489543B1 (en) * 2017-08-14 2019-11-26 Xilinx, Inc. Productivity platform using system-on-chip with programmable circuitry

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130198566A1 (en) * 2012-01-27 2013-08-01 Lsi Corporation Method and Apparatus for Debugging System-on-Chip Devices
US9262293B2 (en) * 2013-09-16 2016-02-16 Advanced Micro Devices, Inc. Debug apparatus and methods for dynamically switching power domains
US20190271740A1 (en) * 2018-03-05 2019-09-05 Changyi Gu Non-intrusive on-chip debugger with remote protocol support
CN110689915B (zh) * 2018-07-06 2023-06-27 爱思开海力士有限公司 经由主机/串行接口的远程ssd调试及其执行方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1494688A (zh) * 2001-02-24 2004-05-05 �Ҵ���˾ 新颖的大规模并行超级计算机
US7080283B1 (en) * 2002-10-15 2006-07-18 Tensilica, Inc. Simultaneous real-time trace and debug for multiple processing core systems on a chip
KR20050063023A (ko) * 2003-12-19 2005-06-28 한국전자통신연구원 제이티에이지를 이용한 임베디드 시스템의 디버깅 장치 및방법
CN102968364A (zh) * 2012-11-16 2013-03-13 中国航天科技集团公司第九研究院第七七一研究所 一种基于通用调试接口的SoC硬件调试器
CN107870855A (zh) * 2016-09-27 2018-04-03 北京计算机技术及应用研究所 基于天熠嵌入式操作系统的调试系统
CN106598909A (zh) * 2016-11-11 2017-04-26 湘潭大学 一种可编程片上系统构建方法
US10489543B1 (en) * 2017-08-14 2019-11-26 Xilinx, Inc. Productivity platform using system-on-chip with programmable circuitry
CN110347639A (zh) * 2018-04-03 2019-10-18 三星电子株式会社 片上系统及其操作方法

Also Published As

Publication number Publication date
CN113138918A (zh) 2021-07-20

Similar Documents

Publication Publication Date Title
KR20080022181A (ko) 마이크로컨트롤러들의 내부 메모리를 이용하여 트레이스정보를 저장 및 추출하는 메커니즘
JP2008523456A (ja) トレースコプロセッサを備えたデータ処理システム
CN111209193B (zh) 程序的调试方法及装置
CN107870855A (zh) 基于天熠嵌入式操作系统的调试系统
US9995789B2 (en) Secure remote debugging of SoCs
CN109683997B (zh) 通过沙箱访问应用程序接口的方法、沙箱及沙箱设备
CN106598652B (zh) FPGA环境下快速启动Linux内核的系统和启动方法
KR20130123582A (ko) 로그 모니터링 방법, 그 서버 및 기록 매체
Hernandez et al. FIRMWIRE: Transparent dynamic analysis for cellular baseband firmware
CN110851208A (zh) 接口参数和响应数据修改方法及装置
CN116401984A (zh) 基于虚拟机的片上系统仿真方法及系统
CN113138918B (zh) 应用于具有多系统的终端的调试方法、终端和存储介质
CN108647131B (zh) 运行日志的输出系统
CN111522571B (zh) 设备升级方法、装置、终端设备及存储介质
CN110147294B (zh) 调试信息的获取方法、装置、终端及计算机可读存储介质
WO2023240941A1 (zh) 下载数据的方法、装置和安全元件
CN116909819A (zh) 一种处理器调试方法、装置、计算机设备及处理器
CN105354075B (zh) 一种软硬件协同仿真的同步方法
CN113391931B (zh) 基于蓝牙的远程控制方法、装置、计算机设备和存储介质
CN113535578B (zh) 一种cts测试方法、装置及测试设备
CN113778774A (zh) 一种测试数据传输方法、装置,测试方法及通信模组
JP2009265823A (ja) 情報端末装置及びログデータ取得プログラム
CN111414270B (zh) 一种异常处理方法及装置
CN110008071B (zh) 一种远程调试装置及方法
KR101400396B1 (ko) 메모리 주소를 이용한 임베디드 소프트웨어의 실시간 디버깅 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant