在Arch Linux下搭建GD32VF103开发环境

在Arch Linux下搭建GD32VF103开发环境
目录

本文简单介绍在Arch Linux下搭建GD32VF103开发环境的过程, 基于RV-STAR开发板。

相关介绍

GD32VF103VBT6

基于芯来科技Bumblebee内核(RV32IMAC)的32位通用微控制器。

RV-STAR开发板

基于GD32VF103 MCU的评估开发板,搭载板载调试器。

OpenOCD

一个开源工具,主要用于嵌入式系统的调试和编程,能够配合 调试器(如ST-link、J-Link等)与开发板上的处理器,提供控制 芯片的方法,比如:

  • 烧录Flash
  • 设置/读取寄存器
  • 单步执行、断点调试
  • 查看变量与内存
  • 与GDB 协同调试

配置工具链

1. GCC

  1. 下载

从芯来科技文档与工具页面 下载最新的Linux版Nuclei RISC-V Embedded Toolchain(Baremetal/RTOS + Newlibc) 工具,本文使用2025.02版本。

下载完成后,使用tar - xvjf {下载的文件}解压。

  1. 配置环境变量

为了每次使用工具链提供的程序时不用一直输入很长的路径,可以 把gcc/bin所在的路径加入PATH环境变量:

export PATH=$PATH:{bin所在路径}

2. OpenOCD

  1. 下载

从芯来科技文档与工具页面 下载Nuclei OpenOCD,然后使用tar - xvzf {下载的文件}解压。

  1. 配置环境变量

同上一节配置gcc工具链。

  1. 配置文件

以下是我使用的配置文件,命名为openocd_gd32vf103.cfg

adapter_khz 10000
reset_config srst_only
adapter_nsrst_assert_width 100

interface ftdi
ftdi_vid_pid 0x0403 0x6010

ftdi_layout_init 0x0008 0x001b
ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020
ftdi_layout_signal TCK -data 0x0001
ftdi_layout_signal TDI -data 0x0002
ftdi_layout_signal TDO -input 0x0004
ftdi_layout_signal TMS -data 0x0008
ftdi_layout_signal JTAG_SEL -data 0x0100 -oe 0x0100
transport select jtag

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1000563d
jtag newtap $_CHIPNAME bs -irlen 5 -expected-id 0x790007a3

# Work-area is a space in RAM used for flash programming
if { [info exists WORKAREASIZE] } {
   set _WORKAREASIZE $WORKAREASIZE
} else {
   set _WORKAREASIZE 0x5000
}

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0

set _FLASHNAME $_CHIPNAME.flash

flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME

riscv set_reset_timeout_sec 1

init

halt

测试

可以通过GD32VF103固件库提供的模板工程来测试配置完成的 开发环境。

首先,获取GD32VF103固件库:

git clone https://github.com/riscv-mcu/GD32VF103_Firmware_Library.git

进入GD32VF103_Firmware_Library/Template路径下,把上一节 的OpenOCD配置文件openocd_gd32vf103.cfg拷贝到该路径下, Makefile文件需要针对实际使用的工具链修改,比如以下

PREFIX = riscv-nuclei-elf-
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy

其中的riscv-nuclei-elf-要根据我们实际使用的GCC工具链 修改为riscv64-unknown-elf-

然后在Makefile文件所在的路径下执行make进行构建。

构建如果无错误,在build路径下可以看到生成了可以下载 到开发板的二进制.bin.elf等文件。

执行openocd -f openocd_gd32vf103.cfg -c "program build/{生成的.elf文件} verify reset exit" 把程序下载到开发板。

可能出现的问题和解决方式

1. 下载程序时报错,提示未找到调试器

  1. 确认调试器已连接,然后执行lsusb(由包usbutils提供), 如果无误,应该可以看到类似以下的输出:
Bus 001 Device 005: ID 0403:6010 Future Technology Devices
International, Ltd FT2232C/D/H Dual UART/FIFO IC
  1. 设置udev规制,新建一个udev规则文件,如下:
sudo vim /etc/udev/rules.d/99-ftdi.rules
  1. 添加如下内容:
SUBSYSTEM=="usb", ATTR{idVendor}=="0403",
ATTR{idProduct}=="6010", MODE="664", GROUP="uucp"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403",
ATTRS{idProduct}=="6010", MODE="664", GROUP="uucp"
  1. 应用规则:
sudo udevadm control --reload
sudo udevadm trigger
  1. 把当前用户添加到uucp组,添加用户到组之后需要 重启或重新登陆当前会话:
sudo gpasswd -a {$用户名} uucp 
  1. 重拔插调试器。

2. 启动riscv64-unknown-elf-gdb时报错,找不到库文件libtinfo.so.5

芯来科技提供的gdb需要旧版的ncurses支持,可以通过安装兼容库解决, 从AUR安装ncurses5-compat-libs这个软件包。

参考

  1. GD32VF103 MCU
  2. RV-STAR开发板简介
  3. 芯来文档与工具下载页面
  4. AUR ncurses5-compat-libs包页面