本文主要介绍ozone的多核调试
Ozone 基础简介
Ozone 是 SEGGER 推出的全功能嵌入式图形调试器,依托 J-Link/J-Trace 探针实现源码/汇编级调试,支持任意编译器输出的 ELF 文件,同时集成追踪、性能剖析、代码覆盖率分析能力,兼具调试与系统性能诊断能力。
核心扩展能力支撑多核调试:
- 内置脚本引擎:可重写下载、复位、断点触发等调试流程;
- Automation Socket 自动化接口:TCP Socket 远程控制 Ozone 实例;
- 自定义工具栏:绑定外部脚本,一键执行多核同步操作;
- 外部程序联动:Ozone 脚本可调用本地 Python 脚本跨实例下发调试指令。
Ozone 多核调试通用方案(核心原理)
架构:主实例 + 子实例多进程隔离
Ozone 多核调试不支持单实例多核心,采用多独立Ozone实例架构:
- 主实例(Main Instance)
- 唯一具备完整目标操作权限:芯片复位、全核固件下载、底层硬件初始化;
- 承载人机交互入口、自定义同步按钮、Python 脚本调用入口;
- 对应主核心(示例:M7_0),
Main.jdebug工程文件。
- 子实例(Sub Instance)
- 仅用于对应从核心(示例:M7_1)单核心调试;
- 禁止独立下载固件,下载逻辑置空,由主实例统一烧录;
- 开放 Automation Socket 端口,供主实例通过 Python 远程控制;
- 对应从核心,
Sub.jdebug工程文件。
基础约束
- 每个核心必须配套独立
.jdebug工程脚本,区分主/从配置; - 手动多实例操作繁琐:全部核心运行/暂停需逐个点击 Resume/Break;
- 自动化方案:Ozone 内置脚本 + TCP Socket 自动化接口 + Python 中转脚本,实现一键同步控制、跨核心断点联动。
工程配置分步详解(Traveo II CYT4BF 双核示例)
底层依赖:J-Link 专用脚本
多核芯片调试底层硬件时序、核心唤醒逻辑需专用处理:
- 各核心配套独立 J-Link Script 文件,存放于
J-LinkScriptFiles目录; - 在
.jdebug工程配置中绑定对应脚本,完成多核底层通道初始化。
主工程 Main.jdebug(M7_0 主核心)
- 基础配置:指定芯片型号、加载主核心 ELF;
- 重写
TargetDownload()函数:- 实现双核心 ELF 统一下载,依次烧录 M7_0、M7_1 固件;
- 承担芯片复位、调试通道初始化等全局操作;
- 自定义工具栏:封装主机侧多核同步功能按钮,绑定内置脚本;
- 内置调用逻辑:通过 Ozone 外部程序接口唤起 Python 控制脚本。
子工程 Sub.jdebug(M7_1 从核心)
- 基础配置:同芯片型号、加载从核心 ELF;
- 重写
TargetDownload()函数:空实现;- 屏蔽子实例默认下载逻辑,避免重复烧录、内存冲突;
- 开启 Automation Socket,分配独立 TCP 端口,供 Python 脚本远程连接。
主机侧多核同步功能(自定义工具栏一键操作)
主实例提供 6 项封装功能,全部基于「本地操作 + Python Socket 远程下发指令」实现跨实例同步:
- Launch Ozone for Sub
- 自动启动从核心 Ozone 子实例,加载 Sub.jdebug;
- 预分配并指定子实例 Automation 通信端口。
- Run all(全部核心运行)
- 本地执行
Target.Resume()启动主核心; - 调用 Python 脚本向子实例 Socket 发送
Target.Resume(),同步启动从核心。
- 本地执行
- Break all(全部核心暂停)
- 本地
Target.Break()停主核心;Python 远程下发暂停指令停从核心。
- 本地
- Run Sub(仅运行从核心)
- 仅通过 Python 远程指令操作子实例,主核心保持原有状态。
- Break Sub(仅暂停从核心)
- 远程下发暂停指令锁定从核心,不影响主核心运行。
- Exit Sub
- 关闭从核心调试会话、退出子 Ozone 实例。
跨核心断点联动(关键调试特性)
可实现一个核心触发断点,自动暂停全部核心:
- 在断点绑定用户回调函数;
- 回调中调用 Python 脚本,向另一核心实例 Socket 发送
Break指令; - 双向支持:主核心断点停从核、从核心断点停主核(仅切换脚本目标端口)。
Python 自动化中转脚本原理
脚本作用
轻量化 TCP 客户端,作为主 Ozone 与子 Ozone Automation Socket 的通信桥梁:
- Ozone 内置脚本无法直接跨进程通信,通过 Python 转发调试命令;
- 接收主实例传入参数,建立 Socket 连接并下发指令,回显 Ozone 控制台输出。
入参说明
| 参数 | 作用 |
|---|---|
| –port | 目标 Ozone 实例 Automation 端口(子实例自定义端口/主实例默认端口) |
| –cmd | 下发至远端实例的 Ozone 调试命令(Target.Resume / Target.Break 等) |
| –timeout | Socket 响应等待超时时间 |
数据流转流程
主实例内置脚本 → 启动 Python 脚本(传入端口+指令)→ Python 创建 TCP Socket → 连接目标 Ozone Automation 端口 → 下发调试命令 → 远端 Ozone 执行指令 → 执行回显输出回传给主实例控制台。
说明:该 Python 脚本仅作最简示例,用户可基于 Socket 扩展更复杂自动化流程(批量调试、日志采集、自动化测试)。
完整使用流程(实操步骤)
- 下载示例包 OzoneMultiCoreSampleTraveo.zip 并解压;
- 打开 Ozone,加载主工程
Main.jdebug; - 硬件连接 J-Link 至 Traveo II 开发板,建立调试连接;
- 主工程执行固件下载:自动完成 M7_0、M7_1 双核心烧录;
- 点击工具栏「Launch Ozone for Sub」自动拉起从核心调试窗口;
- 通过同步按钮实现全核/单核运行、暂停;
- 配置断点回调,实现一核停、全核同步暂停;
- 调试结束点击「Exit Sub」关闭从实例,退出调试会话。
核心优势总结
- 隔离调试:各核心独立 Ozone 窗口,寄存器、堆栈、源码视图互不干扰,单核心问题定位清晰;
- 统一烧录:主实例一次性下载全部核心固件,避免多窗口重复操作;
- 一键同步控制:自定义工具栏替代手动逐个操作,大幅提升多核调试效率;
- 断点全局联动:单核心异常自动冻结其余核心,完整保留多核现场;
- 高度可扩展:Automation Socket + Python 可拓展自动化测试、持续集成调试流程;
- 通用适配:方案不局限 Traveo II,可移植至所有 Cortex-M 多核 MCU(STM32H7、XMC7000 等)。
评论