Rust+RV32M1:开发环境设置

为 VEGA-Lite 织女星 或 VEGAboard 开发板准备 Rust 语言开发环境。

本文使用 Windows 10 (64位) 1903 版本,多数过程也可以在 macOS 和 Linux 环境下套用。

I. 安装工具链

准备

需要 OpenISA(中国) 站点的 下载页面 提供的以下软件包:

Toolchain_Windows.zip
sha256: d7560e1fa9bdfa2aadf64caa9f9eacf5f6157761af07f285663f026b4c8de408

不需要 ARM 或 RISC-V 的 SDK 。

安装

工具链包含两个压缩包,按以下结构解压到 C:\Vega\Toolchain (或任意)目录:

C:\Vega
└─Toolchain
    ├─openocd
    │  ├─bin
    │  └─drivers
    └─riscv32-unknown-elf-gcc
        ├─bin
        ├─include
        ├─lib
        ├─libexec
        ├─riscv32-unknown-elf
        └─share

II. 准备硬件调试器

必须使用一种硬件调试器开发 RV32M1 的 RISC-V 核心,可以选择:

  • 外部 J-Link 调试器(VEGA-Lite 织女星和 VEGAboard 均可)
  • 板载 FreeLink 调试器(仅适用于 VEGA-Lite 织女星)

使用 VEGA-Lite 织女星的板载 FreeLink

请参考《怎样才能用板载调试器来调试织女星开发板的RISC-V核》《织女星开发板调试器升级为Jlink固件》两篇文章的指导。

注意这里需要跳线连接 J17 与 J8/J9/J10/J12 的若干引脚。一般来说需要:

  • 准备一块 JTAG 转接板,必须支持 1.27mm 10P 转 2.54mm (淘宝很多)
  • 使用 1.27mm 10P 排线将 J17 连接到转接板
  • 再小心地使用 2.54mm 杜邦线,按照连接关系连接到开发板

这样做繁琐易错,并且反复插拔很不方便。所以我设计了一个转接小板,用于扣在 J8/J9/J10/J12 之上,将其整体转换为一个 1.27mm 10P 的接口。这样就可以仅用一条排线与 J17 进行方便的连接。效果如图:

这个转接板在 GitHub 开源,请访问 shamiao/vega-lite_riscv_jtag_conn_board 项目

使用外部的 J-Link 调试器

需要使用 J-Link V9 或以上版本的硬件。只需要执行《织女星开发板调试器升级为Jlink固件》 中“升级Jlink驱动”一节,替换为 WinUSB 驱动即可。

注意可能需要转接板来连接 J-Link 和开发板的调试接口。

J-Link V10 或以上版本虽然通过官方工具链支持 RISC-V 架构调试,但似乎尚未支持 RV32M1 微控制器(截至文章编写时)。所以目前必须使用 WinUSB 驱动配合 OpenOCD 开源工具链。也正因为如此,我们不必安装 J-Link 的官方驱动程序。

III. 安装 Rust 语言环境

安装 Rust 工具链

需要按照 Rust 官方推荐的方案,使用 rustup 进行安装。请参见 Rust 官网《安装》页面的指导。

配置交叉编译

Rust 工具链是高度可配置的,增加一个交叉编译目标不需要额外安装一整套工具链(像 GCC 一样)。使用以下命令为 Rust 工具链添加适用于 RV32M1 的交叉编译目标:

rustup target add riscv32imc-unknown-none-elf

IV. 检查

开发板连接

运行以下命令:

C:\Vega\Toolchain\openocd\bin\openocd.exe -f C:\Vega\rv32m1_sdk_riscv\boards\rv32m1_vega\rv32m1_ri5cy.cfg

OpenOCD 给出以下输出后保持运行,代表调试器与开发板的连接良好:

Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections

Rust工具链

运行以下命令:

rustup show

会得到类似如下的输出:

Default host: x86_64-pc-windows-msvc
rustup home:  C:\Users\alice\.rustup

installed targets for active toolchain
--------------------------------------
riscv32imc-unknown-none-elf
x86_64-pc-windows-msvc

active toolchain
----------------
stable-x86_64-pc-windows-msvc (default)
rustc 1.38.0 (625451e37 2019-09-23)

请检查 installed targets 中确实包含 riscv32imc-unknown-none-elf 目标。

注:Rust 每 6 周固定更新一个版本,但新版的向下兼容性一直高度完善。推荐简单的使用最新版本,无需和本系列文章编写时采用的版本一致。

发表评论

电子邮件地址不会被公开。 必填项已用*标注