MCU快速入门指南
范围
本章节概述了 RDK-S100 mcu 系统,用于帮助读者快速了解并掌握,以便进行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,实现低功耗休眠功能。
开发环境
交叉编译是指在主机上开发和构建软件,然后把构建的软件部署到开发板上运行。主机一般拥有比开发板更高的性能和更多的内存,可以高效完成代码的构建,可以安装更多的开发工具。
主机编译环境要求
推荐使用 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开发使用的python3的版本为3.8.10;
- mcu1的镜像分为debug和release两个版本。debug版本的镜像会有调试信息,而release版本不含调试信息。
/* 编译mcu1 */
cd mcu/Build/FreeRtos_mcu1
python build_freertos.py s100_sip_B debug/release
/*
1.首次编译会从arm官网下载一份工具链然后解压缩(10min左右),网速不好可能会存在工具链下载不成功或者工具链下载不完整的问题,可删除已下载的工具链,再多尝试下载几次。
2.如果已有相关工具链,可以将其移至/Build/ToolChain/Gcc/内,当检测到有工具链,就不会从官网下载。
mv 工具链地址/gcc-arm-none-eabi-10.3-2021.10/ 新代码/Build/ToolChain/Gcc/gcc-arm-none-eabi-10.3-2021.10
*/
编译成功标志
编译输出目录
output/
├── dbg # 该文件夹下包含debug版本的编译生成文件
| ├── objs # 编译生成的i/s/o文件
| └── S100_MCU_SIP_V2.0 # 编译生成的bin/map/elf等文件
| ├── custom_compiler_flags.py
| ├── S100_MCU_DEBUG.elf # mcu1启动文件
| ├── S100_MCU_DEBUG.map
| ├── S100_MCU_SIP_V2.0.bin
├── objs # 编译生成的i/s/o文件,根据编译的版本变化
├── rel # 该文件夹下包含release版本的编译生成文件
| ├── objs # 编译生成的i/s/o文件
| └── S100_MCU_SIP_V2.0 # 编译生成的bin/map/elf等文件
MCU1启动/关闭流程
MCU1的启动/关闭是由Acore经过remoteproc框架传递信息给mcu0进而实现启动/关闭mcu1。
MCU1启动原理与步骤
MCU1启动原理
MCU1启动步骤
下述启动流程以debug版本为例,release版本与其类似,只是少一些log打印。
- 经过上述编译流程,编译debug版本会在S100_MCU_SIP_V2.0文件夹下产生S100_MCU_DEBUG.elf文件(release版本类似),该文件为mcu1的firmware文件,因此需要将该文件推送到板端的/lib/firmware目录。举例子如下:
- 板端启动流程
cd /sys/class/remoteproc/remoteproc_mcu0
echo S100_MCU_DEBUG.elf > firmware
echo start > state
正常启动后,串口log打印下图所示 Acore侧串口打印
MCU侧串口打印