原标题:嵌入式Linux的OTA更新,现有更新系统的比较

在基本原理和实现文章中,我们讨论了嵌入式Linux更新系统的基础和实现。在这里,我们讨论了一些现成的开源更新系统,这些系统现在可以与您的Embedded Linux项目集成。

此更新系统非常专业,可以立即使用。它使用的双rootfs更新系统与上一篇文章中描述的系统非常相似。它与U-Boot紧密集成,以便在非引导映像的情况下进行回退。

Mender入门非常容易,因为关于如何设置和集成各种组件的良好分步文档非常清晰。它们在Raspberry Pi和BeagleBone Black等流行平台上提供参考实现,它们可以使您了解使其在平台上工作所需的工作量。

我发现整合和工作大约花了三天时间。为了使其与我的Yocto构建设置(基于Morty)一起使用,进行了许多小的更改。它需要一些OpenEmbedded专业知识来解决这些问题。需要U-Boot专业知识才能正确集成双启动机制。

最后,它输出一个“ sdimg”,其中包含引导加载程序和文件系统,需要以某种方式将其写入闪存。如何执行此操作取决于您的目标硬件。它还输出所谓的“工件”,其中包含新的文件系统映像和各种元数据。

可以通过Mender命令行工具进行人工安装,以进行手动安装(理论上可以从USB记忆棒扩展到自动安装)。工件也可以通过Web界面上传到后端更新Web服务上,并可以从此处下推到各个单元。

控制后端更新服务器的Web界面设计合理,易于使用。设置是通过Docker完成的,这使得初始设置非常简单。完整的生产就绪系统将需要Docker专业知识。在此Web界面中,您可以在该字段中查看所有当前已部署的设备,并分别或按组向其推送更新。

图1:Mender包含一个定制的Web界面,用于将更新推送到设备

Mender的大多数都是用Go编程语言编写的。Go的一些专业知识对于长期采用和生产发布将是必需的。尽管在嵌入式世界中这仍然是一种罕见的语言,但在将来它可能会变得越来越广泛。

您被绑定到单个硬编码的引导设备(例如:/ dev / mmcblk0),因此没有直接的方法允许从多种介质引导。它还对您的系统做出了许多假设,例如引导程序和内核中的各种选项(例如:包括对某些文件系统的支持)。至关重要的是,它要求使用systemd,这可能使其不适用于某些项目。

更新

此更新系统是高度可配置的。您可以使用大多数嵌入式Linux开发人员都熟悉的“ kconfig”系统对其进行配置。有关配置选项的一些示例:它支持多个引导加载程序(U-Boot,GRUB,EFI Boot Guard);它可以根据给定的公钥对签名的图像进行签名和验证;它可以支持使用对称密钥加密的图像加密。

图2:SWUpdate的配置系统

每次更新都包含一个CPIO存档,其中包含以“ sw-description”文件和执行该更新所需的实际数据文件形式的元数据。通常将包含文件系统列表以及应将文件系统放置在哪些块设备中。更新文件必须由用户手动创建。它不会脱离构建系统。

与Mender不同,SWUpdate不会介入并处理有关如何设置系统的详细信息。Mender将为您修补u-boot环境,SWUpdate将需要您自己制定“乒乓” AB双重rootfs的底层实现细节。

SWUpdate可以提供命令行安装。它还提供了类似于Mender的后端更新系统,该系统基于Eclipse hawkBit,它与在名为“ Suricatta”的目标上运行的守护程序一起运行,该守护程序处理对SWUpdate的调用。它还可以在设备本身上运行嵌入式http服务器,从中可以上传和安装更新。

默认情况下,它提供精简的映像配方,旨在作为initramfs恢复映像运行。从到目前为止的经验来看,该系统似乎是为通过双重rootfs更新进行恢复分区更新而设计的(在上一篇文章中已讨论了它们的优缺点)。将双重rootfs更新与后台OTA更新守护程序“ Suricatta”集成在一起似乎是不可能的,或者至少是非常困难的。

大多数SWUpdate用C编写,因此大多数嵌入式Linux开发人员可以轻松地进行修改或执行调试。开发人员还将“处理程序”的思想纳入了应用程序,以允许其他编码人员轻松扩展。这些可以实现额外的更新功能,例如将固件下载到板上的其他芯片。

像Mender一样,SWUpdate对用户提出了一些要求,但由于系统的可配置性,这些要求受到限制,有些甚至是可选的。

RAUC

RAUC被设计为比前两个更新系统更轻巧的更新系统,主要二进制文件仅约2个。512K与SWUpdate的130万和Mender的690万相比(这些是基于Yocto的输出进行的粗略计算,未考虑依赖关系,不同的构建目标等)。

它从构建系统输出所谓的“捆绑包”。这些捆绑软件包含压缩的文件系统和元数据。它们始终需要进行数字签名,这是RAUC的核心设计理念。它将文件系统映像编程到各种“插槽”中,然后可以将它们标记为正在工作或损坏或准备进行更新。它将与引导加载程序环境交互以决定是否

