Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >IoT固/软件更新及开源选项

IoT固/软件更新及开源选项

作者头像
半吊子全栈工匠
发布于 2018-08-22 01:47:16
发布于 2018-08-22 01:47:16
1.7K0
举报
文章被收录于专栏:喔家ArchiSelf喔家ArchiSelf

物联网的迅速发展涌现了数十亿与互联网连接的无线嵌入式设备。 从医疗设备到坦克传感器, 智能恒温器, 智能路灯, 水监视器等等, 物联网比以往任何时候都应用广泛。

会出什么问题呢?

大多数这些设备的设计都不像是被恶意攻击的目标。 嵌入式系统传统上被认为是稳定的产品, 但实施起来成本高昂, 因为投资回报率(ROI)在的周期比较长。 在过去一旦发货, 就很少需要更新这些设备。 随着智能手机和RTOS的爆发, 才使得固件更新以及应用更新的必要性凸显出来。

假想一下, 恶意黑客将所有这些易受攻击的连接设备作为潜在攻击目标的话, 这些设备运行在不安全或过时的Linux 内核上, 有些漏洞还没有被修补过, 并且可以被远程控制!

这可不是一个有吸引力的场景。

安全更新: 嵌入式与服务器的对比

如今, 升级安全问题驱动了IoT软件的升级更新, 也提高了工程师添加新的功能和修复漏洞可能性。

对于嵌入式设备, 固件更新机制不仅必须是安全的, 而且是可靠的, 因为它要么成功更新, 要么失败到可恢复状态。 一般地, 很难在用户现场升级固件,而需要在无人看管的情况下完成自动升级。 大多数更新也必须保留先前的设备状态, 尽管在某些情况下恢复设备可能涉及将系统重新设置为默认状态。

还有一个原子性问题。 Linux 服务器世界已经习惯于执行基于软件包的更新, 所有的东西似乎都能运行良好。 但是嵌入式设备则不一定。

服务器通常运行在一个可控的环境中, 可能是安全的, 并且有电源的保障和网络连接。 也就是说位于一个受监控的、可访问的位置, 用户干预恢复是可能的, 即使并不是必要条件。

Linux 服务器通常依赖于包管理, 基于 RPM (或 YUM)或基于 deb 的apt , 具有非原子增量更新的依赖辨识。 由包版本更新驱动流程, 每个都有一组复杂的预安装脚本, 这些脚本可能会让系统处于一个未定义的状态, 甚至是非工作状态。

不幸的是, 嵌入式设备可能无法访问, 大部分时间可能处于低功耗模式, 有很长的存活周期, 可能会遭受电力或网络中断的困扰, 从而中断固件升级。

总之, 基于包管理器的更新不是原子的, 因此很难测试和支持它们。 这通常会导致对设备固件实际状态的跟踪, 以及令人畏惧的"上次更新了什么?" 等问题。 这种方法不适合嵌入式系统, 因为这些系统会要求始终保持一致性。

镜像更新

更新嵌入式设备的传统最佳方式是对镜像进行整体更新。 在设备中, 这将是整个镜像和所有的设备固件。 在嵌入式 Linux 设备中, 这通常转化为分区更新, 所以分区方案是一个重要的考虑因素, 因为它将影响可以执行的软件更新类型。

嵌入式 Linux 设备通常将媒介分为不同的分区, 可以分别更新:

  • Bootloader 分区: 如果有的话, 很少更新, 更新嵌入式设备的引导程序最终将导致设备最终被退出。 因此, 完善的更新机制应尽可能避免这种情况。
  • 引导 / 内核分区: Linux 内核和相关固件, 如设备树和 initramfs 镜像,除非为了安全,通常不需要更新。
  • 文件系统分区: 存储的 OS 文件通常是只读且不可变的。 这也很少更新, 但如果应用程序依赖于这里的库, 可能会发生较多的更新情况。
  • 用户分区: 用户应用程序的存储位置和持久性数据是最需要更新的分区。

基本上, 固件镜像更新可以从整个系统:内核、根和用户分区到其中的某些部分。

