1. 搭建MCUboot开发环境
任务说明
本案例目标是在本地搭建MCUboot的编译环境,获取源码并成功编译MCUboot自带的Zephyr示例(boot/zephyr)。完成后应生成可烧录的bootloader镜像文件。
环境准备与依赖安装
MCUboot本身是bootloader库,需要配合实时操作系统(RTOS)使用。本案例选用Zephyr RTOS作为底层支持,因为MCUboot对Zephyr的支持最完善且示例最完整。需要安装的依赖包括:Git、CMake(≥3.20)、Python3、pip、Ninja、dtc(device tree compiler)以及Zephyr SDK(含交叉编译工具链)。
在Ubuntu 22.04 LTS上执行以下命令安装基础依赖:
sudo apt update
sudo apt install -y git cmake ninja-build python3-dev python3-pip \
device-tree-compiler libssl-dev gcc-multilib
安装Zephyr构建工具west:
pip3 install --user west
export PATH=~/.local/bin:$PATH
获取源码
创建项目目录并初始化west工作区。MCUboot的Zephyr示例通过west manifest机制管理依赖:
mkdir ~/mcuboot-workspace && cd ~/mcuboot-workspace
west init -m https://github.com/mcu-tools/mcuboot.git --mr main mcuboot
cd mcuboot
west update
上述命令会拉取MCUboot主仓库以及Zephyr RTOS、hal等依赖模块。若网络受限,可设置代理或使用镜像仓库。
安装Zephyr SDK
Zephyr SDK提供目标架构的交叉编译器。下载并解压(以x86_64主机、ARM目标为例):
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/zephyr-sdk-0.16.3_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.3_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.3
./setup.sh -t all -h -c
setup.sh脚本会将SDK路径写入~/.zephyrrc文件。若目标平台是native_posix(在PC上模拟运行),则无需SDK,只需安装cmake和ninja即可。
编译MCUboot示例
进入MCUboot的Zephyr示例目录,选择目标平台。本案例以native_posix为验证目标(无需真实硬件即可编译运行),同时展示ARM平台的编译命令:
cd ~/mcuboot-workspace/mcuboot/boot/zephyr
# 方式1:编译native_posix目标(PC模拟运行)
west build -b native_posix .
# 方式2:编译ARM目标(如nRF52840 DK开发板)
# west build -b nrf52840dk_nrf52840 .
编译产物位于build/zephyr/zephyr.bin,即为bootloader镜像。若使用native_posix目标,还可直接运行:
./build/zephyr/zephyr.exe
验证方法与判定标准
验证分为编译验证和运行验证两个层面:
- 编译验证:执行编译命令后,终端输出以
Generating files done和Build complete结尾,且build/zephyr/zephyr.bin文件存在且非空,即判定编译通过。 - 运行验证(native_posix):运行
zephyr.exe后,控制台输出MCUboot启动日志,包含MCUboot bootloader版本信息以及Jumping to the first image slot字样,说明bootloader成功加载并跳转执行。由于native_posix目标未烧录应用镜像,跳转后可能无应用可执行而停止,这属于预期行为,只要日志显示bootloader初始化流程完整即可判定通过。
常见问题排查
- west命令找不到:确认
~/.local/bin已加入PATH,或重新登录终端。 - 编译时报Python模块缺失:执行
pip3 install --user pyelftools安装Zephyr构建所需的Python包。 - native_posix编译失败:确认已安装
gcc-multilib,因为native_posix需要32位库支持。
完成上述步骤后,MCUboot编译环境即搭建成功,后续案例将在此基础上进行MCUboot功能配置与移植开发。