NXP RW612(FRDM-RW612 开发板)的 Zigbee 源码编译,核心是在 Ubuntu 20.04 环境下搭建依赖工具链、通过 West 获取 SDK 源码,依次编译协调器(Coordinator)、MCU Bootloader 和路由器(Router),最终生成可烧录的.bin/.elf 文件。本文详解从环境准备到固件烧录的完整流程,包含版本要求、命令模板和常见错误处理,适用于 Zigbee 物联网项目开发。
1. 核心目标与环境准备
1.1 技术目标
- 搭建兼容的编译环境(工具版本严格匹配);
- 编译 Zigbee 协调器固件(支持网络管理);
- 编译 MCU Bootloader(负责固件引导);
- 编译 Zigbee 路由器固件(支持网络扩展);
- 烧录固件到 FRDM-RW612 开发板,验证启动日志。
1.2 必备工具与版本要求
| 工具 | 最低版本 | 核心用途 |
|---|---|---|
| CMake | 3.24 | 项目构建配置 |
| Ninja | 1.12 | 快速编译工具 |
| ARM GCC | 10.3-2021.10 | ARM 架构交叉编译 |
| Python3 | 3.6 | 依赖管理与虚拟环境 |
| West | 1.2.0 | SDK 与 Zigbee 源码下载 |
| MCUXpresso SDK | 25.06.00-pvw2 | 基础 SDK(含 Zigbee 协议栈) |
2. 环境搭建步骤(Ubuntu 20.04 专属)
2.1 升级 CMake(默认版本不足)
# 下载CMake 3.24.0
cd ~/Downloads
wget https://cmake.org/files/v3.24/cmake-3.24.0.tar.gz
tar -zxvf cmake-3.24.0.tar.gz
cd cmake-3.24.0
# 编译安装
./bootstrap
make
sudo make install
# 验证版本
cmake --version # 输出3.24.0即可
2.2 升级 Ninja(默认版本不足)
# 下载Ninja 1.12.1
cd ~/Downloads
wget https://distfiles.macports.org/ninja/ninja-1.12.1.tar.gz
tar -zxvf ninja-1.12.1.tar.gz
cd ninja-1.12.1
# 编译并安装
./configure.py --bootstrap
sudo cp ./ninja /usr/bin
# 验证版本
ninja --version # 输出1.12.1即可
2.3 安装 ARM GCC 工具链
# 下载工具链(10.3版本)
cd ~/Downloads
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
# 解压到/opt目录
sudo tar -jxvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /opt/
2.4 配置 Python3 环境
# 安装虚拟环境依赖
sudo apt install python3.8-venv # Ubuntu 20.04默认Python3.8.10,符合要求
# 若安装失败,用aptitude重试
sudo apt-get install aptitude
sudo aptitude install python3.8-venv
# 安装lxml依赖(编译必需)
sudo apt-get install libxml2-dev libxslt1-dev python3-dev
2.5 安装 West 并下载 SDK
# 安装West
pip install -U west
# 初始化SDK(默认最新版25.06.00-pvw2)
west init -m https://github.com/nxp-mcuxpresso/mcuxsdk-manifests mcuxpresso-sdk
cd mcuxpresso-sdk
# 下载源码与依赖
west update
# 启用扩展命令
west config commands.allow_extensions true
- 如需指定版本(如 25.03.00-pvw2),初始化命令替换为:
west init -m https://github.com/nxp-mcuxpresso/mcuxsdk-manifests --mr release/25.03.00-pvw2 mcuxpresso-sdk
2.6 建立编译环境(关键配置)
(1)修改 sh 软链接(避免编译报错)
# 备份原有dash链接
sudo mv /bin/sh /bin/sh.orig
# 链接为bash
sudo ln -s /bin/bash /bin/sh
# 验证:输出lrwxrwxrwx 1 root root 9 ... /bin/sh -> /bin/bash
ls /bin/sh -al
(2)创建 Python 虚拟环境
cd ~/mcuxpresso-sdk
# 创建虚拟环境
python3 -m venv .venv
# 激活环境
source .venv/bin/activate
# 安装依赖(含lxml 5.2.2)
pip install -r requirements.txt
(3)配置环境变量
# 指定ARM GCC工具链路径
export ARMGCC_DIR=/opt/gcc-arm-none-eabi-10-2020-q4-major
3. Zigbee 源码编译(分模块执行)
3.1 编译 Zigbee 协调器(Coordinator)
cd ~/mcuxpresso-sdk
# 编译命令(指定开发板FRDM-RW612,自动配置)
west build -b frdmrw612 -p auto examples/wireless_examples/zigbee/coordinator/freertos
- 编译成功产物(build 目录下):
zigbee_coordinator_freertos.bin(二进制固件)zigbee_coordinator_freertos.elf(调试文件)
- 关键日志:最后输出
Linking C executable zigbee_coordinator_freertos.elf,无报错即成功。
3.2 编译 MCU Bootloader
cd ~/mcuxpresso-sdk
# 清理之前的构建目录
rm -rf build
# 编译命令
west build -b frdmrw612 -p always examples/ota_examples/mcuboot_opensource
- 编译成功产物:
mcuboot_opensource.elf(引导固件) - 关键日志:输出
Linking C executable mcuboot_opensource.elf,内存占用正常(如 m_text 占 32.82%)。
3.3 编译 Zigbee 路由器(Router)
cd ~/mcuxpresso-sdk
# 清理构建目录
rm -rf build
# 编译命令
west build -b frdmrw612 -p auto examples/wireless_examples/zigbee/router/freertos
- 编译成功核心产物:
zigbee_router_freertos.bin(基础固件)zigbee_router_freertos_v1.signed.confirmed.bin(签名确认版,烧录首选)zigbee_router_freertos.elf(调试文件)
4. 固件烧录(J-Link Commander)
4.1 烧录准备
- 安装 J-Link Software:Windows PC 下载地址(含 Commander):https://www.segger.com/products/debug-probes/j-link/tools/j-link-commander/
- 硬件连接:FRDM-RW612 开发板通过 J-Link 连接 PC。
4.2 分模块烧录命令
(1)烧录协调器固件
# 打开J-Link Commander,执行以下命令
loadbin "C:路径zigbee_coordinator_freertos.bin" 0x08000000
# 或烧录elf文件(含调试信息)
loadfile "C:路径zigbee_coordinator_freertos.elf"
(2)烧录路由器固件(需先烧 Bootloader)
# 1. 烧录MCU Bootloader
loadfile "C:路径mcuboot_opensource.elf"
# 2. 烧录路由器签名固件(地址0x18020000)
loadbin "C:路径zigbee_router_freertos_v1.signed.confirmed.bin" 0x18020000
4.3 验证启动
5. 常见错误与解决方案
错误 1:ModuleNotFoundError: No module named 'openpyxl'
- 解决方案:激活 Python 虚拟环境后安装:
pip install openpyxl
错误 2:No module named 'crccheck'
- 解决方案:
pip install crccheck
错误 3:No module named'spsdk'
- 解决方案:
pip install spsdk # 如需指定版本:pip install spsdk==1.10.0
错误 4:CMake 版本不匹配
- 解决方案:重新执行 “升级 CMake” 步骤,确保
cmake --version输出≥3.24。
6. 兼容的 ARM GCC 版本(可选)
除文中使用的 10.3 版本外,以下版本经测试可正常编译:
- gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
- arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi.tar.xz
- arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi.tar.xz
- arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi.tar.xz
RW612 Zigbee 源码编译的核心是 “版本匹配 + 环境配置”:严格按要求升级 CMake、Ninja,通过 West 精准获取 SDK,分模块编译协调器、Bootloader 和路由器,最后用 J-Link 烧录验证。整个流程无需复杂开发,重点在于工具链版本兼容和环境变量配置,按本文命令执行即可快速产出可用固件。
阅读全文
82