CN116881120A - 面向同构非对称多核的OpenOCD单端口调试方法及系统 - Google Patents

面向同构非对称多核的OpenOCD单端口调试方法及系统 Download PDF

Info

Publication number
CN116881120A
CN116881120A CN202310678494.8A CN202310678494A CN116881120A CN 116881120 A CN116881120 A CN 116881120A CN 202310678494 A CN202310678494 A CN 202310678494A CN 116881120 A CN116881120 A CN 116881120A
Authority
CN
China
Prior art keywords
debug
debugging
target
openocd
thread
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.)
Pending
Application number
CN202310678494.8A
Other languages
English (en)
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.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
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 National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202310678494.8A priority Critical patent/CN116881120A/zh
Publication of CN116881120A publication Critical patent/CN116881120A/zh
Pending legal-status Critical Current

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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种面向同构非对称多核的OpenOCD单端口调试方法及系统,本发明方法包括:调试主机连接调试主板;为OpenOCD配置AMP组和SMP组的调试目标target;通过GDB连接OpenOCD的单个端口并发送调试命令;OpenOCD处理调试命令,若调试命令的调试目标target在AMP组内,则根据链表头遍历AMP组的调试目标target,针对调试命令的调试目标target和遍历得到的调试目标target执行调试命令的操作,否则仅针对调试命令的调试目标target执行调试命令的操作。本发明旨在简化面向同构非对称多核的OpenOCD调试技术,提升同构非对称多核下的调试效率。

Description

面向同构非对称多核的OpenOCD单端口调试方法及系统
技术领域
本发明涉及网络处理器片上调试技术领域,具体涉及一种面向同构非对称多核的OpenOCD单端口调试方法及系统。
背景技术
开放式片上调试器(OpenOCD)旨在为嵌入式目标设备提供调试、在系统编程和边界扫描测试。OpenOCD通常需要调试适配器的帮助。调试适配器是一个小型硬件模块,能为调试目标提供正确的电子信号。OpenOCD支持的调试适配器类型有很多,例如有JTAG、JLINK、STLINK、RLINK等。同时,OpenOCD兼容远程gdbserver协议,因此可用于调试远程目标。OpenOCD提供了gdbserver接口,可以把GDB的命令直接转换成JTAG命令,然后通过指定的下载器打包,最后通过USB驱动由USB发送出去。
OpenOCD的启动可以直接使用openocd命令,默认会使用openocd.cfg配置文件。也可以手动加上-f参数,后面接上配置文件路径名称。配置文件中是对调试对象的参数设置,可以直接写在配置文件中,也可以使用-c命令在后面添加命令。OpenOCD官方提供了三类配置文件,放在三个文件夹中:
interface:对应不同的调试适配器
board:对应不同的开发板
target:集成了CPU和其他的JTAG TAP的芯片
当然,用户可以根据自己的芯片类型、开发板类型、实现功能等编写合适的脚本文件,实现符合要求的适配器、CPU和Flash配置等。
OpenOCD虽然支持连接非对称的多核target(调试目标),但没有针对非对称多处理模式的命令,意味着在调试非对称多核时OpenOCD需要开放多个GDB端口。由于GDB在进行远程调试时一次只能连接一个端口,因此需要采用多个GDB窗口连接多个端口,分别调试执行不同任务的核心。在面对核心数量庞大的非对称网络处理器,传统的“多GDB+OpenOCD”的调试方法一定程度上影响了调试的效率。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向同构非对称多核的OpenOCD单端口调试方法及系统,本发明旨在简化面向同构非对称多核的OpenOCD调试技术,提升同构非对称多核下的调试效率。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向同构非对称多核的OpenOCD单端口调试方法,包括:
S101,调试主机连接调试主板;
S102,为OpenOCD配置AMP组和SMP组的调试目标target,使得所有非SMP组的调试目标target和所有SMP组的第一个调试目标target在同一个AMP组内,并且调试目标target中存放一个可遍历AMP组所有调试目标target的链表头,启动OpenOCD;
S103,通过调试主机上的调试器GDB连接OpenOCD的单个端口并发送调试命令;
S104,OpenOCD进行调试命令处理,若调试命令的调试目标target在AMP组内,则根据链表头遍历AMP组的调试目标target,然后针对调试命令的调试目标target和遍历得到的调试目标target执行调试命令的操作,否则仅针对调试命令的调试目标target执行调试命令的操作,从而完成对同构非对称多核的调试。
可选地,步骤S101中调试主机连接调试主板是指调试主机通过硬件调试器连接调试主板。
可选地,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,还包括在每一个调试目标target的创建配置命令中加入参数threadid以手动设置线程id以避免AMP组所有非SMP组的调试目标target和所有SMP组的第一个调试目标target的线程id冲突,以及对AMP组的第一个调试目标target的创建配置命令中加入参数-rtos hwthread以使得AMP组的第一个调试目标target使用模拟线程方式的实时操作系统rtos。
可选地,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,调试目标target的链表头存放在AMP组所有调试目标target的数据结构体中以使得AMP组所有调试目标target均可访问该链表头,所述数据结构体中包含用于表示所属AMP组的标识amp和用于存放链表头的链表amp_targets。
可选地,步骤S103中通过调试主机上的调试器GDB连接OpenOCD的单个端口时,还包括针对AMP组添加AMP组内各个调试目标target对应的通用操作系统或者实时操作系统rtos的符号表,并将AMP组内的第一个调试目标target绑定到调试器GDB的连接,并遍历第一个调试目标target所在的AMP组内的所有调试目标target,若遍历得到的调试目标target同时属于SMP组,则将遍历得到的调试目标target及其所属的SMP组中的所有调试目标target全部绑定到调试器GDB的连接,否则仅将遍历得到的调试目标target绑定到调试器GDB的连接。
可选地,步骤S104包括:
S201,判断调试命令是否为断点相关命令,若是断点相关命令,则跳转步骤S202;否则,跳转步骤S203;所述断点相关命令包括单步调试和单步跳过;
S202,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,结束并退出;
S203,判断是否为指定当前线程运行,若为指定当前线程运行,则跳转步骤S204;否则,跳转步骤S205;
S204,更新调试器GDB指定的当前线程,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,然后调用线程更新函数,以使得线程更新函数中使用调试器GDB指定的当前线程;
S205,判断调试命令的调试目标target在AMP组内是否成立,若成立则根据链表头遍历AMP组的调试目标target,然后将调试命令的调试目标target和遍历得到的调试目标target作为查找结果;否则,仅将调试命令的调试目标target作为查找结果;针对查找结果调用调试命令的处理函数以执行调试命令的操作,从而完成对同构非对称多核的调试。
可选地,步骤S204中调用线程更新函数后,线程更新函数的执行包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程更新;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程更新,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程更新,否则仅针对遍历得到的AMP组中的调试目标target进行线程更新,包括更新所有线程信息和当前的调试目标target对应的当前线程。
可选地,所述找到当前线程对应的调试目标target包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程查找;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程查找,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程查找,否则仅针对遍历得到的AMP组中的调试目标target进行线程查找。
此外,本发明还提供一种面向同构非对称多核的OpenOCD单端口调试系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向同构非对称多核的OpenOCD单端口调试方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向同构非对称多核的OpenOCD单端口调试方法。
与现有技术相比,本发明的主要优点在于:现有的“多GDB+OpenOCD”方法采用多个GDB完成非对称多核调试,单如果核数很多,那么采用多个GDB进行调试的效率不高,且很占系统资源。本发明对OpenOCD进行AMP功能扩展,使得AMP模式的多核同SMP模式的多核一样模拟为虚拟线程,通过AMP组、SMP组以及AMP组所有调试目标target的链表头实现了调试目标target的选择以确保调试命令正确传给需要的内核,达到了单个GDB连接单个端口完成非对称多处理系统的调试要求,相较于现有的“多GDB+OpenOCD”的非对称多处理调试方法,本发明能够在OpenOCD连接非对称多处理系统时开放单个GDB端口,并通过单个GDB连接OpenOCD单个端口来完成非对称的多核调试,能够有效降低同构非对称多核的调试的系统资源占用,提高非对称多核调试的效率,不仅能为基于GDB+OpenOCD的非对称多处理系统的调试提供新的思路,同时能对核心数量众多的非对称网络处理器的调试发展做出一定贡献。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明实施例中调试系统的主要框架示意图。
图3为本发明实施例中OpenOCD代码内target结构体的部分成员示意图。
图4为本发明实施例中OpenOCD代码内各个调试命令处理的流程示意图。
图5为本发明实施例中OpenOCD代码内线程更新函数的执行流程示意图。
图6为本发明实施例中OpenOCD代码内线程查找函数的执行流程示意图。
具体实施方式
以下将结合说明书附图和具体实施例对本发明做进一步详细说明。
如图1所示,本实施例面向同构非对称多核的OpenOCD单端口调试方法包括:
S101,调试主机连接调试主板;
S102,为OpenOCD配置AMP(Asymmetric Multi-Processing,非对称多处理)组和SMP(对称多处理)组的调试目标target,使得所有非SMP组的调试目标target和所有SMP组的第一个调试目标target在同一个AMP组内,并且调试目标target中存放一个可遍历AMP组所有调试目标target的链表头,启动OpenOCD;
S103,通过调试主机上的调试器GDB连接OpenOCD的单个端口并发送调试命令,例如线程查看、线程切换、单步调试、单步跳过、继续运行、添加断点和删除断点命令等;
S104,OpenOCD进行调试命令处理,若调试命令的调试目标target在AMP组内,则根据链表头遍历AMP组的调试目标target,然后针对调试命令的调试目标target和遍历得到的调试目标target执行调试命令的操作,否则仅针对调试命令的调试目标target执行调试命令的操作,从而完成对同构非对称多核的调试。
如图2所示,本实施例步骤S101中调试主机连接调试主板是指调试主机通过硬件调试器连接调试主板,本实施例中调试主板为RISCV架构的芯来科技VCU118开发板(4核运行linux,1核运行实时操作系统rtos的RTThread),硬件调试器具体为蜂鸟调试器,在调试主机上安装支持RISCV架构的GDB和扩展后的OpenOCD,使用USB数据线连接调试主机和蜂鸟调试器,蜂鸟调试器通过JTAG连接到调试主板芯来科技的VCU118开发板。
本实施例中,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target具体是利用新增的amp命令实现的,利用新增的amp命令可将同构非对称多核互联,即:配置所有非SMP组的调试目标target和所有SMP组的第一个调试目标target在同一个AMP组内,并且调试目标target中存放一个可遍历AMP组所有调试目标target的链表头。AMP组是amp命令配置的所有调试目标target的组;SMP组是smp命令配置的所有调试目标target。与常规的OpenOCD配置相同,本实施例中为OpenOCD配置AMP组和SMP组的调试目标target也是基于OpenOCD配置文件实现的,在OpenOCD配置文件中,使用target amp命令配置所有非SMP(Symmetric Multi-Processing,对称多处理)组的target(VCU118开发板中的核0)和所有SMP组的第一个target(VCU118开发板中的核1)在同一个AMP组内。
本实施例中,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,还包括在每一个调试目标target的创建配置命令中加入参数threadid以手动设置线程id以避免AMP组所有非SMP组的调试目标target和所有SMP组的第一个调试目标target的线程id冲突(避免核0的线程id和核1的线程id冲突),以及对AMP组的第一个调试目标target的创建配置命令中加入参数-rtos hwthread以使得AMP组的第一个调试目标target使用模拟线程方式的实时操作系统rtos。
如图3所示,本实施例步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,调试目标target的链表头存放在AMP组所有调试目标target的数据结构体中以使得AMP组所有调试目标target均可访问该链表头,所述数据结构体中包含用于表示所属AMP组的标识amp和用于存放链表头的链表amp_targets(双向循环链表,简称双链表)。通过链表amp_targets,可以完成所有AMP组的target遍历。
本实施例中,步骤S103中通过调试主机上的调试器GDB连接OpenOCD的单个端口时,还包括针对AMP组添加AMP组内各个调试目标target对应的通用操作系统(Linux操作系统)或者实时操作系统rtos(RTThread)的符号表(符号表是调试器GDB中要添加的,用于确定二进制地址上对应的代码内容),并将AMP组内的第一个调试目标target绑定到调试器GDB的连接,并遍历第一个调试目标target所在的AMP组内的所有调试目标target,若遍历得到的调试目标target同时属于SMP组,则将遍历得到的调试目标target及其所属的SMP组中的所有调试目标target全部绑定到调试器GDB的连接,否则仅将遍历得到的调试目标target绑定到调试器GDB的连接。调试器GDB连接OpenOCD开放的GDB端口时,OpenOCD会对每个调试目标target进行操作,第一个调试目标target没有GDB连接,这此的GDB连接就会绑定该调试目标target。绑定target0后(第一个target,核0),因为核1对应的调试目标target1和核0对应的调试目标target0在同一个AMP组内,将调试目标target1绑定到这次连接。又因为调试目标target1属于SMP组,将SMP组内所有调试目标target绑定到这次连接。最终所有调试目标target都绑定了这次的连接,但这次连接绑定的调试目标target是target0,也就是说所有调试目标target都有GDB连接,但这次连接只能直接访问target0。这个连接会绑定该AMP组的第一个调试目标target,然后遍历该AMP组的调试目标target,如果组内的某个调试目标target属于SMP组,则遍历该SMP组的调试目标target,将该SMP组内所有调试目标target绑定到该连接,否则将该调试目标target(是遍历AMP组获得的target)直接绑定到该连接。
本实施例中,创建调试目标target分别包括TARGETNAME0、TARGETNAME1、TARGETNAME1.1、TARGETNAME1.2和TARGETNAME1.3,其命令格式如下:
target create TARGETNAME0 riscv-chain-position TARGETNAME0-threadid1-rtos hwthread
target create TARGETNAME1 riscv-chain-position TARGETNAME1-threadid 2
target create TARGETNAME1.1 riscv-chain-position TARGETNAME1-coreid1-threadid 3
target create TARGETNAME1.2 riscv-chain-position TARGETNAME1-coreid2-threadid 4
target create TARGETNAME1.3 riscv-chain-position TARGETNAME1-coreid3-threadid 5
上述各个命令中,“target create”为创建配置命令,通过-threadid参数分别为调试目标TARGETNAME0、TARGETNAME1、TARGETNAME1.1、TARGETNAME1.2和TARGETNAME1.3设置线程id为1~5。TARGETNAME0的创建配置命令中加入参数-rtos hwthread以使得AMP组的第一个调试目标target使用模拟线程方式的实时操作系统rtos。riscv为调试目标的架构,-chain-position为调试目标的位置,coreid为调试目标的编号。
创建SMP组和AMP组的命令格式如下:
target smp TARGETNAME1 TARGETNAME1.1 TARGETNAME1.2 TARGETNAME1.3
target amp$TARGETNAMEO TARGETNAME1
上述各个命令中,“target smp”为创建SMP组的命令,后面的参数即为已经创建好的调试目标target;“target amp”为创建AMP组的命令,使得所有非SMP组的调试目标target($TARGETNAMEO)和SMP组的第一个调试目标target(TARGETNAME1)在同一个AMP组内。
如图4所示,本实施例中步骤S104包括:
S201,判断调试命令是否为断点相关命令,若是断点相关命令,则跳转步骤S202;否则,跳转步骤S203;所述断点相关命令包括单步调试和单步跳过;
S202,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,结束并退出;
S203,判断是否为指定当前线程运行,若为指定当前线程运行,则跳转步骤S204;否则,跳转步骤S205;
S204,更新调试器GDB指定的当前线程,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,然后调用线程更新函数,以使得线程更新函数中使用调试器GDB指定的当前线程;
S205,判断调试命令的调试目标target在AMP组内是否成立,若成立则根据链表头遍历AMP组的调试目标target,然后将调试命令的调试目标target和遍历得到的调试目标target作为查找结果;否则,仅将调试命令的调试目标target作为查找结果;针对查找结果调用调试命令的处理函数以执行调试命令的操作,从而完成对同构非对称多核的调试。
OpenOCD在收到GDB的调试命令(单步调试,单步跳过,继续运行,添加断点,删除断点),会执行对应的处理函数。如果调试命令和断点相关,则会先使用线程查找函数找出当前线程对应的target,将该target传入原来的处理函数(是OpenOCD中调试命令的处理函数),完成添加或删除断点操作。如果当前调试命令和断点无关,就再判断调试命令是否指定当前线程。如果指定了当前线程,就先更新GDB指定的当前线程(OpenOCD原先代码存在问题,GDB发送线程切换命令后,变量“GDB指定的当前线程”不会立刻更新。后续GDB发送指定当前线程的单步调试命令,OpenOCD会调用线程更新函数,而没有及时更新的变量“GDB指定的当前线程”会导致变量“当前target对应的当前线程”错误。最终导致GDB收到错误的信号,改变当前线程),再调用线程查找函数来找到当前线程对应调试目标target,并将该调试目标target传入原先处理函数。如果没有指定当前线程,就再判断当前调试目标target是否在AMP组内。如果调试目标target在AMP组内,就遍历AMP组的调试目标target,使所有遍历的调试目标target调用原先处理函数。如果调试目标target不在AMP组内,就让当前调试目标target调用原先处理函数。
OpenOCD在收到GDB的调试命令对应的报文时,会进行解析,然后进行对应操作,有的调试命令在操作时会调用线程更新函数,这是原先的代码逻辑。因为新增的amp命令也是将调试目标target模拟为线程,所以修改了原先的线程更新函数,添加了AMP组调试目标target的遍历,SMP组的调试目标target遍历和线程更新均为原先代码已有操作。如图5所示,步骤S204中调用线程更新函数后,线程更新函数的执行包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程更新;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程更新,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程更新,否则仅针对遍历得到的AMP组中的调试目标target进行线程更新,包括更新所有线程信息和当前的调试目标target对应的当前线程。
本实施例中扩展后的OpenOCD支持的GDB调试命令包括:线程查看、线程切换、单步调试、单步跳过、继续运行和设置断点命令。OpenOCD在收到GDB的调试命令(设置断点,当前线程的单步调试,单步跳过),会进行当前线程的查找。如图6所示,找到当前线程对应的调试目标target包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程查找;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程查找,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程查找,否则仅针对遍历得到的AMP组中的调试目标target进行线程查找。在线程的查找函数(用于执行找到当前线程对应的调试目标target的函数)中,如果遍历的调试目标target属于SMP组,遍历该SMP组的调试目标target,进行线程查找;如果调试目标target属于AMP组,则遍历AMP组的调试目标target,若遍历的target属于SMP组,遍历该SMP组的target,进行线程查找,若遍历的调试目标target不属于SMP组,当前调试目标target进行线程查找;若调试目标target既不属于AMP组也不属于SMP组,当前调试目标target进行线程查找。线程查找的操作为如果当前遍历的target的线程id和线程查找函数传入的线程id(这个线程id其实是调试命令中可能会指定的线程id。threadid参数手动设置的是每个target的线程id。所以,调试器GDB可以通过指定线程id来确定哪个target执行想要的命令)相等,将当前遍历的调试目标target返回。
综上所述,针对现有非对称多处理模式的网络处理器的GDB+OpenOCD调试方法中要求多个GDB的问题,本实施例面向同构非对称多核的OpenOCD单端口调试方法将原有的OpenOCD进行AMP功能扩展,加入了target amp配置命令和target configure配置命令中的threadid参数,使得OpenOCD在正确连接到调试主板时仅开放一个GDB端口;在GDB连接该端口并发送调试命令时,OpenOCD将根据命令要求,或找到AMP组内所有的target,令其执行原先的操作,或找到AMP组内特定的target,令其执行原先的操作。例如:如果在GDB中设置了`set scheduler-locking on`,那么在GDB中输入调试命令“s”,仅当前线程对应的target会执行原先操作;如果在GDB中没有设置`set scheduler-locking on`,那么在GDB中输入调试命令“s”,那么所有线程都会执行当前命令。本实施例面向同构非对称多核的OpenOCD单端口调试方法进行了OpenOCD的AMP功能扩展,相较于使用“多GDB+OpenOCD”的非对称多处理调试方法,本发明能够在OpenOCD连接非对称多处理系统时开放单个GDB端口,并通过单个GDB连接OpenOCD单个端口来完成非对称的多核调试,不仅能为基于GDB+OpenOCD的非对称多处理系统的调试提供新的思路,提高非对称多核调试的效率,同时能对核心数量众多的非对称网络处理器的调试发展做出一定贡献。
此外,本发明还提供一种面向同构非对称多核的OpenOCD单端口调试系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向同构非对称多核的OpenOCD单端口调试方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向同构非对称多核的OpenOCD单端口调试方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,包括:
S101,调试主机连接调试主板;
S102,为OpenOCD配置AMP组和SMP组的调试目标target,使得所有非SMP组的调试目标target和所有SMP组的第一个调试目标target在同一个AMP组内,并且调试目标target中存放一个可遍历AMP组所有调试目标target的链表头,启动OpenOCD;
S103,通过调试主机上的调试器GDB连接OpenOCD的单个端口并发送调试命令;
S104,OpenOCD进行调试命令处理,若调试命令的调试目标target在AMP组内,则根据链表头遍历AMP组的调试目标target,然后针对调试命令的调试目标target和遍历得到的调试目标target执行调试命令的操作,否则仅针对调试命令的调试目标target执行调试命令的操作,从而完成对同构非对称多核的调试。
2.根据权利要求1所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S101中调试主机连接调试主板是指调试主机通过硬件调试器连接调试主板。
3.根据权利要求1所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,还包括在每一个调试目标target的创建配置命令中加入参数threadid以手动设置线程id以避免AMP组所有非SMP组的调试目标target和所有SMP组的第一个调试目标target的线程id冲突,以及对AMP组的第一个调试目标target的创建配置命令中加入参数-rtos hwthread以使得AMP组的第一个调试目标target使用模拟线程方式的实时操作系统rtos。
4.根据权利要求1所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S102中为OpenOCD配置AMP组和SMP组的调试目标target时,调试目标target的链表头存放在AMP组所有调试目标target的数据结构体中以使得AMP组所有调试目标target均可访问该链表头,所述数据结构体中包含用于表示所属AMP组的标识amp和用于存放链表头的链表amp_targets。
5.根据权利要求1所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S103中通过调试主机上的调试器GDB连接OpenOCD的单个端口时,还包括针对AMP组添加AMP组内各个调试目标target对应的通用操作系统或者实时操作系统rtos的符号表,并将AMP组内的第一个调试目标target绑定到调试器GDB的连接,并遍历第一个调试目标target所在的AMP组内的所有调试目标target,若遍历得到的调试目标target同时属于SMP组,则将遍历得到的调试目标target及其所属的SMP组中的所有调试目标target全部绑定到调试器GDB的连接,否则仅将遍历得到的调试目标target绑定到调试器GDB的连接。
6.根据权利要求1所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S104包括:
S201,判断调试命令是否为断点相关命令,若是断点相关命令,则跳转步骤S202;否则,跳转步骤S203;所述断点相关命令包括单步调试和单步跳过;
S202,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,结束并退出;
S203,判断是否为指定当前线程运行,若为指定当前线程运行,则跳转步骤S204;否则,跳转步骤S205;
S204,更新调试器GDB指定的当前线程,找到当前线程对应的调试目标target,为调试目标target调用调试命令的处理函数,然后调用线程更新函数,以使得线程更新函数中使用调试器GDB指定的当前线程;
S205,判断调试命令的调试目标target在AMP组内是否成立,若成立则根据链表头遍历AMP组的调试目标target,然后将调试命令的调试目标target和遍历得到的调试目标target作为查找结果;否则,仅将调试命令的调试目标target作为查找结果;针对查找结果调用调试命令的处理函数以执行调试命令的操作,从而完成对同构非对称多核的调试。
7.根据权利要求6所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,步骤S204中调用线程更新函数后,线程更新函数的执行包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程更新;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程更新,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程更新,否则仅针对遍历得到的AMP组中的调试目标target进行线程更新,包括更新所有线程信息和当前的调试目标target对应的当前线程。
8.根据权利要求7所述的面向同构非对称多核的OpenOCD单端口调试方法,其特征在于,所述找到当前线程对应的调试目标target包括:判断当前线程对应的调试目标target仅属于SMP组是否成立,若成立则遍历SMP组中的调试目标target并进行线程查找;否则,判断判断当前线程对应的调试目标target是否属于AMP组,若不属于AMP组则仅对当前线程对应的调试目标target进行线程查找,若属于AMP组,则遍历AMP组中的调试目标target,若遍历得到的AMP组中的调试目标target属于SMP组,则针对SMP组中所有的调试目标target进行线程查找,否则仅针对遍历得到的AMP组中的调试目标target进行线程查找。
9.一种面向同构非对称多核的OpenOCD单端口调试系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~8中任意一项所述面向同构非对称多核的OpenOCD单端口调试方法。
10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~8中任意一项所述面向同构非对称多核的OpenOCD单端口调试方法。
CN202310678494.8A 2023-06-08 2023-06-08 面向同构非对称多核的OpenOCD单端口调试方法及系统 Pending CN116881120A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310678494.8A CN116881120A (zh) 2023-06-08 2023-06-08 面向同构非对称多核的OpenOCD单端口调试方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310678494.8A CN116881120A (zh) 2023-06-08 2023-06-08 面向同构非对称多核的OpenOCD单端口调试方法及系统

