RT-Thread BSP全面支持玄铁全系列RISC-V处理器。玄铁系列RISC-V处理器由阿里达摩院研发,涵盖面向MCU的E系列、面向实时应用的R系列以及面向MPU的C系列。以玄铁QEMU为平台,RT-Thread标准版已全面适配玄铁E、R、C系列内核,并在C906内核上支持RT-Smart微内核操作系统。本文将以E906运行RT-Thread和C906运行RT-Smart为例,详细介绍其应用场景与实现。
Xuantie BSP链接:
https://github.com/RT-Thread/rt-thread/tree/master/bsp/xuantie
目录
在E906上运行RT-Thread
配置cubemx在C906上运行RT-Smart
1
在E906上运行RT-Thread
1 简介
E906 是一款基于 RISC-V 指令集的高能效嵌入式处理器,是玄铁 RISC-V MCU 产品线中的最高性能处理器。 E906 的设计目标是,使用最低的面积和功耗成本,取得相对较高的性能指标。 E906 主要面向语音、高端 MCU、轻量级 AI、导航、 WiFi 等应用领域。
1.1 特点
E906 处理器体系结构的主要特点如下:
32 位 RISC 处理器;
支持 RISC-V RV32IMA[F][D]C[P] 指令集;
支持 RISC-V 32/16 位混编指令集;
32 个 32 位通用寄存器;
整型 5 级/浮点 7 级,单发射,顺序执行流水线;
可选配 BHT 和 BTB;
支持 RISC-V 机器模式和用户模式;
双周期硬件乘法器,基 4 硬件除法器;
可选配指令 cache,两路组相连结构, 2KiB-32KiB 可配置;
可选配数据 cache,两路组相连结构, 2KiB-32KiB 可配置;
兼容 RISC-V CLIC 中断标准,支持中断嵌套,外部中断源数量最高可配置 240 个;
兼容 RISC-V PMP 内存保护标准, 0/4/8/12/16 区域可配置;
支持 AHB-Lite 总线协议,支持三条总线:指令总线,数据总线和系统总线;
支持可配的性能监测单元;
支持玄铁扩展增强指令集
1.2 BSP支持情况
BSP链接:
https://github.com/RT-Thread/rt-thread/tree/master/bsp/xuantie
当前BSP支持下述内核:
E906 E906F E906FD E906P E906FP E906FDP
当前BSP默认设置的内核是E906FD,该架构支持[F] [D]扩展,可以通过menuconfig工具选择配置。
当使用其他同类型架构不同扩展时的内核时需修改rtconfig.py文件中的 MCPU 与 CPU 字段。
2 工具
编译器: https://www.xrvm.cn/community/download?id=4433353576298909696
模拟器: https://www.xrvm.cn/community/download?id=4397435198627713024
SDK:https://www.xrvm.cn/community/download?id=4397799570420076544
若上述链接中的编译器与模拟器不能使用,可使用SDK中的编译器与模拟器工具。
3 编译执行
在BSP根目录下启动env工具:
首次使用需运行menuconfig更新rtconfig.h配置,然后在当前目录执行scons -j12编译生成rtthread.elf可执行文件。
在BSP根目录下生成rtthread.elf可执行文件后,双击qemu.bat脚本即可启动QEMU模拟器。在Windows环境下首次运行该脚本时,会提示输入QEMU可执行文件的路径;后续若未更改QEMU路径,可直接按回车键跳过此步骤。
第二步需设置-cpu参数,默认值为e906fd。如需修改,请在:后输入目标内核型号,例如e906。
设置参数后,按回车键即可在QEMU上运行rtthread.elf可执行文件。
BSP根目录下包含objdump.bat脚本,双击运行该脚本可在根目录生成反汇编文件。
4调试方法
4.1 命令行调试
当前BSP支持通过命令行启动QEMU,或通过配置VSCode脚本利用其丰富插件实现图形化调试。有关QEMU的详细命令,请参考玄铁QEMU用户手册。以下为启动QEMU的命令,可在PowerShell或命令行中直接执行
注:需将QEMU路径导出至环境变量或使用绝对路径。
qemu-system-riscv32 -machine smartl -nographic -kernel rtthread.elf -cpu e906fd -gdb tcp::23333 -S
在PowerShell或命令行中输入并执行上述命令后,即可查看运行结果。
在新的PowerShell或命令行中输入并执行以下命令,即可查看运行结果。
注:需将GDB路径导出至环境变量或使用绝对路径。
riscv64-unknown-elf-gdb.exe rtthread.elf -ex "target remote localhost:23333"
若未设置断点,在命令行中执行 c 命令即可让程序全速运行,运行时的界面显示如下:
4.2 VSCode调试
以下为VSCode调试示例。调试需配置相关脚本,可参考玄铁QEMU用户手册或使用参考脚本进行配置。
2
在C906上运行RT-Smart
下文简要介绍在C906上运行RT-Smart系统的步骤,使用玄铁QEMU在C906上运行RT-Smart的快速上手指南已经上线文档中心,详细的系统启动流程与RT-Smart下的应用程序内容可在文档中心查看。
1 下载RT-Thread源码
RT-Smart与RT-Thread的源码位于同一个仓库,使用menuconfig工具配置选择RT-Smart或RT-Thread。
git clone https://github.com/RT-Thread/rt-thread.git
2 配置工具链
开发工具链可从Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2-20250410.tar.gz下载。下载完成后,将其解压到 /opt 目录,然后编辑 ~/.bashrc 文件,添加以下环境变量配置:
export RTT_CC="gcc"export RTT_EXEC_PATH="/opt/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2/bin/"export RTT_CC_PREFIX="riscv64-unknown-linux-musl-"export PATH="$RTT_EXEC_PATH:$PATH"
3 使能RT-Smart
首先进入RT-Thread Kernel配置选项:
开启RT-Thread Smart选项
4 使能 lwext4 软件包(不使用ext4文件系统可不选)
基于RT-Thread仓库的 bsp/xuantie/virt64/c906/ 构建内核镜像,最终生成rtthread.bin/rtthread.elf ,内核默认支持FAT,若需挂载 ext4 的文件系统,则可添加 lwext4 软件包,即使能PKG_USING_LWEXT4 ,不使用则可以不选。
RT-Thread online packages -> system packages -> lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers
5 Scons编译
6 制作根文件系统
拉取userapps仓库: userapps仓库包含了一些应用程序和配置文件,能够快速生成根文件系统,并为 RT-Thread 操作系统构建所需的应用程序。
git clone https://github.com/RT-Thread/userapps
在 userapps 目录中,将有如下文件:
apps:存放应用程序代码,包管理文件夹及编译产物
env.sh:用于配置环境变量
repo:用于管理软件包的文件夹
执行env.sh脚本配置环境:
source env.sh
拉取工具链和编译根文件系统: 为了编译 xuantie 目标平台上的代码,您需要下载并安装交叉编译工具
链:
cd appsxmake f -a xuantiexmakexmake smart-rootfs
7 生成文件系统镜像
生成的文件系统需与内核功能匹配。若配置内核时未启用 EXT4 文件系统,可通过以下命令生成 FAT 格式文件系统,最终在 build 目录下生成 fat.img 文件:
cd buildmkfs.vfat -C fat.img 16M
若内核已启用 EXT4 支持(即已配置 PKG_USING_LWEXT4 ),可通过以下命令生成 ext4 格式的文件系统镜像 ext4.img :
xmake smart-image
8 运行RT-Smart
在 QEMU 下运行 SMART 需要三个文件:rtthread.bin(内核文件)、ext4.img 或 fat.img(用户程序镜像)和 run.sh(启动脚本)。
run.sh 位于 bsprt-thread/bsp/xuantie/virt64/c906/ 目录。
rtthread.bin 编译内核后与 run.sh 位于同一目录。
ext4.img 或 fat.img 在生成镜像后位于 userapps/apps/build/ 目录。
将上述三个文件放入同一文件夹即可运行 SMART。
运行结果如下:
$ bash run.sh ext4.img
OpenSBI v1.4 ____ _____ ____ _____ / __ \ / ____| _ \_ _| | | | |_ __ ___ _ __ | (___ | |_) || | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | | |__| | |_) | __/ | | |____) | |_) || |_ \____/| .__/ \___|_| |_|_____/|____/_____| | | |_|
Platform Name : riscv-virtio,qemuPlatform Features : medelegPlatform HART Count : 1Platform IPI Device : aclint-mswiPlatform Timer Device : aclint-mtimer @ 10000000HzPlatform Console Device : uart8250Platform HSM Device : ---Platform PMU Device : ---Platform Reboot Device : syscon-rebootPlatform Shutdown Device : syscon-poweroffPlatform Suspend Device : ---Platform CPPC Device : ---Firmware Base : 0x80000000Firmware Size : 323 KBFirmware RW Offset : 0x40000Firmware RW Size : 67 KBFirmware Heap Offset : 0x48000Firmware Heap Size : 35 KB (total), 2 KB (reserved), 9 KB (used), 23 KB (free)Firmware Scratch Size : 4096 B (total), 328 B (used), 3768 B (free)Runtime SBI Version : 2.0
Domain0 Name : rootDomain0 Boot HART : 0Domain0 HARTs : 0*Domain0 Region00 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W)Domain0 Region01 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W)Domain0 Region02 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()Domain0 Region03 : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()Domain0 Region04 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W)Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W)Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)Domain0 Next Address : 0x0000000080200000Domain0 Next Arg1 : 0x000000008fe00000Domain0 Next Mode : S-modeDomain0 SysReset : yesDomain0 SysSuspend : yes
Boot HART ID : 0Boot HART Domain : rootBoot HART Priv Version : v1.10Boot HART Base ISA : rv64imafdcBoot HART ISA Extensions : zicntr,zihpmBoot HART PMP Count : 16Boot HART PMP Granularity : 2 bitsBoot HART PMP Address Bits: 54Boot HART MHPM Info : 16 (0x0007fff8)Boot HART MIDELEG : 0x0000000000000222Boot HART MEDELEG : 0x000000000000b109heap: [0x003404c0 - 0x043404c0]
\ | /- RT - Thread Smart Operating System / | \ 5.2.1 build Jun 13202509:43:352006 - 2024 Copyright by RT-Thread team[I/utest] utest is initialize success.[I/utest] total utest testcase num: (1)[I/drivers.serial] Using /dev/ttyS0 as default console[W/DFS.fs] mount / failed with file system type: elmfile system initialization done!Hello RISC-Vmsh />/ # / # / # lsbin lib proc sbin usrdev lost+found root services varetc mnt run tmp/ #
上述便是在玄铁平台运行RT-Thread与RT-Smart的使用方法,不需要物理硬件在线即可开发与学习,感兴趣的小伙伴行动起来吧!
欢迎加入RT-Thread&玄铁兴趣小组!
(扫描二维码加入)
想要在RT-Thread平台或社区投放内容?
或想参与相关直播活动及赛事?
RT-Thread已开放对接窗口,
请通过邮件与我们取得联系,期待合作!
合作邮箱: tongfangyi@rt-thread.com