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

嵌入式 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.lryc.cn/news/614938.html

相关文章:

  • Microsoft 365中的Message Encryption (Basic)功能深度解析
  • 【JVM】深入解析Java虚拟机
  • Vitalik谈以太坊:ETH财库储备策略“有益且有价值”
  • Jmeter性能测试之安装及启动Jmeter
  • 检索增强生成:RAG(Retrieval Augmented Generation)
  • 如何在linux(CentOS7)上面安装 jenkins?
  • 【Vapor Mode】Vue 从“运行时“优化转向“编译时“优化的范式跃迁
  • 浏览器自动播放策略
  • OpenAI发布的GPT-5 更新了哪些内容,它的核心能力有哪些?AI编码能力这么强,前端程序员何去何从?
  • FreeRTOS学习笔记:任务通知和软件定时器
  • SpringBoot学习日记 Day6:解锁微服务与高效任务处理
  • 39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本
  • 24SpringCloud黑马商城微服务整合Seata重启服务报错的解决办法
  • Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性
  • 递归---记忆化搜索
  • 八、Linux Shell 脚本:变量与字符串
  • ESP32之wifi_HTTP
  • 商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析
  • 网盘短剧资源转存项目源码 支持垮克 带后台 附教程
  • 深入解析 Apache APISIX 在微服务网关中的性能优化实践指南
  • LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)
  • Swift 实战:秒算两个数组的交集(LeetCode 349)
  • 海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究
  • Selenium使用超全指南
  • Linux运维新手的修炼手扎之第27天
  • 【无标题】AI 赋能日常效率:实用案例与操作心得分享
  • vulhub-Beelzebub靶机
  • 【LeetCode 热题 100】(五)普通数组
  • 版本控制的详细说明介绍(已有github账号版)