RAUC在内核中需要某些选项(例如:对SQUASHFS的支持),并且在根文件系统中也具有某些软件依赖性。RAUC与SWUpdate一样,也是用C编写的。它没有实现Mender和SWUpdate可以做到的流传输。

与SWUpdate一样,它支持使用Eclipse hawkBit作为后端更新系统,从而使您可以从Web界面下推对设备的更新。

图3:Eclipse hawkBit可以用作将更新推送到设备的Web界面,可以与RAUC和SWUpdate集成

结束语

在此未提及基于文件的更新系统(如上一篇文章中所述)。为简洁起见,其他人则错过了。

使用哪种系统的决定实际上取决于项目。看来Mender可能更容易入门,而SWUpdate可能对于与已经部分内部开发的更新系统集成很有用,并且RAUC可以用作SWUpdate的替代方法。返回搜狐,查看更多

责任编辑:

arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较相关推荐

  1. 电脑向linux板卡传文件,ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

    ARM 开发板嵌入式linux系统与主机PC通过串口传输文件 本来以为按以下两篇文章就可以几步轻松搞定这个问题,没想到遇到两个小麻烦: 1,我用的xp虚拟机下redhat9.0做主机,按照下面第一篇文 ...

  2. 嵌入式linux数控系统,关于ARM+DSP嵌入式Linux数控系统设计.pdf

    2012年 7月 机床与液压 Ju1.2012 第40卷 第 13期 MACHINE TOOL &HYDRAULICS Vo1.40No.13 DOI:10.3969/j.issn.1001- ...

  3. 《嵌入式Linux应用开发完全手册》——1.2 基于ARM处理器的嵌入式Linux系统

    本节书摘来自异步社区<嵌入式Linux应用开发完全手册>一书中的第1章,第1.2节,作者 韦东山,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.2 基于AR ...

  4. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

  5. 嵌入式系统、linux和嵌入式linux的区别

    这几个东西比较容易混淆 嵌入式系统: IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:"用于控制.监视或者辅助操作机器和设备的装置".原文为:Devices Used to ...

  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之按键驱动框架

    文章目录 前言 1.APP怎么读取按键值 1.1.查询方式 1.2.休眠-唤醒方式 1.3.poll方式 1.3.异步通知方式 1.5. 驱动程序提供能力,不提供策略 2.按键驱动程序框架--查询方式 ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离

    文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...

  8. 基于嵌入式linux电子相册设计,用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发...

    用于LINUX或者嵌入式LINUX的电子相册程序,基于QT开发,包含源代码和编译好的可执行程序 linux_project\album\album.pro .............\.....\al ...

  9. 嵌入式linux 升级,嵌入式Linux的OTA更新,基本原理和实现

    需要更新 一旦嵌入式Linux产品离开实验室并进入现实世界,如何更新设备的问题就变得至关重要. 更新并非总是必要的,但是很难想到没有某个漏洞的软件.即使您的软件是完美的,但是如果设备通过任何开放源代码 ...

最新文章

  1. 浙二大数据朱继红_快看!浙经贸2020级新生趣味大数据来咯!
  2. Java过滤特殊字符的正则表达式
  3. 远程ubuntu虚拟机Tensorflow搭建 - 1 SSH连接
  4. 使用Java程序输出1~100之间 7的倍数的个数及总和,并打印输出
  5. 自然语言处理应用和过程的一些理解
  6. php如何写一个能让外部访问的接口,如何写一个接口供外界访问
  7. mysql架设_主从mysql架设
  8. 1.6_quick_sort_快速排序
  9. 为了机器学习把MacBook Pro换成Asus TUF Gaming 全家桶
  10. 铲雪车(信息学奥赛一本通-T1374)
  11. 游戏界面设计艺术性的思考
  12. 第四篇:读《穷查理宝典》
  13. k8s部署zabbix_基于k8s平台的Zabbix压力测试
  14. 【华为OD机试真题 python】羊、狼、农夫过河【2022 Q4 | 100分】
  15. 有趣的小白鼠尝毒问题:二进制秒哉!
  16. 跟面试官谈【线程池】
  17. 图片去水印有什么好的工具吗?怎么去除水印?
  18. 微型计算机英语怎么写,微机用英语怎么说
  19. PMP报名需要注意什么?特别提醒
  20. PandoraBox设置桥接作无线终端

热门文章

  1. GitHub标星5.6K,2020腾讯又一力作开源的Android UI框架——QMUI Android
  2. hdu 1757(矩阵快速幂)
  3. Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析
  4. sqlserver数据库18456错误怎么解决?
  5. 【BZOJ 1062】 1062: [NOI2008]糖果雨 (二维树状数组)**
  6. 微信退款回调AES算法(AES-256-ECB)
  7. 《软件方法》读后感-三年前端开发的思考,如何有效地阅读需求?
  8. 周鸿祎亲自站台,360年度新旗舰究竟有何特别?
  9. [附案例]如何运营私域流量,提升用户终身价值,降低整体获客成本?
  10. Axure获取焦点动画