1. MCUboot 源码目录结构与构建系统解析

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

验证方法与判定标准

验证分为编译验证和运行验证两个层面:

  1. 编译验证:执行编译命令后,终端输出以Generating files done和Build complete结尾,且build/zephyr/zephyr.bin文件存在且非空,即判定编译通过。
  2. 运行验证(native_posix):运行zephyr.exe后,控制台输出MCUboot启动日志,包含MCUboot bootloader版本信息以及Jumping to the first image slot字样,说明bootloader成功加载并跳转执行。由于native_posix目标未烧录应用镜像,跳转后可能无应用可执行而停止,这属于预期行为,只要日志显示bootloader初始化流程完整即可判定通过。
MCUboot开发环境搭建流程 ① 安装依赖 git / cmake / ninja python3 / dtc / west ② 获取源码 west init + update 拉取mcuboot + zephyr ③ 安装SDK Zephyr SDK 交叉编译工具链 ④ 编译 west build -b native_posix 编译产物 build/zephyr/zephyr.bin bootloader镜像(可烧录) build/zephyr/zephyr.exe native_posix可执行文件 build/zephyr/zephyr.hex Intel HEX格式(烧录用) 验证方法 编译验证 观察输出是否以 "Build complete" 结尾 检查 zephyr.bin 是否存在且非空 运行验证(native_posix) 执行 zephyr.exe,观察启动日志 应包含 "MCUboot bootloader" 版本信息

常见问题排查

  • west命令找不到:确认~/.local/bin已加入PATH,或重新登录终端。
  • 编译时报Python模块缺失:执行pip3 install --user pyelftools安装Zephyr构建所需的Python包。
  • native_posix编译失败:确认已安装gcc-multilib,因为native_posix需要32位库支持。

完成上述步骤后,MCUboot编译环境即搭建成功,后续案例将在此基础上进行MCUboot功能配置与移植开发。