Loading...
Loading...
OpenOCD 下载与调试工具,用于探针探测、固件烧录、Flash 擦除、GDB Server 启动、目标复位控制、 Telnet 在线调试(halt/resume/step/寄存器/内存/断点)、GDB 源码级调试,以及 Semihosting/ITM 输出捕获和底层查询。 当用户提到 OpenOCD、ST-Link、CMSIS-DAP、DAPLink、FTDI、烧录固件、擦除 Flash、GDB Server、 reset、interface/target/board 配置、openocd.cfg、在线调试、单步、断点、寄存器查看、 内存读写、semihosting 时自动触发,也兼容 /openocd 显式调用。 即使用户只是说"烧录一下"、"启动 GDB Server"、"擦除芯片"、"看看寄存器"、"单步调试" 或"抓一下 semihosting",只要上下文涉及 OpenOCD 支持的开源调试器就应触发此 skill。
npx skill4agent add zhinkgit/embeddedskills openocdconfig.jsonexe{
"exe": "openocd",
"scripts_dir": "",
"gdb_port": 3333,
"telnet_port": 4444,
"gdb_exe": "",
"operation_mode": 1
}exescripts_dirgdb_porttelnet_portgdb_exeoperation_mode123.embeddedskills/config.json{
"openocd": {
"board": "",
"interface": "interface/stlink.cfg",
"target": "target/stm32f4x.cfg",
"adapter_speed": "4000",
"transport": "swd",
"tpiu_name": "stm32f4x.tpiu",
"traceclk": "168000000",
"pin_freq": "2000000"
}
}boardboard/stm32f4discovery.cfginterfaceinterface/stlink.cfgtargettarget/stm32f4x.cfgadapter_speedtransporttpiu_nametraceclkpin_freq| 子命令 | 用途 | 风险 |
|---|---|---|
| 验证 board 或 interface+target 组合,探测目标连通性 | 低 |
| 烧录固件(.elf / .hex / .bin) | 高 |
| 擦除目标 Flash | 高 |
| 复位目标芯片 | 高 |
| 查询底层 target / flash / adapter 信息 | 低 |
| 执行受控 OpenOCD 原生命令 | 高 |
| 子命令 | 用途 | 风险 |
|---|---|---|
| 启动 GDB Server,保持运行等待 GDB 连接 | 低 |
| 快捷获取调用栈和局部变量 | 低 |
| one-shot 执行流控制 | 低 |
| one-shot 源码级诊断 | 低 |
| 子命令 | 用途 | 风险 |
|---|---|---|
| 暂停 CPU,返回 PC/xPSR | 低 |
| 恢复 CPU 运行 | 低 |
| 单步执行(支持 | 低 |
| 查看所有 CPU 寄存器 | 低 |
| 读内存( | 低 |
| 写内存( | 高 |
| 设置硬件断点 | 低 |
| 移除断点 | 低 |
| 运行到指定地址(设置断点 + resume + 等待命中) | 低 |
| 子命令 | 用途 | 风险 |
|---|---|---|
| 启用 ARM Semihosting 并捕获目标 printf 输出 | 低 |
| 基于 TPIU/ITM 读取 SWO/ITM 观测数据 | 低 |
skill/config.jsonexe.embeddedskills/config.json.embeddedskills/state.jsonboard-f board/*.cfg-f interface/*.cfg -f target/*.cfgboardinterfacetargetoperation_modeInfoError.embeddedskills/config.json# 探测连通性(使用 board)
python <skill-dir>/scripts/openocd_run.py probe --board board/stm32f4discovery.cfg --json
# 探测连通性(使用 interface + target)
python <skill-dir>/scripts/openocd_run.py probe --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 烧录 ELF 固件
python <skill-dir>/scripts/openocd_run.py flash --file build/app.elf --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 烧录 BIN 固件(必须提供地址)
python <skill-dir>/scripts/openocd_run.py flash --file build/app.bin --address 0x08000000 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 擦除 Flash(自动选择 mass/sector)
python <skill-dir>/scripts/openocd_run.py erase --mode auto --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 复位目标
python <skill-dir>/scripts/openocd_run.py reset --mode halt --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 查询 target 列表
python <skill-dir>/scripts/openocd_run.py targets --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 查询 flash bank
python <skill-dir>/scripts/openocd_run.py flash-banks --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 执行受控 raw 命令
python <skill-dir>/scripts/openocd_run.py raw --interface interface/stlink.cfg --target target/stm32f4x.cfg --command "init" "targets" --json--board <cfg>--search <目录>--adapter-speed <kHz>--transport <swd|jtag>--exe <openocd路径># 启动 GDB Server(保持运行)
python <skill-dir>/scripts/openocd_gdb.py server --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 无子命令时默认 server(向后兼容)
python <skill-dir>/scripts/openocd_gdb.py --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 执行自定义 GDB 命令序列
python <skill-dir>/scripts/openocd_gdb.py run --gdb-exe arm-none-eabi-gdb --elf build/app.elf --interface interface/stlink.cfg --target target/stm32f4x.cfg --commands "break main" "continue" "backtrace" "info locals" --json
# 快捷获取调用栈
python <skill-dir>/scripts/openocd_gdb.py backtrace --gdb-exe arm-none-eabi-gdb --elf build/app.elf --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 快捷查看局部变量
python <skill-dir>/scripts/openocd_gdb.py locals --gdb-exe arm-none-eabi-gdb --elf build/app.elf --interface interface/stlink.cfg --target target/stm32f4x.cfg --json--gdb-port--telnet-port--search--adapter-speed--transport--board# 暂停 CPU
python <skill-dir>/scripts/openocd_telnet.py halt --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 恢复运行
python <skill-dir>/scripts/openocd_telnet.py resume --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 单步 5 次
python <skill-dir>/scripts/openocd_telnet.py step --count 5 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 查看寄存器
python <skill-dir>/scripts/openocd_telnet.py reg --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 读内存(32bit x 16 个字)
python <skill-dir>/scripts/openocd_telnet.py read-mem --address 0x20000000 --length 16 --width 32 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 写内存
python <skill-dir>/scripts/openocd_telnet.py write-mem --address 0x20000000 --value 0xDEADBEEF --width 32 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 设置硬件断点
python <skill-dir>/scripts/openocd_telnet.py bp --address 0x08001234 --bp-length 2 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 移除断点
python <skill-dir>/scripts/openocd_telnet.py rbp --address 0x08001234 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 运行到指定地址(设置断点 + resume + 等待)
python <skill-dir>/scripts/openocd_telnet.py run-to --address 0x08001234 --timeout-ms 3000 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json--board--search--adapter-speed--transport--gdb-port--telnet-port# 捕获 semihosting 输出(持续到 Ctrl+C)
python <skill-dir>/scripts/openocd_semihosting.py --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 捕获 30 秒
python <skill-dir>/scripts/openocd_semihosting.py --timeout 30 --interface interface/stlink.cfg --target target/stm32f4x.cfg --json# 使用配置中的 TPIU 参数持续读取 ITM
python <skill-dir>/scripts/openocd_itm.py --interface interface/stlink.cfg --target target/stm32f4x.cfg --json
# 指定 TPIU 名称和端口
python <skill-dir>/scripts/openocd_itm.py \
--interface interface/stlink.cfg --target target/stm32f4x.cfg \
--tpiu-name stm32f4x.tpiu --traceclk 168000000 --pin-freq 2000000 \
--itm-port 0 --itm-port 1 --jsonopenocd_itm.pyhalt -> reg -> read-mem 0x20000000 -> step -> resumerun-to 0x08001234 -> reg -> read-mem -> resumegdb run --elf app.elf --commands "break main" "continue" "backtrace" "info locals"semihostingprintfstatusactionsummarydetailscontextartifactsmetricsstatenext_actionstimingsourcechannel_typestream_type{
"status": "ok",
"action": "halt",
"summary": "已暂停,PC=0x08000298",
"details": {
"pc": "0x08000298",
"xpsr": "0x01000000",
"msp": "0x20020000",
"halted": true
}
}{
"status": "ok",
"action": "backtrace",
"summary": "GDB backtrace 执行成功",
"details": {
"gdb_port": 3333,
"frames": [
{"frame": 0, "function": "main", "location": "src/main.c:42"}
]
}
}{
"status": "error",
"action": "halt",
"error": {
"code": "server_failed",
"message": "OpenOCD 启动失败或超时"
}
}boardinterfacetargetboard.embeddedskills/config.jsonskill/config.json.embeddedskills/state.json.binerase --mode autoreset halterase --mode massmass_erase_unsupportedgdb-servergdb_exestate.jsonlast_flashlast_debuglast_observestate.jsonreferences/common_targets.md