有两种可能的镜像更新: 对称和非对称。

  • 对称: 对称更新需要更新分区镜像的双重副本, 以便可以在另一个运行时完成更新。 这通常需要两个引导/内核分区、两个根文件系统以及两个用户分区。 然后, bootloader 会跟踪哪些分区用于给定的引导。 对称更新的停机时间很小, 通常只有重启时间, 并允许更新取消。
  • 非对称: 非对称更新使用了一个通常由内存运行的恢复操作系统, 它有一个 Linux 内核和 initramfs 镜像。 这样就减少了所需的分区数量, 因为恢复模式只在一个额外的分区中存在, 并且可以更新其他任何分区。 如果更新失败, 可以重新尝试恢复。 不对称更新在更新时会有较长的下行时间, 并且不允许用户取消。

用户空间更新

通常情况下, 更新由用户空间应用程序执行, 该应用程序可以获取软件更新包, 使用它, 并通知 bootloader 更新。 它还需要允许安装后进行操作。 然后 bootloader 启动一个硬件监视器并尝试启动。 如果引导成功, 那么硬件监视器就会被关闭; 如果不成功, 它就会被触发, bootloader 再次尝试启动。 在多次尝试之后, 它要么回到已知运行良好的分区, 要么进入恢复模式。

一个重要的考虑是, 用户空间固件更新必须通过固件更新进程进行。 另一个风险是, 有可能更新到一个可启动系统, 该系统具有一个已损坏的固件更新机制。 不幸的是, 需要回到 bootloader 或者其他恢复机制来更新固件。

有些系统使用 bootloader 来执行更新。 这存在严重的缺点, 如果固件更新代码必须更新(例如因为分区更改) , 那么需要更新的是 bootloader, 这是非常危险的。 Bootloader 在驱动程序、工具、库和它所支持的网络协议数量方面也非常有限, 因此更新会发生在资源有限的环境中。

基于镜像的开放源码软件更新有两个主要选项, 分别支持对称和非对称更新:

  • Swupdate[1] (GPLv2许可下)

swupdate 在 Yocto 通过 meta-swupdate 层(但仅限于对称更新)来支持 swupdate。 它还包含一个 Mongoose web 服务器—— Suricatta daemon, 可以从一个远程服务器上拉取 Eclipse HawkBit[2]提供的更新新(用于向终端设备执行软件更新的后端解决方案)。 它目前只适用于 U-Boot bootloader。

  • RAUC [3] (在 LGPLv2.1许可下)

RAUC 在 Yocto 通过 meta-ptx 层提供支持, 支持 Grub 或 Barebox bootloader。

远程镜像更新

固件更新过程不仅能够从本地来源(例如 FLASH、 USB、 SD 或 UART)完成更新, 还必须能够远程更新,即通常所说的OTA更新。 OTA更新使用远程服务器向运行在设备上的客户端推送更新。

开源远程 OTA 固件更新的一些选项包括:

  • Mender.io [4](在 Apache 2 许可下)

mender.io同时用于客户端和服务器。它是通过meta-mender层支持Yocto。服务器可以充当部署和构建管理器,但也可包含设备管理控制台。

  • Digi International Remote Manager [5], (在 MPLv2 许可下)

Digi 远程管理器有一个基于云的专属服务器和一个开源客户端。 它通过 meta-digi 层在 Yocto 得到了支持。 服务器可以充当部署和构建管理器, 还包含一个设备管理控制台, 该控制台具有设备报告和监控功能。

  • Eclipse HawkBit [2](在Eclipse公共许可下)

Eclipse HawkBit 是一个 Eclipse公共许可证服务器, 同时充当部署和构建管理器, 以及具有设备报告和监视功能。

全量更新的问题通常是尺寸较大, 可能会导致资源的受限, 尤其是设备端带宽的限制, 如蜂窝网络。 差分惊喜固件更新是一个很好的妥协, 只传输前一版本的查分数据。

容器式更新

使用容器化程序简化了软件更新的用例, 应用程序可以单独更新。

容器更新是建立在一个不可变的分发上(可能是只读文件系统) , 其应用程序只存在于容器升级的容器中。

一些使用基于容器的固件更新的开源项目的例子有:

  • Resin.io [6]

resin.io基于Docker的专有OTA更新服务器,遵从Apache 2 的许可,包括服务器和客户端。它是通过meta-resin层来支持Yocto的。

  • Ubuntu “Snappy” Core [7]

Ubuntu Core 是一个基于 Ubuntu 的最小化操作系统, 它提供了与docker类的应用程序。

还有新的 OS 设计来支持 Docker 应用程序, 这些应用程序最终可能用于嵌入式空间, 如 CoreOS[8] 和 Project Atomic 9。

