当前位置:   article > 正文

rust开发环境_Rust 嵌入式开发环境搭建指南 (二):日常除虫

openocd m7内核 cfg文件教程

e75cb07a9cd10c9ba3c049def80058b7.png

上一篇文章我们成功跑起了第一个由 Rust 驱动的 Blinky,可以说已经一只脚踏入嵌入式开发的大门了。但是读者如果跟着步骤实践会发现,从编译到烧录运行,整个流程的命令行存在大段的参数,而且GDB 的启动指令重复枯燥。因此,指南第二章将介绍一些技巧来简化整个流程,然后实践一些在嵌入式系统中的调试方法。

Cargo

首先我们来回顾下编译 Rust 源码的命令:

> cargo build --target thumbv7m-none-eabi

这里的编译目标可以换用 .cargo/config 来指定。在项目目录新建文件夹 .cargo 并新建文件 config, 写入:

  1. [build]
  2. target = "thumbv7m-none-eabi"

之前我们使用 rustup 添加的几个目标平台其实是对应了几个不同的 Cortex 指令集,它们的对应关系是:

  1. Target | Architecture
  2. ------------------------------------------------------------
  3. thumbv6m-none-eabi | Cortex-M0 and Cortex-M0+
  4. thumbv7m-none-eabi | Cortex-M3
  5. thumbv7em-none-eabi | Cortex-M4 and Cortex-M7 (no FPU)
  6. thumbv7em-none-eabihf | Cortex-M4F and Cortex-M7F (with FPU)

STM32F103 的架构为 Cortex-M3,所以这里我们指定的是 thumbv7m-none-eabi

另外,如果不指定链接器,rustc 会使用默认的 LLD 进行链接,然而 LLD 并不能完全兼容嵌入式指令集,因此编译的可执行文件会丢失调试符号。为了之后能够使用 GDB 进行调试,我们这里将链接器指定为 gcc,修改 .cargo/config

  1. [build]
  2. target = "thumbv7m-none-eabi"
  3. [target.thumbv7m-none-eabi]
  4. rustflags = [
  5. "-C", "linker=arm-none-eabi-gcc",
  6. "-C", "link-arg=-Wl,-Tlink.x",
  7. "-C", "link-arg=-nostartfiles",
  8. ]

现在就可以直接使用 cargo build 指令了:

  1. > cargo build
  2. Compiling blinky v0.1.0
  3. Finished dev [unoptimized + debuginfo]

Openocd

上一章启动 openocd 的命令:

> openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

为了简化,我们在项目目录里新建文件 openocd.cfg,写入:

  1. source [find interface/stlink-v2.cfg]
  2. source [find target/stm32f1x.cfg]

之后要在这个项目目录里启动 openocd,只需要简单地:

  1. > openocd
  2. 64-bits Open On-Chip Debugger 0.10.0-dev-00289-g5eb5e34 (2016-09-03-09:40)
  3. Licensed under GNU GPL v2
  4. ...
  5. Info : stm32f1x.cpu: hardware
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号