跳到主要内容

Cortex-A7 子系统开发与使用

1. 准备工作

  1. 开发环境
    • Ubuntu22.04 虚拟机或者主机
    • Luckfox_Lume_SDK_260427.tar.gz
  2. 硬件准备:
    • Luckfox Lume 主板
    • USB 转 TTL 串口模块 ×2
    • USB Type-A to Type-C 数据线
    • 100M/1000M 以太网线缆
    • 路由器(用于开发板网络连接)

2. Cortex-A7(CPU2) Baremetal 测试

本章节介绍如何编译并运行 Cortex-A7(CPU2)Baremetal Demo。编译完成后,可将生成的固件传输至开发板,并由 Linux 侧加载运行。

2.1 编译 Baremetal Demo

  1. 进入 {SDK}/rtos/lichee/baremetal 目录

  2. 执行 ./build.sh config 命令,选择对应方案,这里以 t153 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]: 1
    All available bare_board:
    0. bga_demo
    1. demo
    Choice [demo]: 1
    INFO: Prepare executive of tools ...
    INFO: ./tools/gcc-arm-melis-eabi-8-2019-q3-update ready ...
    #
    # configuration written to .config
    #
    INFO: use ./projects/t153/demo/sun8iw22p1_t153_demo_defconfig ...
  3. 执行 ./build.sh 编译,得到 {SDK}/rtos/lichee/baremetal/out/t153/demo/image/t153_demo.elf 固件

    文件说明
    t153_demo.bin二进制镜像
    t153_demo.elf带符号表、段信息、调试信息的可执行文件,用来给 Linux 端加载
    t153_demo.map内存布局映射表

2.2 运行 Baremetal Demo

  1. 将 t153_demo.elf 上传到开发板,文件传输可选择 adb 或 scp 任意一种方式即可,无需同时执行两种方式。

    • 使用 adb 上传:
      adb  push t153_demo.elf  /lib/firmware/
    • 使用 scp 上传:
      scp t153_demo.elf  root@<ip>:/lib/firmware/
      # eg: scp t153_demo.elf root@192.168.xxx.xxx:/lib/firmware/
  2. 将 ELF 镜像重命名为 amp_arm_bare.bin:

    mv /lib/firmware/t153_demo.elf /lib/firmware/amp_arm_bare.bin
  3. 连接子系统 UART(RX:PD14 TX:PD15,串口波特率设置为 115200。) 串口,子系统 UART 引脚如下:

  4. 执行以下命令启动 Cortex-A7(CPU2)从核系统:

    echo start > /sys/class/remoteproc/remoteproc2/state
  5. 如果通过调试串口登录系统,可看到如下启动日志输出:

    root@luckfox:~# echo start > /sys/class/remoteproc/remoteproc2/state
    [ 60.830706] remoteproc remoteproc2: powering up arm_baremetal_rproc
    [ 60.908783] remoteproc remoteproc2: using private firmware, skip checking here
    [ 60.916930] remoteproc remoteproc2: Booting fw image amp_arm_bare.bin, size 1042272
    [ 60.925521] remoteproc remoteproc2: load fw from filesystem, filename: amp_arm_bare.bin
    [ 60.934704] remoteproc remoteproc2: sunxi_rproc_elf_load_segments,989 find segments err
    [ 61.060908] CPU2 killed.
    [ 61.064807] remoteproc2#vdev0buffer: assigned reserved memory node vdev0buffer@43c44000
    [ 61.074527] virtio_rpmsg_bus virtio0: rpmsg host is online
    [ 61.080798] remoteproc2#vdev0buffer: registered virtio0 (type 7)
    [ 61.087650] remoteproc remoteproc2: remote processor arm_baremetal_rproc is now up

  6. 子系统 UART 会输出 Letter Shell 终端信息:

2.3 Rpmsg 通信测试

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

3. Cortex-A7(CPU3) FreeRTOS 测试

本章节介绍如何编译并运行 Cortex-A7(CPU2)FreeRTOS。编译完成后,可将生成的固件传输至开发板,并由 Linux 侧加载运行。