增量二进制原子化OS更新

在嵌入式领域中,一个即将到来的趋势是对每个文件的原子化增量更新, 可以快速部署或回滚, 同时保持完整的部署历史。

一些开源项目:

  • libOSTree [10]

libOSTree 由一个库和命令行工具组成, 定义为"操作系统二进制文件的 Git"。 它使用类似 git 的对象来存储和部署 OS 查分包, 每个都有一个持久的数据副本。 对于使用它的 Yocto, 有一个 meta-updater 层,也被用于类似于 Atomic 的OS更新。

  • swupd [11]

swupd 最初是 ClearLinux 的一部分, 由英特尔赞助。 它非常类似于 libOSTree, 在 Yocto 通过 meta-swupd 层提供支持。

选择范围

随着物联网设备的出现, 不仅固件更新是必要的, 而且新产品开发同样必要。 固件更新策略的选择需要尽早考虑, 因为这将影响到未来的产品设计决策。 与所有早期的决定一样, 错误的选择会给发展带来沉重的负担。

那些时间与市场紧密相连的项目可能会倾向于更传统的、经过测试的、完整的固件更新策略。 这些包括通过 Yocto Project 的 meta-swupdate 层提供的各种技术, 以及像 Digi International 的 Remote Manager 这样的为企业准备的 OTA 更新方案。

然而, 在新涌现的边缘项目可以通过类似容器设计,来扩展整个系统固件的更新方法, 使应用程序能够从系统更新中分离出来。

References:

[1] "SWUpdate: Software update for embedded system." SWUpdate: software update for embedded system — Embedded Software Update Documentation 2017.07 documentation. Accessed September 14, 2017. https://sbabic.github.io/swupdate/swupdate.html.

[2] Beaton, Wayne. "Eclipse hawkBit." Projects.eclipse.org. October 20, 2016. Accessed September 14, 2017. https://projects.eclipse.org/projects/iot.hawkbit.

[3] "Safe and Secure Updating!" Safe and secure embedded Linux updates | RAUC. Accessed September 14, 2017. http://rauc.io/.

[4] "Over-the-air software updates for embedded Linux devices." Open source OTA software updates for embedded Linux | Mender. Accessed September 14, 2017. https://mender.io/.

[5] "Digi Remote Manager®." Monitor and Manage Remote Connected Devices - Digi International. Accessed September 14, 2017. https://www.digi.com/products/cloud/digi-remote-manager.

[6] "Embedded software deployment done right." Home | Resin.io. Accessed September 14, 2017. https://resin.io/.

[7] Canonical. "Ubuntu Core." Ubuntu Core | Ubuntu. Accessed September 14, 2017. https://www.ubuntu.com/core.

[8] "CoreOS." CoreOS Blog ATOM. Accessed September 14, 2017. https://coreos.com/.

[9] "Building the Next Generation Container OS." Project Atomic. Accessed September 14, 2017. http://www.projectatomic.io/.

[10] OSTree. Accessed September 14, 2017. https://ostree.readthedocs.io/en/latest/.

[11] "Software update." Clear Linux Project. April 25, 2016. Accessed September 14, 2017. https://clearlinux.org/features/software-update.

