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.bin
和 boot.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
下载完成解压后,将工具链的本地路径赋值给环境变量
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)