Publications (1)

Publication Number Publication Date
CN116881120A true CN116881120A (zh) 2023-10-13

Family

ID=88259383

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310678494.8A Pending CN116881120A (zh) 2023-06-08 2023-06-08 面向同构非对称多核的OpenOCD单端口调试方法及系统

Country Status (1)

Country Link
CN (1) CN116881120A (zh)

Similar Documents

Publication Publication Date Title
CN100555218C (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
EP2359247B1 (en) Transforming user script code for debugging
CN103729288B (zh) 一种嵌入式多核环境下应用程序的调试方法
CN102902834B (zh) 一种soc芯片的验证方法及系统
JP4094724B2 (ja) ソフトウェアをデバッグする際に例外を識別するための装置および方法
US6948164B2 (en) Method and system for modifying executable code to add additional functionality
CN101446918B (zh) 一种实现用户态调试器调试单个函数的方法及系统
JPH05224911A (ja) 動的命令修正制御装置
CN101261601A (zh) 一种微处理器调试方法及所用的微处理器调试模块
CN111666210A (zh) 一种芯片验证方法及装置
CN111367742A (zh) 调试mvp处理器的方法、装置、终端和计算机可读存储介质
CN102331961A (zh) 并行模拟多个处理器的方法及系统、调度器
CN110704315A (zh) 一种嵌入式软件测试的故障注入装置
JPH11110255A (ja) ソフトウェアをデバッグするための装置および方法
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
CN116881120A (zh) 面向同构非对称多核的OpenOCD单端口调试方法及系统
CN106126211A (zh) 一种支持调试接口的mcu在线编程系统
CN114780409A (zh) 基于程序运行进程的断点设置方法、电子设备和存储介质
CN112285542B (zh) 一种面向fpga外部接口逻辑的调试与测试方法
CN107315685A (zh) 一种非侵入式程序实时调试方法
CN112802527B (zh) 嵌入式闪存高速编程的实现方法、嵌入式闪存的编程系统
US20140095841A1 (en) Processor and control method of processor
US8914274B1 (en) Method and system for instruction set simulation with concurrent attachment of multiple debuggers
JPS60262251A (ja) マイクロプロセツサ開発支援装置
CN117707919A (zh) 一种面向申威平台的协程调试方法

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