RT-Thread BSP全面支持玄铁全系列RISC-V 处理器 | 技术集结

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值