编译自http://www.embedded-computing.com/dev-tools-and-os/identifying-secure-firmware-update-mechanisms-for-embedded-linux-devices-and-open-source-options

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喔家ArchiSelf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
线性代数的历史
一般理工科专业在本科都要学习微积分、线性代数、概率统计三门数学课程。微积分和概率统计两门课程的用途在学习过程中立竿见影。可是线性代数有什么用,初学者常常摸不到头脑。包括我本人大一时学习高等代数时也不太感兴趣。若干年之后对数学学科有了更深的整体性认识,返回头再看线性代数的确是非常重要。相信很多理工科学生是读研甚至工作之后才意识到线性代数的重要性。
用户9861443
2024/04/01
3660
线性代数的历史
当代最伟大数学家讲述二十世纪的数学
本文作者Michael Atiyah爵士,英国数学家,被誉为当今最伟大的数学家之一。 ◆ ◆ ◆ 导言 谢谢邀请我来这里参加这个活动。当然,如果有人想谈论一个世纪的终结以及下一个世纪的开始,那么他有两个具有相当难度的选择:一个是回顾过去百年的数学;另一个是对未来百年数学发展的预测,我选择了前面这个比较困难的任务,任何人都可以预测未来而且我们并不能判定是对还是错。然而对过去的任何评述,每个人都可以提出异议。 我在这里所讲的是我个人的观点。这个报告不可能包含所有内容,特别是,有一些重要的内容我不准备涉及,一
大数据文摘
2018/05/25
1K0
行列式的本质与功能解析-我的数学观
行列式可以理解为一种特殊类型的函数,但其数学内涵和应用场景远超普通函数。以下从多个角度展开说明:
jack.yang
2025/04/05
1650
机器学习数学基础:不用行列式的线性代数
在微信公众号上阅读本文,可能会由于微信内嵌浏览器公式解析能力差,造成显示不是很友好,推荐使用其他浏览器,查阅原文阅读。原文地址:https://qiwsir.gitee.io/mathmetics/nodeterminant.html
老齐
2021/04/19
7230
Cramer法则-我的数学观
18世纪中叶,数学家Gabriel Cramer在研究n元线性方程组时,发现了一个惊人的规律:对于形如
jack.yang
2025/04/05
2360
Cramer法则-我的数学观
透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵
线性代数是用来描述状态和变化的,而矩阵是存储状态和变化的信息的媒介,可以分为状态(静态)和变化(动态)信息来看待。
周陆军
2018/03/27
7.4K7
透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵
高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程
Angel_Kitty
2018/04/09
21.1K0
高斯消元法(Gauss Elimination)【超详解&模板】
机器学习的数学基础
向量空间一组基中的向量如果两两正交,就称为正交基;若正交基中每个向量都是单位向量,就称其为规范正交基。
iOSDevLog
2019/05/30
1.3K0
“芯片砸钱不行,得砸数学家”!8本烧脑数学书,大牛都在看
导读:不久前,任正非在访谈中提到 :“芯片砸钱不行,得砸数学家、物理学家、化学家……”任正非认为,基础教育与科技创新关系密切,基础研究有突破才能更好地促进科技发展。
IT阅读排行榜
2019/06/28
1K0
“芯片砸钱不行,得砸数学家”!8本烧脑数学书,大牛都在看
线性代数知识汇总
线性代数是代数学的一个分支,主要处理线性关系问题。线性关系意即数学对象之间的关系是以一次形式来表达的。例如,在解析几何里,平面上直线的方程是二元一次方程;空间平面的方程是三元一次方程,而空间直线视为两个平面相交,由两个三元一次方程所组成的方程组来表示。含有 n个未知量的一次方程称为线性方程。变于关量是一次的函数称为线性函数。线性关系问题简称线性问题。解线性方程组的问题是最简单的线性问题。
章鱼猫先生
2021/10/15
1.5K0
线性代数知识汇总
梦想成为诗人的数学差生,刚刚获得了菲尔兹奖
文章选摘自《素数的阴谋》 中信出版社出版 作者:凯文·哈特尼特 每隔四年,国际数学家会通过选出几位在数学领域最有潜力的40岁以下的数学家,表彰他们杰出的数学成就。这就是数学届鼎鼎大名的菲尔兹奖,每四年在国际数学家大会上颁发一次。 清华大学教授丘成桐于1982年成为首位菲尔兹奖华人得主,澳大利亚籍华裔陶哲轩于2006年获得菲尔兹奖。 今年的7月5日,芬兰赫尔辛基阿尔托大学公布4位年轻数学家获得2022年“菲尔兹奖”。 美国普林斯顿高等研究院June Huh,“表彰其将霍奇理论的思想引入组合学,证明了几何格的D
大数据文摘
2022/07/07
4190
梦想成为诗人的数学差生,刚刚获得了菲尔兹奖
计算机中的数学【集合论】现代数学的共同基础
现代数学有数不清的分支,但是,它们都有一个共同的基础——集合论——因为 它,数学这个庞大的家族有个共同的语言。集合论中有一些最基本的概念:集合(set),关系(relation),函数(function),等价 (equivalence),是在其它数学分支的语言中几乎必然存在的。对于这些简单概念的理解,是进一步学些别的数学的基础。我相信,理工科大学生对于 这些都不会陌生。
一个会写诗的程序员
2018/08/17
1.2K0
德国最有影响力的十位数学家
最具有革命性的数学家 康托尔,两千多年来,科学家们接触到无穷,却又无力去把握和认识它,这的确是向人类提出的尖锐挑战。康托尔以其思维之独特,想象力之丰富,方法之新颖绘制了一幅人类智慧的精品——集合论和超穷数理论,令19、20世纪之交的整个数学界、甚至哲学界感到震惊。可以毫不夸张地讲,“关于数学无穷的革命几乎是由他一个人独立完成的。”而他创立的集合论,已经成为了现代数学基础理论大厦。
深度学习技术前沿公众号博主
2020/05/18
2K0
Jacobian矩阵和Hessian矩阵
还记得被Jacobian矩阵和Hessian矩阵统治的恐惧吗?本文清晰易懂的介绍了Jacobian矩阵和Hessian矩阵的概念,并循序渐进的推导了牛顿法的最优化算法。希望看过此文后,你对这两类矩阵有一个更深刻的理解。
小白学视觉
2022/02/12
1K0
Jacobian矩阵和Hessian矩阵
【转载】理解矩阵(一)
线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙。比如说,在全国一般工科院系教学中应用最广泛的同济线性代数教材(现在到了第四版),一上来就介绍逆序数这个“前无古人,后无来者”的古怪概念,然后用逆序数给出行列式的一个极不直观的定义,接着是一些简直犯傻的行列式性质和习题——把这行乘一个系数加到另一行上,再把那一列减过来,折腾得那叫一个热闹,可就是压根看不出这个东西有嘛用。大多数像我一样资质平庸的学生到这里就有点犯晕:连这是个什么东西都模模糊糊的,就开始钻火圈表演了,这未免太“无厘头”了吧!于是开始有人逃课,更多的人开始抄作业。这下就中招了,因为其后的发展可以用一句峰回路转来形容,紧跟着这个无厘头的行列式的,是一个同样无厘头但是伟大的无以复加的家伙的出场——矩阵来了!多年之后,我才明白,当老师犯傻似地用中括号把一堆傻了吧叽的数括起来,并且不紧不慢地说:“这个东西叫做矩阵”的时候,我的数学生涯掀开了何等悲壮辛酸、惨绝人寰的一幕!自那以后,在几乎所有跟“学问”二字稍微沾点边的东西里,矩阵这个家伙从不缺席。对于我这个没能一次搞定线性代数的笨蛋来说,矩阵老大的不请自来每每搞得我灰头土脸,头破血流。长期以来,我在阅读中一见矩阵,就如同阿Q见到了假洋鬼子,揉揉额角就绕道走。
marsggbo
2018/12/27
4800
线性代数的本质-课程笔记(上)
本文根据线性代数的本质课程整理得到。 00 - “线性代数的本质”系列预览:https://www.bilibili.com/video/av5977466?from=search&seid=213
石晓文
2019/09/03
9330
线性代数的本质-课程笔记(上)
啊!再见吧!我的行列式~
当你听完线性代数中矩阵各种厉害,各种应用,然后提了提裤子冲入线性代数的世界,会发现出现了行列式,代数余子式,等等的东西,和你想象的那个变换,映射的世界相差甚远。
云深无际
2024/08/21
1690
啊!再见吧!我的行列式~
呆在家无聊?何不抓住这个机会好好学习!
本公众号一向坚持的理念是数据分析工具要从基础开始学习,按部就班,才能深入理解并准确利用这些工具。鼠年第一篇原创推送比较长,将从基础的线性代数开始。线性代数大家都学过,但可能因为联系不到实用情况,都还给了曾经的老师。线性代数是数理统计尤其是各种排序分析的基础,今天我将以全新的角度基于R语言介绍线性代数,并手动完成PCA分析,从而强化关于线性代数和实际数据分析的联系。
SYSU星空
2022/05/05
8350
呆在家无聊?何不抓住这个机会好好学习!
博客 | MIT—线性代数(下)
1、 投影矩阵与最小二乘:向量子空间投影在机器学习中的应用最为广泛。就拿最小二乘的线性拟合来说,首先根据抽样特征维度假设线性方程形式,即假设函数。
AI研习社
2018/12/28
1.5K0
博客 | MIT—线性代数(下)
hesse矩阵和jacobi矩阵_安索夫矩阵和波士顿矩阵区别Jacobian矩阵和Hessian矩阵
转载自:http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/
全栈程序员站长
2022/09/20
1.1K0
相关推荐
线性代数的历史
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档