Rust in Everything
基于 probe-rs 0.32.0

会话与目标描述

02、03、04 三部分是「怎么和一种架构的调试硬件说话」,这一部分往上走一层:调用方拿到的是什么句柄,芯片的知识从哪里来。

  1. Session、Core 与 MemoryInterface:Session 持有目标描述、调试接口和每个核的状态;Core 每次 session.core(i) 新建,ARM 上新建一次是 8 次 DP / AP 访问;CoreInterface 的方法表;Core 靠 blanket impl 得到 MemoryInterface;CoreDump 也实现 MemoryInterface,读越界报错、写会 panic。
  2. 目标描述:YAML 到注册表:ChipFamily / Chip / 内存区 / flash 算法的结构;build.rs 把 242 个 YAML 编成 bincode,首次访问时解码;芯片名的 x 通配;PROBE_RS_TARGETS_DIR 是编译期变量,运行时加目标走 --chip-description-path;probe-rs-meta 把芯片名写进固件。
  3. 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。

💬 关联讨论

发起讨论
加载中...