RISC-V 子系统开发与使用
1. 准备工作
- 开发环境
- Ubuntu22.04 虚拟机或者主机
- Luckfox_Lume_SDK_260427.tar.gz
- 硬件准备:
- Luckfox Lume 主板
- USB 转 TTL 串口模块 ×2
- USB Type-A to Type-C 数据线
- 100M/1000M 以太网线缆
- 路由器(用于开发板网络连接)
2. E907(RISC-V) Baremetal Demo 测试
本章节介绍如何编译并运行 E907(RISC-V) Baremetal Demo。编译完成后,可将生成的固件传输至开发板,并由 Linux 侧加载运行。
2.1 编译 E907(RISC-V)Baremetal Demo
i.进入 {SDK}/rtos/lichee/baremetal 目录
执行 ./build.sh config 命令,选择对应方案,这里以 t153_e907 demo 为例:
~/{SDK}/rtos/lichee/baremetal$ ./build.sh config
Welcome to mkscript setup progress
All available bare_project:
0. mr153_e907
1. t153
2. t153_e907
3. t536
4. t536_e907
Choice [t153_e907]: 2
All available bare_board:
0. bga_demo
1. demo
2. sram_lp
Choice [demo]: 1
INFO: Prepare executive of tools ...
INFO: ./tools/riscv64-elf-x86_64-20201104 ready ...
#
# No change to .config
#
INFO: use ./projects/t153_e907/demo/sun8iw22p1_mr153_e907_demo_defconfig ...执行 ./build.sh 编译,得到 t153_e907_demo.elf 固件。

文件 说明 t153_e907_demo.bin 二进制镜像 t153_e907_demo.elf 带符号表、段信息、调试信息的可执行文件,用来给 Linux 端加载 t153_e907_demo.map 内存布局映射表
2.2 运行 E907(RISC-V)Baremetal Demo
将 t153_demo.elf 上传到开发板,文件传输可选择 adb 或 scp 任意一种方式即可,无需同时执行两种方式。
- 使用 adb 上传:
adb push t153_e907_demo.elf /lib/firmware/ - 使用 scp 上传:
scp t153_e907_demo.elf root@<ip>:/lib/firmware/
# eg: scp t153_demo.elf root@192.168.xxx.xxx:/lib/firmware/
- 使用 adb 上传:
将 ELF 镜像重命名为 amp_arm_bare.bin:
mv /lib/firmware/t153_e907_demo.elf /lib/firmware/amp_rv0.bin连接子系统 UART(RX:PD14 TX:PD15,串口波特率设置为 115200。) 串口,子系统 UART 引脚如下:


执行以下命令启动 E907(RISC-V)从核系统:
echo start > /sys/class/remoteproc/remoteproc0/state如果通过调试串口登录系统,可看到如下启动日志输出:
root@luckfox:~# echo start > /sys/class/remoteproc/remoteproc0/state
[ 9390.584130] remoteproc remoteproc0: powering up e907_rproc
[ 9390.584638] remoteproc remoteproc0: using private firmware, skip checking here
[ 9390.584651] remoteproc remoteproc0: Booting fw image amp_rv0.bin, size 207428
[ 9390.584675] remoteproc remoteproc0: load fw from filesystem, filename: amp_rv0.bin
[ 9390.584885] remoteproc remoteproc0: sunxi_rproc_elf_load_segments,989 find segments err
[ 9390.585137] sunxi-rproc 1a00000.e907_rproc: boot address: 0x421c5000
[ 9390.585295] remoteproc0#vdev0buffer: assigned reserved memory node vdev0buffer@42100000
[ 9390.585744] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 9390.585820] remoteproc0#vdev0buffer: registered virtio0 (type 7)
[ 9390.585829] remoteproc remoteproc0: remote processor e907_rproc is now up子系统 UART 会输出 Letter Shell 终端信息:

2.3 Rpmsg 通信测试
- 在 Baremetal 端串口输入以下命令,启动 RPMsg 测试程序:
hal_rpmsg_test - 在 Linux 端执行以下命令,通过 RPMsg 设备节点向 Baremetal 端发送测试数据:
echo hello > /dev/rpmsg_test - 送成功后,Baremetal 端串口将显示如下接收到的数据内容:

