3. MCUboot 镜像格式与头部字段解析
任务说明
在MCUboot中启用串口控制台,配置UART引脚与波特率,使bootloader在启动过程中通过串口输出日志信息。本案例以STM32L4系列为目标平台,使用Zephyr RTOS作为MCUboot的运行环境。
实现方案
MCUboot基于Zephyr构建时,串口控制台由Zephyr的UART驱动与日志系统提供。需要完成三部分配置:设备树中使能UART外设并指定引脚、prj.conf中启用控制台与日志后端、以及确认日志级别使启动信息可见。
代码实现
首先在board设备树文件(如boards/arm/olimex_stm32l4_pico/olimex_stm32l4_pico.dts)中确认或添加UART节点配置:
/* 设备树中UART2节点配置(默认已存在于板级dts) */
&usart2 {
status = "okay";
pinctrl-0 = &usart2_default_alt;
pinctrl-names = "default";
current-speed = <115200>;
};
&pinctrl {
usart2_default_alt: usart2_default_alt {
group1 {
pinmux = <STM32_PINMUX('A', 2, AF7)>, /* TX */
<STM32_PINMUX('A', 3, AF7)>; /* RX */
};
};
};
然后在MCUboot的Zephyr配置目录中创建或修改prj.conf:
# 启用串口控制台
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
# 启用日志系统并输出到串口
CONFIG_LOG=y
CONFIG_LOG_BACKEND_UART=y
CONFIG_LOG_DEFAULT_LEVEL=4 # INFO级别及以上输出
# 确保MCUboot日志可见
CONFIG_MCUBOOT_LOG=y
若需修改波特率,可在设备树中调整current-speed属性,或在prj.conf中通过CONFIG_UART_CONSOLE_BAUDRATE覆盖(需与设备树一致)。
构建与烧录
# 在MCUboot根目录执行
west build -b olimex_stm32l4_pico -d build_zephyr boot/zephyr
west flash -d build_zephyr
验证方法
使用串口调试工具连接板卡UART2对应引脚(PA2-TX, PA3-RX),波特率设为115200。复位板卡后,串口终端应观察到类似以下启动日志:
*** Booting Zephyr OS build v3.5.0 ***
[INF] MCUboot: Starting bootloader
[INF] MCUboot: Primary slot: 0x10000
[INF] MCUboot: Secondary slot: 0x80000
[INF] MCUboot: Image 0 loaded
判定标准:串口终端出现以*** Booting Zephyr OS开头、包含MCUboot:前缀的INFO级别日志即视为通过。若仅有Zephyr启动信息而无MCUboot日志,检查CONFIG_MCUBOOT_LOG是否生效;若无任何输出,检查引脚连接、设备树status及波特率是否匹配。