RT-Thread MilkV Duo256M BSP 上手使用

Milk-V Duo 256M 是 Duo 的升级版本,内存提升至 256M。采用 SG2002 计算系列芯片,计算能力提升至 1.0TOPS@INT8。它可以实现 RISC-V/ARM 架构之间的无缝切换,并支持双系统同时运行。

当前 Milk-V Duo 256M 大核 RISC-V/ARM、小核 RISC-V 均已支持运行 RT-Thread 标准版。

本文是关于RT-Thread MilkV Duo256M BSP 上手使用的详细介绍。使用代码为 RT-Thread 官方源码仓库 版本号为:a1b01ee86 (“bsp: cvitek: fix cv18xx_aarch64 mnt init blocking”)(该版本号实测可以正常编译及运行)开发环境为 Ubuntu20.04,需要配置好 RT-Thread 开发环境和 ENV 工具,参考:env/README.md at master · RT-Thread/env · GitHub

如果为其他版本的 RT-Thread 源码,使用以下命令进行更新源码和版本切换

#拉取RT-Thread最新源码
git pull https://github.com/RT-Thread/rt-thread.git master
#切换为制定版本
git reset --hard  a1b01ee86

RISC-V 大核运行 RT-Thread 标准版

使用 Milk-V Duo 256M 时,大核默认选中的是 RISC-V C906 核心。其 BSP 位于 rt-thread/bsp/cvitek/cv18xx_risc-v

首先需要安装以下依赖

sudo apt install -y scons libncurses5-dev device-tree-compiler

下载需要的工具链riscv64-unknown-elf-gcc 下载地址 https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1705395512373/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1-20240115.tar.gz

下载完成解压后,将工具链的本地路径赋值给环境变量

export RTT_CC_PREFIX=riscv64-unknown-elf-
export RTT_EXEC_PATH=/opt/toolchain/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin

在 rt-thread/bsp/cvitek/cv18xx_risc-v 路径下打开终端,执行以下命令进入 menuconfig 进行相应配置

scons --menuconfig

进入 Board Type 菜单选中 milkv-duo256m (默认选中),退出 menuconfig 并保存更改。接下来就可以执行以下命令进行编译了

scons

编译成功后,会在 bsp/cvitek/output 对应开发板型号目录下自动生成 boot.sd 文件

将 SD 卡分为 2 个分区,第 1 个分区用于存放 bin 文件,第 2 个分区用于作为数据存储分区,分区格式为 FAT32。将编译得到的 fip.binboot.sd 复制到 SD 卡第一个分区中。重新上电可以看到串口的输出信息。

大核输出信息使用的是 uart0 对应的物理引脚为 16(TX) 和 17(RX)

ARM 大核运行 RT-Thread 标准版

RISC-V 与 ARM 切换

Duo256M 的大核可以选择使用 RISC-V 或者 ARM,默认使用的是 RISC-V 核,可以通过短接物理引脚 35(Boot-Switch)和 GND 来切换到 ARM 核。

arm 大核的 bsp 位于 rt-thread/bsp/cvitek/cv18xx_aarch64

下载需要的工具链下载地址 https://sources.buildroot.net/toolchain-external-arm-aarch64/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

下载完成解压后,将工具链的本地路径赋值给环境变量

export RTT_CC=gcc
export RTT_EXEC_PATH="/opt/toolchain/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/bin"
export RTT_CC_PREFIX=aarch64-none-elf-
export PATH=$PATH:$RTT_EXEC_PATH

然后就可以进行编译了

scons

因为 ARM 大核 BSP 默认使用了设备树,所以需要使用打包了设备树的 boot.sd 加载,而不能使用 uboot 加载 rtthread.bin 的方式。因此具体使用烧录方式和 risc-v 大核的一样,直接将 bsp/cvitek/output 对应开发板型号目录下自动生成的 boot.sd 文件复制到 SD 卡的第一个分区即可。

ARM 大核输出信息使用的也是 uart0 ,对应的物理引脚为 16(TX) 和 17(RX)

RISC-V 小核运行 RT-Thread 标准版

小核和 risc-v 大核操作基本一致,需要注意的是,小核编译后对应的文件为 fip.bin, 输出信息使用的串口为 uart1 对应的物理引脚为 1(TX) 和 2(RX)

Ref: