当前位置: 首页 > web >正文

嵌入式 Linux Mender OTA 实战全指南


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


嵌入式 Linux Mender OTA 实战全指南

前言

在嵌入式 Linux 项目中,OTA(Over-The-Air)升级是保障设备长期可维护性与安全性的关键能力。Mender 是一套开源且可商用的端到端 OTA 方案,提供了客户端、升级包格式、分区策略以及云端管理平台。本篇文章将以实战为核心,详细介绍如何在 Yocto 环境中集成 Mender,实现从构建 .mender 升级包到设备自动更新的完整流程。


一、Mender 架构概览

Mender OTA 由三部分组成:

  1. mender-client(设备端)

    • 运行在目标设备中,负责下载、校验、安装更新包,并在升级成功后确认状态。
  2. Mender Server(云端/本地部署)

    • 管理设备、分发 OTA 包、跟踪部署进度。
  3. 构建集成工具

    • meta-mender:Yocto 集成层,自动完成 OTA 分区布局、客户端集成、升级包生成。
    • mender-artifact:打包升级包的命令行工具。

数据流:

Mender Server  ⇄  mender-client  → 备用 rootfs 分区

在这里插入图片描述


二、OTA 核心机制

1. 分区策略(A/B 分区)

  • 两个功能相同的 rootfs 分区(slot A / slot B)
  • 一个 data 分区存放持久化数据
  • 当前运行的分区不参与升级,更新写入备用分区

2. Bootloader 变量与回滚机制

  • upgrade_available=1:标记试运行状态
  • bootcount:记录试运行启动次数
  • mender_boot_part:指定启动分区
  • 如果试运行阶段没有确认(commit),Bootloader 自动回滚到旧分区

3. 升级成功的判断

  • 试运行系统启动 → mender-client 启动 → 成功运行并上报状态 → 执行 commit → 清除 upgrade_availablebootcount

三、Yocto 集成 Mender

1. 加入 meta-mender

bblayers.conf 中添加:

${TOPDIR}/sources/meta-mender/meta-mender-core \

(可选:meta-mender-demometa-mender-qemu

2. 配置 local.conf

INHERIT += "mender-full"
IMAGE_FSTYPES += "mender"MENDER_FEATURES_ENABLE += "mender-image mender-uboot"   # 或 mender-grubMENDER_STORAGE_DEVICE = "/dev/mmcblk2"
MENDER_BOOT_PART_SIZE_MB = "64"
MENDER_DATA_PART_SIZE_MB = "1024"
MENDER_PARTITION_ALIGNMENT_MB = "4"MENDER_DEVICE_TYPE = "imx8mp-lpddr4-ocean"
MENDER_ARTIFACT_NAME = "ocean-1.0.0"MENDER_SERVER_URL = "https://hosted.mender.io"
MENDER_TENANT_TOKEN = "<your-tenant-token>"

3. 生成签名密钥(可选)

openssl genrsa -out mender-artifact-priv.key 3072
openssl rsa -in mender-artifact-priv.key -outform PEM -pubout -out mender-artifact-pub.key

local.conf 中添加:

MENDER_ARTIFACT_SIGNING_KEY = "${TOPDIR}/keys/mender-artifact-priv.key"
MENDER_ARTIFACT_VERIFY_KEY = "${TOPDIR}/keys/mender-artifact-pub.key"

4. 构建镜像

bitbake core-image-base

产物:

tmp/deploy/images/<machine>/<image>.mender  # OTA 包
tmp/deploy/images/<machine>/<image>.sdimg   # 烧录镜像

四、Mender Server 端部署与上传

1. Hosted Mender(官方云)

  • 注册账号 → 获取 Tenant Token
  • local.conf 中配置 MENDER_SERVER_URLMENDER_TENANT_TOKEN

2. 自建 Mender Server(开源版)

  • 使用 Docker Compose 部署
  • 官方仓库:https://github.com/mendersoftware/mender-server

3. 上传 OTA 包

使用 mender-cli:

mender-cli login --username <email> --password '<pwd>' --server hosted.mender.io
mender-cli artifacts upload \--description "ocean 1.0.0" \--compatible-devices imx8mp-lpddr4-ocean \tmp/deploy/images/<machine>/<image>.mender

五、设备端运行

  1. 烧录 .sdimg 到设备

  2. 设备启动后 mender-client 会向 Server 注册

  3. 在 Server 上为设备分配 OTA 包并部署

  4. 升级流程:

    • 下载 OTA 包(传输阶段)
    • 写入备用 rootfs(写入阶段)
    • 设置 Bootloader 变量
    • 重启试运行
    • commit 成功 → 升级完成

六、实战注意事项

  • 空间规划:A/B 分区会使 rootfs 占用翻倍
  • 设备类型匹配MENDER_DEVICE_TYPE 必须与 OTA 包兼容字段一致
  • 引导方式选择:U-Boot vs GRUB
  • 网络容错:利用断点续传避免大文件下载失败
  • 安全性:生产环境务必开启签名验证

七、对比 RAUC

特性MenderRAUC
OTA 平台有(Server)无(需自建)
分区管理自动(meta-mender)手动配置
升级包格式.mender Artifact.raucb Bundle
回滚机制内置支持(需配置)
差分更新商业版支持可配合外部实现

八、结语

Mender 在 Yocto 项目中的集成非常成熟,通过 meta-mender 层可以快速构建出支持 A/B 分区、回滚机制、签名验证的嵌入式 OTA 系统。结合 Hosted Mender 或自建 Server,就能形成一套安全、可维护、可扩展的 OTA 方案。

📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
🎥 更多学习视频请关注 B 站:嵌入式Jerry


http://www.xdnf.cn/news/17504.html

相关文章:

  • 上海AI Lab、浙大EagleLab等提出RRVF:利用「验证非对称性」,只输入图片学习视觉推理
  • 【LLM】Openai之gpt-oss模型和GPT5模型
  • NestJS Config 入门教程
  • 自动生成视频的AI大模型高效创作指南
  • Java Stream API 实战:提升集合处理的效率与可读性!
  • 微雪电子发布工业级ESP32-S3-POE工控板:8路隔离IO,双核240MHz赋能AIoT,一根网线解决供电与通信,工业物联网迎来高性价比控制新选择
  • 关键点检测(10)——yolov8-pose 复现coco-pose
  • 【QT】QMainWindow:打造专业级桌面应用的基石
  • Python基础教程(七)匹配模式:隐藏在结构之美中的编程革命
  • 实用Shell高级视频课程
  • 【CVPR2025】计算机视觉|PX:让模型训练“事半功倍”!
  • Uipath Studio中邮件自动化
  • 微信小程序中实现表单自动填充功能的方法
  • ABP VNext + Apache Kafka Exactly-Once 语义:金融级消息一致性实战
  • 在Docker中下载RabbitMQ(详细讲解参数)
  • 需求管理流程规范
  • Java-file类
  • Mybatis学习之自定义映射resultMap(七)
  • STM32CubeMX(十三)FatFs文件系统(SPI驱动W25Qxx)
  • BGP 笔记
  • 配送算法10 Batching and Matching for Food Delivery in Dynamic Road Networks
  • .NET程序跨平台ARM电脑上发布的程序格式是,so还是DLL?
  • stm32项目(24)——基于STM32的汽车CAN通信系统
  • 费米问题:估算北京有多少量特斯拉汽车?
  • 等保测评-RabbitMQ中间件
  • 【线性代数】目录
  • day 16 stm32 IIC
  • STM32——时钟系统
  • WinForm 中 ListView 控件的实战应用与功能拓展
  • Bee 2.5.2.6 发布