pyocd-pack-inject 一键注入pyocd,从此告别 --pack
pyocd-pack-inject
pyocd 装不上本地 .pack?pyocd-pack-inject 一键注入全局缓存,从此告别 --pack
前言
从keil迁移到其他IDE时,遇到的最常见问题就是:
怎么烧录固件?
早期做法简单粗暴,直接使用keil进行固件替换烧录。
怎么调试固件?
换上jlink 开始使用Jflash+OZone
其他调试器怎么办?
当然是放转转
了解到openocd,pyocd等开源调试工具链可以接入
从此烧录就变成了
pyocd flash -t stm32f103c8t6 demo.hex
很方便
然后换了个国产芯片,卒
Running `pyocd flash -t AT32F425C8T7 --format elf target\thumbv7em-none-eabi\debug\at32f425-hello`
0000832 C Target type at32f425c8t7 not recognized. Use 'pyocd list --targets' to see currently available target types
提示可以联网下载
pyocd pack find af32f425
0000817 W No matching devices. Please make sure the pack index is up to date. [pack_cmd]
折腾了好久,提示没有这个设备的包。。。
然后就知道可以使用本地包
pyocd flash --pack at32f425.pack -t _AT32F425C8T7 demo.hex
总算搞定了,虽然以后每次都要把pack包跟着固件一起分发
就这样拖家带口好几年。。。。
然后实在是受不了了,作为搞软件的,怎么能搞不定这种事
开始尝试copy pack包到官方目录,修改文件等一大堆操作
学艺不精,卒
后面AI如日中天,于是让大肥鱼Deepseek去逆向+工程设计
然后就objk了(借助伟大的Deepseek神力,我就是资深工程师)
pyocd-pack-inject
pyocd 装不上本地 .pack?pyocd-pack-inject 一键注入全局缓存,从此告别 --pack
项目链接:
https://github.com/USTHzhanglu/pyocd-pack-inject
界面:

功能:
- 拖拽安装pack包
- 查看pack包支持的target
- 支持GUI和CLI
效果
pyocd list --target | grep -i at32f4
-at32f425c6t7 ArteryTek -AT32F425C6T7 AT32F42x Series, AT32F425 pack
-at32f425c6u7 ArteryTek -AT32F425C6U7 AT32F42x Series, AT32F425 pack
-at32f425c8t7 ArteryTek -AT32F425C8T7 AT32F42x Series, AT32F425 pack
-at32f425c8u7 ArteryTek -AT32F425C8U7 AT32F42x Series, AT32F425 pack
-at32f425f6p7 ArteryTek -AT32F425F6P7 AT32F42x Series, AT32F425 pack
原理
由AI总结:
pyOCD 判定一个 pack "已安装"需同时满足:
index.json里有该 pack 的记录(用于枚举);data_path/<vendor>/<pack>/<version>.pack文件存在。
data_path 是 cmsis-pack-manager 的用户数据目录:
| 平台 | 路径 |
|---|---|
| Windows | %LOCALAPPDATA%\cmsis-pack-manager |
| Linux | ~/.local/share/cmsis-pack-manager |
| macOS | ~/Library/Application Support/cmsis-pack-manager |
对每个 .pack 手动完成两步注册(不依赖在线索引):
复制文件到上述目录 + 在 index.json merge 一条 from_pack 记录。
尾言
AI时代,功能开发的难点已经从怎么做变成了做什么。最近翻新之前做的项目,之前十天半个月搞定的功能,现在十几分钟就能复刻个一模一样的东西。反而是去思考要做什么功能占据了大部分时间。
以前是能不做的需求就不做,现在是能加的功能就加上~~

浙公网安备 33010602011771号