7.5.2 MCU 快速入门指南
范围
本章节概述了 MCU 系统,旨在帮助读者快速了解并掌握相关内容,以便开展 MCU1 的开发工作。因为 MCU0负责启动 Acore、MCU1以及电源管理等功能,这部分不建议客户自行修改,默认不释放源码,提供地瓜验证过的 bin 文件。章节中仅对可能与 MCU1 发生冲突的部分进行简要说明,旨在帮助用户在开发过程中规避 MCU0 与 MCU1 之间的资源竞争问题。
基础信息
- MCU 编译工具链为 GCC 工具链,版本为 gcc-arm-none-eabi-10.3~2021.10
- MCU 核为 ARM R52+,可以用 ARM R52 technical reference manual 文档作为参考:官网链接
- MCU 运行的操作系统均为 FreeRTOS,版本为 FreeRTOS Kernel V10.0.1
- MCU 主要分为两部分:MCU0和 MCU1。MCU0主要负责启动 Acore、MCU1以及电源管理等功能,目前不开源;MCU1主要负责跑业务等功能,开源,客户可根据自己需求进行修改
MCU 框架
MCU0是板子启动的开始,也是重中之重。因为 MCU0负责启动 Acore、MCU1以及电源管理等功能。Acore 所运行的 linux 操作系统是客户开发功能的重要载体,而 MCU1运行的 FreeRTOS 操作系统为客户的实时任务进行保驾护航。 MCU1通过 linux 的 remoteproc 框架实现,在 Acore 的 sysfs 通过向 MCU0发送通知,从而控制 MCU1的启动和关闭。同时在 RDK-S100的休眠模式下,也是通知 Acore 通知 MCU0从而操作 MCU1,实现低功耗休眠功能。
MCU0是板子启动的开始,也是重中之重。因为 MCU0负责启动 Acore、MCU1以及电源管理等功能。Acore 所运行的 linux 操作系统是客户开发功能的重要载体,而 MCU1运行的 FreeRTOS 操作系统为客户的实时任务进行保驾护航。 MCU1通过 linux 的 remoteproc 框架实现,在 Acore 的 sysfs 通过向 MCU0发送通知,从而控制 MCU1的启动和关闭。同时在 RDK-S600的休眠模式下,也是通知 Acore 通知 MCU0从而操作 MCU1,实现低功耗休眠功能。
开发环境
交叉编译是指在主机上开发和构建软件,然后把构建的软件部署到开发板上运行。主机一般拥有比开发板更高的性能和更多的内存,可以高效完成代码的构建,可以安装更多的开发工具。
主机编译环境要求
推荐使用 Ubuntu 22.04 操作系统,保持和 RDK S100相同的系统版本,减少因版本差异产生的依赖问题。
Ubuntu 22.04 系统安装以下软件包:
sudo apt-get install -y build-essential make cmake libpcre3 libpcre3-dev bc bison \
flex python3-numpy mtd-utils zlib1g-dev debootstrap \
libdata-hexdumper-perl libncurses5-dev zip qemu-user-static \
curl repo git liblz4-tool apt-cacher-ng libssl-dev checkpolicy autoconf \
android-sdk-libsparse-utils mtools parted dosfstools udev rsync python3-pip scons
pip install "scons>=4.0.0"
pip install ecdsa
pip install tqdm
编译 MCU 系统
- 编译会使用 python3,RDK S100/S600 开发使用的 python3 的版本为 3.8.10;
- MCU1的镜像分为 debug 和 release 两个版本。debug 版本的镜像会有调试信息,而 release 版本不含调试信息。
首次编译会从 arm 官网下载工具链后解压缩(10min 左右),网速不好可能会导致工具链下载不成功或下载不完整的问题,建议通过以下方式下载编译工具链:
-
点击工具链下载链接,下载编译工具链。
-
将已有工具链移至 /Build/ToolChain/Gcc/ 内,移动工具链命令如下:
mv 工具链存储路径/工具链文件名 新代码/Build/ToolChain/Gcc/ -
编译时检测到有工具链,不会再从官网下载。
# 编译MCU1 Debug版本
cd mcu/Build/FreeRtos_mcu1
python build_freertos.py lite matrix B s100 mcu1 gcc debug
*/
# 编译MCU1 Release版本
cd mcu/Build/FreeRtos_mcu1
python build_freertos.py lite matrix B s100 mcu1 gcc release
# 编译MCU1 Debug版本
cd mcu/Build/FreeRtos_mcu1
python build_freertos.py lite matrix B s600 gcc mcu1 debug
# 编译MCU1 Release版本
cd mcu/Build/FreeRtos_mcu1
python build_freertos.py lite matrix B s600 gcc mcu1 release