3. E907(RISC-V) FreeRTOS 测试
本章节介绍如何编译并运行 E907(RISC-V) FreeRTOS Demo。编译完成后,可将生成的固件传输至开发板,并由 Linux 侧加载运行。
3.1 编译 E907(RISC-V)FreeRTOS Demo
进入 {SDK}/rtos/ 目录,设置环境变量。
source envsetup.sh执行 ./build.sh config 命令,选择对应方案,这里以 t153 demo 为例:
~/{SDK}/rtos$ lunch_rtos
last=t153_e907_demo
You're building on Linux
Lunch menu... pick a combo:
1. ai985_e906_scanp_fastboot
2. mr153_e907_evb1
3. mr527_e906_evb
4. mr536_e907_evb1
5. t153_bga_demo
6. t153_demo
7. t153_demo_smp
8. t153_e907_bga_demo
9. t153_e907_demo
10. t536_demo
11. t536_demo_smp
12. t536_e907_demo
Which would you like? [Default t153_e907_demo]: 9
select=9...
t153_e907/demo
'/home/luckfox_lume/rtos/lichee/rtos/projects/t153_e907/demo/defconfig' -> '/home/luckfox_lume/rtos/lichee/rtos/.config'
============================================
RTOS_BUILD_TOP=/home/luckfox_lume/rtos
RTOS_TARGET_ARCH=riscv
RTOS_TARGET_CHIP=sun8iw22p1
RTOS_TARGET_DEVICE=t153_e907
RTOS_PROJECT_NAME=t153_e907_demo
============================================
Run mrtos_menuconfig to config rtos
Run m or mrtos to build rtos执行
mrtos编译,得到{SDK}/rtos/lichee/rtos/build/t153_e907_demo/img/rt_system.elf固件
文件 说明 rt_system.bin 二进制镜像 rt_system.elf 带符号表、段信息、调试信息的可执行文件,用来给 Linux 端加载 rt_system.map 内存布局映射表 rt_system.syms 符号导出表 sys_config.fex RTOS 配置文件,文本格式 sys_config.bin RTOS 可加载配置文件
3.2 运行 E907(RISC-V)FreeRTOS Demo
将 rt_system.elf 上传到开发板,文件传输可选择 adb 或 scp 任意一种方式即可,无需同时执行两种方式。
- 使用 adb 上传:
adb push rt_system.elf /lib/firmware/ - 使用 scp 上传:
scp rt_system.elf root@<ip>:/lib/firmware/
# eg: scp rt_system.elf root@192.168.xxx.xxx:/lib/firmware/
- 使用 adb 上传:
将 ELF 镜像重命名为 amp_rv0.bin:
mv /lib/firmware/rt_system.elf /lib/firmware/amp_rv0.bin连接子系统 UART(RX:PD14 TX:PD15,串口波特率设置为 115200。) 串口,子系统 UART 引脚如下:


执行以下命令启动 E907(RISC-V)从核系统:
echo start > /sys/class/remoteproc/remoteproc0/state如果通过调试串口登录系统,可看到如下启动日志输出:
root@luckfox:~# echo start > /sys/class/remoteproc/remoteproc0/state
[ 9390.584130] remoteproc remoteproc0: powering up e907_rproc
[ 9390.584638] remoteproc remoteproc0: using private firmware, skip checking here
[ 9390.584651] remoteproc remoteproc0: Booting fw image amp_rv0.bin, size 207428
[ 9390.584675] remoteproc remoteproc0: load fw from filesystem, filename: amp_rv0.bin
[ 9390.584885] remoteproc remoteproc0: sunxi_rproc_elf_load_segments,989 find segments err
[ 9390.585137] sunxi-rproc 1a00000.e907_rproc: boot address: 0x421c5000
[ 9390.585295] remoteproc0#vdev0buffer: assigned reserved memory node vdev0buffer@42100000
[ 9390.585744] virtio_rpmsg_bus virtio0: rpmsg host is online
[ 9390.585820] remoteproc0#vdev0buffer: registered virtio0 (type 7)
[ 9390.585829] remoteproc remoteproc0: remote processor e907_rproc is now up子系统 UART 会输出 Shell 终端信息:

3.3 Rpmsg 通信测试
- 在 FreeRTOS 端串口输入以下命令,启动 RPMsg 测试程序:
rpmsg_test -N test -L 496 -c -v - 在 Linux 端执行以下命令,通过 RPMsg 设备节点向 FreeRTOS 端发送测试数据:
rpmsg_test -r e907_rproc@1a00000 -c test -L 496 -v - 送成功后,FreeRTOS 端串口将显示如下接收到的数据内容:

