4 个版本 (重大更改)
0.7.0 | 2020 年 11 月 19 日 |
---|---|
0.6.0 | 2020 年 3 月 30 日 |
0.5.0 | 2020 年 3 月 3 日 |
0.4.0 | 2020 年 1 月 15 日 |
#10 in #debug-probes
17KB
331 行
probe-rs
一个用 Rust 编写的现代嵌入式调试工具包
此库的目的是提供一套工具来与各种嵌入式 MCU 和调试探针交互。
类似的项目,如 OpenOCD、PyOCD、Segger Toolset、ST Tooling 等。它们都实现了 GDB 协议,并在其上实现自己的协议,以使 GDB 能够与调试探针通信。只有 Segger 提供了一个封闭源代码的 DLL,你可以用它来与 JLink 通信。
此项目消除了 GDB 层,并提供了一个直接访问调试探针的接口,从而使得其他软件能够使用其调试功能。
此项目的最终目标是拥有一个完整的库工具集,以便其他工具能够与嵌入式目标通信。
功能
截至版本 0.10.0,此库可以
- 连接到 DAPLink、STLink 或 JLink
- 通过 SWD 或 JTAG 与 ARM 和 Risc-V 内核通信
- 读取和写入目标任意内存
- 停止、运行、单步、断点和更多内核功能
- 使用标准的 CMSIS-Pack 闪存算法将 ELF、BIN 和 IHEX 二进制文件下载到 ARM 内核
- 提供关于目标状态(堆栈跟踪、堆栈帧等)的调试信息
要查看添加了哪些新功能,请查看 变更日志
支持
如果你认为 probe-rs 让你的嵌入式之旅更加愉快,甚至为你赚了钱,请考虑在 Github Sponsors 上支持此项目,以获得更好的支持和更多功能。
下载文件
cargo-flash
工具可以用作 cargo 子命令,将编译好的 Rust 程序下载到目标设备。它也可以用于下载可能来自 C/C++ 编译器的任意 ELF 文件。更多信息请查看 cargo-flash。
使用 probe-rs 进行更好的调试
如果您正在寻找更丰富的调试体验,请访问 cargo-embed,它提供了对 GDB、RTT 和配置文件的支持。
VSCode
我们正在实现 Microsoft DAP。这使得通过 probe-rs 进行嵌入式调试在现代支持该标准的代码编辑器中成为可能,例如 VSCode。
使用示例
停止连接的芯片
use probe_rs::Probe;
fn main() -> Result<(), probe_rs::Error> {
// Get a list of all available debug probes.
let probes = Probe::list_all();
// Use the first probe found.
let probe = probes[0].open()?;
// Attach to a chip.
let mut session = probe.attach("nrf52")?;
// Select a core.
let mut core = session.core(0)?;
// Halt the attached core.
core.halt(std::time::Duration::from_millis(300))?;
Ok(())
}
从 RAM 中读取
use probe_rs::{MemoryInterface, Session};
fn main() -> Result<(), probe_rs::Error> {
// Attach to a chip.
let mut session = Session::auto_attach("nrf52")?;
// Select a core.
let mut core = session.core(0)?;
// Read a block of 50 32 bit words.
let mut buff = [0u32; 50];
core.read_32(0x2000_0000, &mut buff)?;
// Read a single 32 bit word.
let word = core.read_word_32(0x2000_0000)?;
// Writing is just as simple.
let buff = [0u32; 50];
core.write_32(0x2000_0000, &buff)?;
// of course we can also write 8bit words.
let buff = [0u8; 50];
core.write_8(0x2000_0000, &buff)?;
Ok(())
}
常见问题解答
我需要帮助!
不要犹豫,提交问题,在 Matrix 上提问,或通过电子邮件联系 @Yatekii。
我能帮什么忙?
请查看问题或如果您认为需要,可以打开一个问题。
欢迎任何贡献!
还可以查看 CONTRIBUTING.md。
我们的公司需要功能 X,并愿意为其开发付费
请联系 @Yatekii
构建
构建需要 Rust 和 Cargo,可以使用 rustup 安装。probe-rs 还依赖于 libusb 和 libftdi。在 Linux 上,您可以使用包管理器安装它们
# Ubuntu
> sudo apt install -y libusb-dev libusb-1.0 libftdi1-dev
在 Windows 上,您可以使用 vcpkg
# dynamic linking 64-bit
> vcpkg install libftdi1:x64-windows libusb:x64-windows
> set VCPKGRS_DYNAMIC=1
# static linking 64-bit
> vcpkg install libftdi1:x64-windows-static-md libusb:x64-windows-static-md
有关使用 rust 配置 vcpkg 的更多信息,请参阅 vcpkg crate 文档。
添加目标
目标文件使用 probe-rs/target-gen 从这里提供的 CMSIS 打包生成。然后,生成的文件放置在 probe-rs/targets
中,以便包含在 probe-rs 项目中。
赞助商
致谢
在这个库的早期阶段,我们从 pyOCD 代码中受益匪浅,了解了闪存的工作原理。它始终是一个良好的参考,用于交叉检查 ARM 特定事物的操作方式。因此,向 pyOCD 背后的团队表示衷心的感谢!
许可证
许可协议如下
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT),任选其一。
贡献
除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献,根据 Apache-2.0 许可证的定义,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~2.5MB
~46K SLoC