当前位置: 首页 > 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.dtcms.com/a/323301.html

相关文章:

  • 国家药品监督管理局医疗器械唯一标识管理信息批量导入mysql工具
  • 算法篇----模拟
  • 企业级高性能web服务器
  • 沿街晾晒识别误检率↓76%:陌讯多模态融合算法实战解析
  • VisionPro常用标定方式
  • 本科毕业论文怎么引用github里面数据集
  • Vue3从入门到精通: 2.2 Vue3组件通信与数据传递深度解析
  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 心灵笔记:正念冥想
  • imx6ull-驱动开发篇16——信号量与互斥体
  • SpringBoot学习日记 Day6:解锁微服务与高效任务处理
  • .NET程序跨平台ARM电脑上发布的程序格式是,so还是DLL?
  • AWT 基本组件深入浅出:Button/Label/TextField/Checkbox/Choice/List 全面实战与性能优化
  • GPT-4 vs GPT-5 深度分析
  • 逻辑回归详解:原理、应用与实践
  • n沟道增强型mos管
  • 支持 UMD 自定义组件与版本控制:从 Schema 到动态渲染
  • Beelzebub靶机通关教程
  • java 中 @NotBlank 和 @NotNull 的区别
  • 【LLM实战|llamaIndex】llamaIndex介绍和RAG
  • dnSpy:设置断点
  • Docker 容器中运行昇腾(Ascend)AI 环境
  • Vitalik谈以太坊:ETH财库储备策略“有益且有价值”
  • SELinux 入门指南
  • vue+flask大模型写诗诗词推荐与可视化系统
  • 代理人工智能的隐藏威胁
  • 【渲染流水线】[几何阶段]-[图元装配]以UnityURP为例
  • Pandas 分层索引
  • AI 大模型企业级应用落地挑战与解决方案
  • 机器翻译:需要了解的数学基础详解