会话与目标描述
02、03、04 三部分是「怎么和一种架构的调试硬件说话」,这一部分往上走一层:调用方拿到的是什么句柄,芯片的知识从哪里来。
- Session、Core 与 MemoryInterface:
Session持有目标描述、调试接口和每个核的状态;Core每次session.core(i)新建,ARM 上新建一次是 8 次 DP / AP 访问;CoreInterface的方法表;Core靠 blanket impl 得到MemoryInterface;CoreDump也实现MemoryInterface,读越界报错、写会 panic。 - 目标描述:YAML 到注册表:
ChipFamily/Chip/ 内存区 / flash 算法的结构;build.rs把 242 个 YAML 编成 bincode,首次访问时解码;芯片名的x通配;PROBE_RS_TARGETS_DIR是编译期变量,运行时加目标走--chip-description-path;probe-rs-meta把芯片名写进固件。 - target-gen 与 CMSIS-Pack:从 pdsc 抽器件、核、内存;flash 算法 ELF 里的
FlashDevice结构、PrgCode/PrgData段和入口符号;elf子命令给自写的算法。
flowchart TB pack["CMSIS-Pack"] -->|"target-gen"| yaml["targets/*.yaml"] yaml -->|"build.rs"| reg["Registry"] reg -->|"--chip"| target["Target"] target --> sess["Session::new"] sess -->|"core(i)"| core["Core"] core --> mi["MemoryInterface"] dump["CoreDump"] --> mi mi --> up["烧录、RTT、栈展开"]
本部分的实验:chip info 和 chip list;一个只依赖 probe-rs 的程序读内置注册表、试各种芯片名、运行时加一个自写的 YAML;在本卷的模拟 SWD 目标上做一次 CoreDump::dump_core,存盘、读回、越界、写入。target-gen 只读源码,不联网下载 pack。
💬 关联讨论
发起讨论加载中...