zephyr mcuboot使用笔记

发布时间:2026/11/5 6:53:03

zephyr mcuboot使用笔记 zephyr mcuboot使用笔记内容参考https://blog.csdn.net/weixin_44742767/article/details/158770644创建bootloader工程使用vscode workbench for zephyr创建工程创建完成如下工程添加板级信息1.修改默认设备树 zephyrproject\zephyr\boards\st\stm32f407_alientekstm32f407_alientek.dts加入zephyr,code-partition slot0_partition;flash0 {…};完整文件/* * Copyright (c) 2017 Linaro Limited * * SPDX-License-Identifier: Apache-2.0 *//dts-v1/;#includest/f4/stm32f407Xg.dtsi#includest/f4/stm32f407z(e-g)tx-pinctrl.dtsi#includezephyr/dt-bindings/input/input-event-codes.h/{modelSTMicroelectronics STM32F4DISCOVERY board;compatiblest,stm32f4discovery;chosen{zephyr,consoleusart1;zephyr,shell-uartusart1;zephyr,sramsram0;zephyr,flashflash0;zephyr,code-partitionslot0_partition;zephyr,dtcmccm0;zephyr,canbuscan2;zephyr,uart2usart2;/*与网口引脚冲突*/zephyr,uart3usart3;};leds{compatiblegpio-leds;/* red_led_0: led_0 { gpios gpiof 9 GPIO_ACTIVE_LOW; label User LD0; }; */green_led_1:led_1{gpiosgpiof10GPIO_ACTIVE_LOW;labelUser LD1;};};gpio_keys{compatiblegpio-keys;/*正点原子开发板按键低电平有效SoC内部上拉按键悬空时引脚被拉到高*/key_0:gpioe4_key{labelKey0;gpiosgpioe4(GPIO_PULL_UP|GPIO_ACTIVE_LOW);zephyr,codeINPUT_KEY_0;};key_1:gpioe3_key{labelKey1;gpiosgpioe3(GPIO_PULL_UP|GPIO_ACTIVE_LOW);zephyr,codeINPUT_KEY_1;};key_2:gpioe2_key{labelKey2;gpiosgpioe2(GPIO_PULL_UP|GPIO_ACTIVE_LOW);zephyr,codeINPUT_KEY_2;};};pwmleds:pwmleds{compatiblepwm-leds;red_pwm_led:pwm14_ch1_led{/*pwm14,channel1,周期100微秒,‌常规:占空比越大,高电平越长*/pwmspwm141PWM_USEC(100)PWM_POLARITY_NORMAL;};};aliases{led0red_pwm_led;/*红色led pwm输出*/led1green_led_1;/*绿色led gpio输出*/sw0key_0;/*按键0 gpio输入*/sw1key_1;sw2key_2;rtcrtc;die-temp0die_temp;volt-sensor0vref;volt-sensor1vbat;};zephyr,user{io-channelsadc15,adc35;};};clk_lsi{statusokay;};clk_hse{clock-frequencyDT_FREQ_M(8);statusokay;};pll{div-m8;mul-n336;div-p2;div-q7;clocksclk_hse;statusokay;};rcc{clockspll;clock-frequencyDT_FREQ_M(168);ahb-prescaler1;apb1-prescaler4;apb2-prescaler2;};// 扇区分布//Sector 0: 16 KB (0x0800_0000 - 0x0800_3FFF) ← 最小擦除单位//Sector 1: 16 KB (0x0800_4000 - 0x0800_7FFF)//Sector 2: 16 KB (0x0800_8000 - 0x0800_BFFF)//Sector 3: 16 KB (0x0800_C000 - 0x0800_FFFF)//Sector 4: 64 KB (0x0801_0000 - 0x0801_FFFF)//Sector 5: 128 KB (0x0802_0000 - 0x0803_FFFF) ← Slot 0 起始//Sector 6: 128 KB (0x0804_0000 - 0x0805_FFFF)//Sector 7: 128 KB (0x0806_0000 - 0x0807_FFFF) ← Slot 1 起始//Sector 8: 128 KB (0x0808_0000 - 0x0809_FFFF)//Sector 9: 128 KB (0x080A_0000 - 0x080B_FFFF) ← Scratch 起始//Sector 10: 128 KB (0x080C_0000 - 0x080D_FFFF)flash0{statusokay;partitions{compatiblefixed-partitions;#address-cells1;#size-cells1;boot_partition:partition0{labelmcuboot;reg0x00000000DT_SIZE_K(128);read-only;};slot0_partition:partition20000{labelimage-0;reg0x00020000DT_SIZE_K(256);};slot1_partition:partition60000{labelimage-1;reg0x00060000DT_SIZE_K(256);};scratch_partition:partitiona0000{labelimage-scratch;reg0x000A0000DT_SIZE_K(256);};};};usart1{pinctrl-0usart1_tx_pa9usart1_rx_pa10;pinctrl-namesdefault;current-speed115200;statusokay;};usart2{pinctrl-0usart2_tx_pa2usart2_rx_pa3;pinctrl-namesdefault;current-speed115200;statusokay;};usart3{pinctrl-0usart3_tx_pb10usart3_rx_pb11;pinctrl-namesdefault;current-speed115200;statusokay;};timers2{statusokay;pwm2:pwm{statusokay;pinctrl-0tim2_ch1_pa0;pinctrl-namesdefault;};};/* PF9红色LED灯使用PWM14输出 */timers14{statusokay;pwm14:pwm{statusokay;pinctrl-0tim14_ch1_pf9;pinctrl-namesdefault;};};rtc{clocksrccSTM32_CLOCK(APB1,28),rcc STM32_SRC_LSIRTC_SEL(2);statusokay;backup_regs{statusokay;};};zephyr_udc0:usbotg_fs{pinctrl-0usb_otg_fs_dm_pa11usb_otg_fs_dp_pa12;pinctrl-namesdefault;statusokay;};/*注意usb引脚复用pa11pa12*/can1{pinctrl-0can1_rx_pd0can1_tx_pd1;pinctrl-namesdefault;statusokay;};/*注意I2S引脚复用pb12pb13*/can2{pinctrl-0can2_rx_pb12can2_tx_pb13;pinctrl-namesdefault;statusokay;};adc1{#address-cells1;#size-cells0;pinctrl-0adc1_in5_pa5;/*注意网口使用pa1*/pinctrl-namesdefault;st,adc-prescaler2;st,adc-resolutions12;statusokay;channel5{reg5;/* 硬件通道号例如对应的 PA1 是 ADC1_IN1 */zephyr,gainADC_GAIN_1;/* 增益系数 1x */zephyr,referenceADC_REF_INTERNAL;/* 使用内部参考电压 (通常为 VREF) */zephyr,acquisition-timeADC_ACQ_TIME(ADC_ACQ_TIME_TICKS,480);zephyr,resolution12;/* 采样分辨率 12位 */};};adc3{#address-cells1;#size-cells0;pinctrl-0adc3_in5_pf7;/*接光敏电阻*/pinctrl-namesdefault;st,adc-prescaler4;statusokay;channel5{reg5;/* 硬件通道号例如对应的 PA1 是 ADC1_IN1 */zephyr,gainADC_GAIN_1;/* 增益系数 1x */zephyr,referenceADC_REF_INTERNAL;/* 使用内部参考电压 (通常为 VREF) */zephyr,acquisition-timeADC_ACQ_TIME_MAX;zephyr,resolution12;/* 采样分辨率 12位 */};};die_temp{statusokay;};vref{statusokay;};vbat{statusokay;};dma1{statusokay;};plli2s{/* Minimize audio clock error (with i2s mck-enabled) for all of: * - 22.05kHz / 16b, 24b or 32b * - 44.1kHz / 16b, 24b or 32b * - 88.2kHz / 16b or 24b * Note: because the PLLI2S is dependent on the main PLL, the latter * should not be changed without checking impact on PLLI2S */div-m8;mul-n271;div-r2;clocksclk_hse;statusokay;};i2s2{mck-enabled;pinctrl-0i2s2_ws_pb12i2s2_ck_pb13i2s2_sd_pc3i2s2_mck_pc6;//PC2 I2S_SDOUTpinctrl-namesdefault;clocksrccSTM32_CLOCK(APB1,15),rcc STM32_SRC_PLLI2S_RI2S_SEL(0);statusokay;wm8978:wm89780{compatiblewlf,wm8978;reg0;/* I2S 设备索引一般从 0 开始 */statusokay;};};i2c1{pinctrl-0i2c1_scl_pb8i2c1_sda_pb9;pinctrl-namesdefault;clock-frequencyI2C_BITRATE_STANDARD;statusokay;eeprom0:eeprom50{compatibleatmel,at24c02,atmel,at24;/*at24c02*/reg0x50;size256;pagesize8;address-width8;timeout5;};};//sdio_d0_pc8 sdio_d1_pc9 sdio_d2_pc10 sdio_d3_pc11 sdio_ck_pc12 sdio_cmd_pd2sdmmc1{statusokay;pinctrl-0sdio_d0_pc8sdio_d1_pc9sdio_d2_pc10sdio_d3_pc11sdio_ck_pc12sdio_cmd_pd2;pinctrl-namesdefault;disk-nameSD;bus-width4;clk-div4;/*解决日志出现stm32_sdmmc: sd read error 36*/};// spi1 {// status okay;// /*PB3/PB4 和 JTAG 复用‌jlink调试受影响 spi1_nss_pb14 片选*/// pinctrl-0 spi1_sck_pb3// spi1_miso_pb4// spi1_mosi_pb5;// pinctrl-names default;// cs-gpios gpiob 14 GPIO_ACTIVE_LOW;// w25q128: w25q1280 {// compatible jedec,spi-nor;// reg 0;// spi-max-frequency 4000000;// size 0x8000000;// jedec-id [ef 40 18];// };// };mac{statusokay;/* 1. 明确声明 MAC 与 PHY 的连接类型LAN8720 选 rmii */phy-connection-typermii;/* 2. 指向你在 mdio 子节点中定义的 PHY 节点的标签名 */phy-handleethernet_phy;/*定义文件在\modules\hal\stm32\dts\st\f4\stm32f407z(e-g)tx-pinctrl.dtsi*/pinctrl-0eth_ref_clk_pa1eth_crs_dv_pa7eth_rxd0_pc4eth_rxd1_pc5eth_tx_en_pg11eth_txd0_pg13eth_txd1_pg14;pinctrl-namesdefault;/* 绑定 MDIO 总线 */mdio{statusokay;pinctrl-0eth_mdc_pc1eth_mdio_pa2;pinctrl-namesdefault;/* 注意此处的标签名 ethernet_phy 要与上方的 phy-handle 严格一致 *//* LAN8720 PHY 节点配置 */ethernet_phy:ethernet-phy0{compatibleethernet-phy;reg0;/* LAN8720 的 PHY 地址通常为 0 或 1根据硬件引脚 PHYAD0 决定 */statusokay;/* 加入以下复位引脚配置 *//* 下方复位配置不起作用但使用pd3做输出时却可以复位。解决方法工程添加配置 CONFIG_NET_L2_ETHERNETy *//* GPIO_ACTIVE_LOW 对应 LAN8720 的低电平复位特性 */reset-gpiosgpiod3GPIO_ACTIVE_LOW;/* 可选复位延时参数单位微秒 *//* LAN8720 要求复位低电平至少维持 100微秒(us)这里给 50ms足以让 LAN8720 彻底清醒 */reset-assert-duration-us50000;};};};2.添加bootloader工程板级配置zephyrproject\bootloader\mcuboot\boot\zephyr\boards增加 stm32f407_alientek.overlay/{chosen{zephyr,code-partitionboot_partition;};};增加 stm32f407_alientek.conf# 禁用自动计算手动设置最大镜像扇区数根据你的分区大小调整 CONFIG_BOOT_MAX_IMG_SECTORS_AUTOn CONFIG_BOOT_MAX_IMG_SECTORS16CONFIG_LOGy CONFIG_MCUBOOT_LOG_LEVEL_DBGy3.编译bootloader工程烧录。日志[Rx][10:59:27.394] *** Using Zephyr OS build v4.4.0-5153-gb54e0ba58fde ***I: Starting bootloaderD: context_boot_goI: Primary image: magicunset, swap_type0x1, copy_done0x3, image_ok0x3I: Scratch: magicunset, swap_type0x1, copy_done0x3, image_ok0x3I: Boot source: primary slotI: Image index: 0, Swap type: noneD: boot_validate_slot: slot 0, expected_swap_type 0D: Left boot_go with success 0E: Unable to find bootable image创建app工程参考以前的文章不再详细说明。1.修改工程配置#Enable Zephyr application to be booted by MCUbootCONFIG_BOOTLOADER_MCUBOOTy#CONFIG_BOOT_UPGRADE_ONLYy #当 mcuboot 发现 slot1 里有新固件时直接把新固件覆盖到 slot0 并运行不需要做可回滚升级#Use thedefaultMCUBoot PEM keyfile(BOOT_SIGNATURE_KEY_FILE)CONFIG_MCUBOOT_SIGNATURE_KEY_FILEbootloader/mcuboot/root-rsa-2048.pem2.修改vscode launch脚本3.编译烧录。4.日志[Rx][11:01:07.923] *** Using Zephyr OS build v4.4.0-5153-gb54e0ba58fde ***I: Starting bootloaderD: context_boot_goI: Primary image: magicunset, swap_type0x1, copy_done0x3, image_ok0x3I: Scratch: magicunset, swap_type0x1, copy_done0x3, image_ok0x3I: Boot source: primary slotI: Image index: 0, Swap type: noneD: boot_validate_slot: slot 0, expected_swap_type 0D: bootutil_img_validate: flash area 0x800837cD: bootutil_img_hash[Rx][11:01:08.094] D: bootutil_tlv_iter_begin: type 65535, prot 0D: bootutil_img_validate: TLV off 217780, end 218112D: bootutil_tlv_iter_next: searching for 65535 (65535 is any) starting at 217780 ending at 218112D: bootutil_tlv_iter_next: TLV 16 found at 217784 (size 32)D: bootutil_img_validate: EXPECTED_HASH_TLV 16D: bootutil_tlv_iter_next: searching for 65535 (65535 is any) starting at 217816 ending at 218112D: bootutil_tlv_iter_next: TLV 1 found at 217820 (size 32)D: bootutil_img_validate: EXPECTED_KEY_TLV 1D: bootutil_find_keyD: bootutil_tlv_iter_next: searching for 65535 (65535 is any) starting at 217852 ending at 218112D: bootutil_tlv_iter_next: TLV 32 found at 217856 (size 256)D: bootutil_img_validate: EXPECTED_SIG_TLV 32D: bootutil_verify_sig: RSA key_id 0[Rx][11:01:08.214] D: bootutil_tlv_iter_next: searching for 65535 (65535 is any) starting at 218112 ending at 218112D: bootutil_tlv_iter_next: TLV 65535 not foundD: Left boot_go with success 1I: Bootloader chainload address offset: 0x20000I: Image version: v0.0.0[Rx][11:01:08.237]I: Jumping to the first image slot
延伸阅读

更多相关文章

2026/11/5 6:53:03

航天热平衡试验用AM0太阳模拟器:氙灯、卤素灯与LED光源对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 6:53:03

TerriaMap 开发实战01:从零搭建一个可定制的三维地理信息平台

文章目录一、写在前面:为什么是 TerriaJS二、Terria系列:体系里的五个角色三、TerriaMap介绍四、TerriaMap Start教程五、TerriaMap 目录结构六、总结一、写在前面:为什么是 TerriaJS 如果你做过三维 GIS 项目,大概率经历过这样的…

2026/11/5 6:53:03

向量库的存储别绑死一块盘:用 RustFS 给 Milvus 当 S3 对象底座

Milvus 跑起来,向量、索引和一堆相关对象默认写在它自己的本地卷里。单机验证很顺,可一旦向量量上来,本地盘的容量、IO 和单点就成了绕不开的墙。更麻烦的是,向量库的数据量和查询负载往往不是线性增长,一次模型切换就…

2026/11/5 8:28:15

OpenMV与STM32F103C8T6串口通信实现物料搬运机器人视觉控制

简介:这份资源面向参加工程训练类比赛的学生与嵌入式初学者,提供一套基于OpenMV视觉模块与STM32F103C8T6微控制器的物料搬运机器人完整代码方案,用C语言实现图像识别、目标定位与运动控制的协同,解决机器人自主识别物料并完成抓取…

