本文主要介绍ozone的多核调试

Ozone 基础简介

Ozone 是 SEGGER 推出的全功能嵌入式图形调试器,依托 J-Link/J-Trace 探针实现源码/汇编级调试,支持任意编译器输出的 ELF 文件,同时集成追踪、性能剖析、代码覆盖率分析能力,兼具调试与系统性能诊断能力。

核心扩展能力支撑多核调试:

  1. 内置脚本引擎:可重写下载、复位、断点触发等调试流程;
  2. Automation Socket 自动化接口:TCP Socket 远程控制 Ozone 实例;
  3. 自定义工具栏:绑定外部脚本,一键执行多核同步操作;
  4. 外部程序联动:Ozone 脚本可调用本地 Python 脚本跨实例下发调试指令。

Ozone 多核调试通用方案(核心原理)

架构:主实例 + 子实例多进程隔离

Ozone 多核调试不支持单实例多核心,采用多独立Ozone实例架构:

  1. 主实例(Main Instance)
    • 唯一具备完整目标操作权限:芯片复位、全核固件下载、底层硬件初始化;
    • 承载人机交互入口、自定义同步按钮、Python 脚本调用入口;
    • 对应主核心(示例:M7_0),Main.jdebug 工程文件。
  2. 子实例(Sub Instance)
    • 仅用于对应从核心(示例:M7_1)单核心调试;
    • 禁止独立下载固件,下载逻辑置空,由主实例统一烧录;
    • 开放 Automation Socket 端口,供主实例通过 Python 远程控制;
    • 对应从核心,Sub.jdebug 工程文件。

基础约束

  • 每个核心必须配套独立 .jdebug 工程脚本,区分主/从配置;
  • 手动多实例操作繁琐:全部核心运行/暂停需逐个点击 Resume/Break;
  • 自动化方案:Ozone 内置脚本 + TCP Socket 自动化接口 + Python 中转脚本,实现一键同步控制、跨核心断点联动。

工程配置分步详解(Traveo II CYT4BF 双核示例)

多核芯片调试底层硬件时序、核心唤醒逻辑需专用处理:

  • 各核心配套独立 J-Link Script 文件,存放于 J-LinkScriptFiles 目录;
  • .jdebug 工程配置中绑定对应脚本,完成多核底层通道初始化。

主工程 Main.jdebug(M7_0 主核心)

  1. 基础配置:指定芯片型号、加载主核心 ELF;
  2. 重写 TargetDownload() 函数:
    • 实现双核心 ELF 统一下载,依次烧录 M7_0、M7_1 固件;
    • 承担芯片复位、调试通道初始化等全局操作;
  3. 自定义工具栏:封装主机侧多核同步功能按钮,绑定内置脚本;
  4. 内置调用逻辑:通过 Ozone 外部程序接口唤起 Python 控制脚本。

子工程 Sub.jdebug(M7_1 从核心)

  1. 基础配置:同芯片型号、加载从核心 ELF;
  2. 重写 TargetDownload() 函数:空实现
    • 屏蔽子实例默认下载逻辑,避免重复烧录、内存冲突;
  3. 开启 Automation Socket,分配独立 TCP 端口,供 Python 脚本远程连接。

主机侧多核同步功能(自定义工具栏一键操作)

主实例提供 6 项封装功能,全部基于「本地操作 + Python Socket 远程下发指令」实现跨实例同步:

  1. Launch Ozone for Sub
    • 自动启动从核心 Ozone 子实例,加载 Sub.jdebug;
    • 预分配并指定子实例 Automation 通信端口。
  2. Run all(全部核心运行)
    • 本地执行 Target.Resume() 启动主核心;
    • 调用 Python 脚本向子实例 Socket 发送 Target.Resume(),同步启动从核心。
  3. Break all(全部核心暂停)
    • 本地 Target.Break() 停主核心;Python 远程下发暂停指令停从核心。
  4. Run Sub(仅运行从核心)
    • 仅通过 Python 远程指令操作子实例,主核心保持原有状态。
  5. Break Sub(仅暂停从核心)
    • 远程下发暂停指令锁定从核心,不影响主核心运行。
  6. Exit Sub
    • 关闭从核心调试会话、退出子 Ozone 实例。

跨核心断点联动(关键调试特性)

可实现一个核心触发断点,自动暂停全部核心

  1. 在断点绑定用户回调函数;
  2. 回调中调用 Python 脚本,向另一核心实例 Socket 发送 Break 指令;
  3. 双向支持:主核心断点停从核、从核心断点停主核(仅切换脚本目标端口)。

Python 自动化中转脚本原理

脚本作用

轻量化 TCP 客户端,作为主 Ozone 与子 Ozone Automation Socket 的通信桥梁:

  • Ozone 内置脚本无法直接跨进程通信,通过 Python 转发调试命令;
  • 接收主实例传入参数,建立 Socket 连接并下发指令,回显 Ozone 控制台输出。

入参说明

参数作用
–port目标 Ozone 实例 Automation 端口(子实例自定义端口/主实例默认端口)
–cmd下发至远端实例的 Ozone 调试命令(Target.Resume / Target.Break 等)
–timeoutSocket 响应等待超时时间

数据流转流程

主实例内置脚本 → 启动 Python 脚本(传入端口+指令)→ Python 创建 TCP Socket → 连接目标 Ozone Automation 端口 → 下发调试命令 → 远端 Ozone 执行指令 → 执行回显输出回传给主实例控制台。

说明:该 Python 脚本仅作最简示例,用户可基于 Socket 扩展更复杂自动化流程(批量调试、日志采集、自动化测试)。

完整使用流程(实操步骤)

  1. 下载示例包 OzoneMultiCoreSampleTraveo.zip 并解压;
  2. 打开 Ozone,加载主工程 Main.jdebug
  3. 硬件连接 J-Link 至 Traveo II 开发板,建立调试连接;
  4. 主工程执行固件下载:自动完成 M7_0、M7_1 双核心烧录;
  5. 点击工具栏「Launch Ozone for Sub」自动拉起从核心调试窗口;
  6. 通过同步按钮实现全核/单核运行、暂停;
  7. 配置断点回调,实现一核停、全核同步暂停;
  8. 调试结束点击「Exit Sub」关闭从实例,退出调试会话。

核心优势总结

  1. 隔离调试:各核心独立 Ozone 窗口,寄存器、堆栈、源码视图互不干扰,单核心问题定位清晰;
  2. 统一烧录:主实例一次性下载全部核心固件,避免多窗口重复操作;
  3. 一键同步控制:自定义工具栏替代手动逐个操作,大幅提升多核调试效率;
  4. 断点全局联动:单核心异常自动冻结其余核心,完整保留多核现场;
  5. 高度可扩展:Automation Socket + Python 可拓展自动化测试、持续集成调试流程;
  6. 通用适配:方案不局限 Traveo II,可移植至所有 Cortex-M 多核 MCU(STM32H7、XMC7000 等)。

参考