3.1 编译 FreeRTOS Demo

  1. 进入 {SDK}/rtos/ 目录,设置环境变量。

    source envsetup.sh
  2. 执行 ./build.sh config 命令,选择对应方案,这里以 t153 demo 为例:

    ~/{SDK}/rtos$ lunch_rtos
    last=t153_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_demo]: 6
    select=6...
    t153/demo
    '/home/luckfox_lume/rtos/lichee/rtos/projects/t153/demo/defconfig' -> '/home/luckfox_lume/rtos/lichee/rtos/.config'
    No toolchain: /home/luckfox_lume/rtos/lichee/rtos/tools/gcc-arm-melis-eabi-8-2019-q3-update.tar.gz
    No toolchain: /home/luckfox_lume/rtos/lichee/rtos/tools/gcc-arm-melis-eabi-8-2019-q3-update.tar.xz
    Can not uncompress toolchain by defconfig
    ============================================
    RTOS_BUILD_TOP=/home/luckfox_lume/rtos
    RTOS_TARGET_ARCH=arm
    RTOS_TARGET_CHIP=sun8iw22p1
    RTOS_TARGET_DEVICE=t153
    RTOS_PROJECT_NAME=t153_demo
    ============================================
    Run mrtos_menuconfig to config rtos
    Run m or mrtos to build rtos
  3. 执行 mrtos 编译,得到 {SDK}/rtos/lichee/rtos/build/t153_demo/img/rt_system.elf 固件

    文件说明
    rt_system.bin二进制镜像
    rt_system.elf带符号表、段信息、调试信息的可执行文件,用来给 Linux 端加载
    rt_system.map内存布局映射表
    rt_system.syms符号导出表
    sys_config.fexRTOS 配置文件,文本格式
    sys_config.binRTOS 可加载配置文件

3.2 运行 FreeRTOS Demo

  1. 将 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/
  2. 将 ELF 镜像重命名为 amp_arm_rtos.bin:

    mv /lib/firmware/rt_system.elf /lib/firmware/amp_arm_rtos.bin
  3. 连接子系统 UART(RX:PD14 TX:PD15,串口波特率设置为 115200。) 串口,子系统 UART 引脚如下:

  4. 执行以下命令启动 Cortex-A7(CPU3)从核系统:

     echo start >  /sys/class/remoteproc/remoteproc1/state
  5. 如果通过调试串口登录系统,可看到如下启动日志输出:

    root@luckfox:~# echo start >  /sys/class/remoteproc/remoteproc1/state
    [ 1934.011885] remoteproc remoteproc1: powering up arm_rtos_rproc
    [ 1934.162756] remoteproc remoteproc1: using private firmware, skip checking here
    [ 1934.170829] remoteproc remoteproc1: Booting fw image amp_arm_rtos.bin, size 1966672
    [ 1934.179411] remoteproc remoteproc1: load fw from filesystem, filename: amp_arm_rtos.bin
    [ 1934.188444] sunxi-rproc soc@3000000:arm_rtos_rproc@0: handle vendor resource, type: 129
    [ 1934.197413] sunxi-rproc soc@3000000:arm_rtos_rproc@0: add trace mem 'aw_trace_log', da: 0x43d58a00, len: 4096
    [ 1934.208571] remoteproc remoteproc1: firmware version: UTS - Wed, 29 Apr 2026 20:30:17 +0800
    [ 1934.208571] Compile Time - 20:30:17
    [ 1934.332092] CPU3 killed.
    [ 1934.335826] remoteproc1#vdev0buffer: assigned reserved memory node vdev0buffer@43c00000
    [ 1934.345323] virtio_rpmsg_bus virtio0: rpmsg host is online
    [ 1934.351564] remoteproc1#vdev0buffer: registered virtio0 (type 7)
    [ 1934.358366] remoteproc remoteproc1: remote processor arm_rtos_rproc is now up
    root@luckfox:~# [ 1934.613095] virtio_rpmsg_bus virtio0: creating channel sunxi,rpmsg_ctrl addr 0x400
  6. 子系统 UART 会输出 Shell 终端信息:

3.3 Rpmsg 通信测试

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