2026/11/5 8:28:15

GEE Assets 批量删除与复制实战指南

资产目录越堆越乱这件事,几乎每个用 Google Earth Engine 做过几个项目的人都躲不过。最初的几个月图省事,导入的影像随手丢在根目录,命名全靠手打,Collection 和 Image 混在一起,等到项目交接或者要清理额度的时候&am…

2026/11/5 8:28:15

BI工具冗余如何拖慢企业决策?破解数据孤岛难题

1. 问题现象:BI工具越多,决策反而越慢的怪圈最近三年接触了47家企业的数据分析团队,发现一个有趣的反常现象:约68%的企业在引入第二个BI工具后,季度经营分析会的决策周期平均延长了2.3个工作日。某零售企业甚至出现了&…

2026/11/5 8:28:15

数字孪生技术架构与实施全解析

1. 数字孪生技术全景解析:从概念到落地实践作为一名长期从事三维可视化与工业数字化的技术从业者,我见证了数字孪生技术从实验室概念到产业落地的完整发展历程。今天,我将系统性地梳理数字孪生领域300个核心术语与技术要点,这些知…

2026/11/5 8:28:15

GIS可视化中色彩科学与ArcGIS色带应用

1. 色彩科学在GIS可视化中的核心价值地理信息系统(GIS)的可视化效果直接影响数据解读效率,而色彩作为最直观的视觉变量,其科学运用尤为关键。在ArcGIS平台中,色带(Color Ramp)不仅是简单的颜色过…

2026/11/5 8:23:15

Go安全测试工具工程化:并发超时、字节解析与限速审计

1. 先把“黑帽子”这三个字摆到台面上:Go 在安全测试里真正吃香的三件事前阵子帮一个做内部资产盘点的团队看代码,他们用某个脚本语言写的探测工具,扫完一个 /16 的网段要跑将近四个小时,中间还因为网络抖动卡死在某个地址上&…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