嵌入式Linux的OTA更新,基础知识和实现

OTA updates for Embedded Linux, Fundamentals and implementation

更新的需要

一旦嵌入式Linux产品离开实验室进入现实世界,如何更新设备的问题将成为重要的考虑因素。

更新并不总是必要的,但是很难想象任何一个软件都没有在某个时刻被发现的bug。即使您的软件是完美的,如果设备在网络或internet上与任何开放源代码库通信,安全更新也可能成为必要。

以CVE-2104-01650(心血)为例。此漏洞影响了OpenSSL加密库,并扩展到网络上三分之二的网站。即使在三年后的今天,仍有许多嵌入式Linux设备运行着OpenSSL的不设防版本,完全可以被攻击。

阻止vs文件更新

当谈到更新Linux时,您可能会看到提到了“块”和“文件”更新系统。这是指通过直接写入块设备或更新单个文件来执行更新,一次更新整个分区。您可能熟悉桌面或服务器Linux的文件更新系统(“例如sudo apt get upgrade”)。

在嵌入式Linux中,基于块的升级是可行的,因为它们具有原子性,而且整个文件系统通常都是嵌入式Linux构建系统的输出。对于特定的产品,我们希望每个嵌入式设备上的存储空间是恒定的,所以我们每次都创建相同大小的分区。这种类型的更新与某种回退或恢复映像密切相关。

故障时的恢复

我们绝不希望设备处于不可用状态(例如,如果发生停电)。我们可以通过确保在更新过程中发生任何错误时始终可以“退回”到另一个分区来解决这个问题。

更新的需要

一旦嵌入式Linux产品离开实验室进入现实世界,如何更新设备的问题将成为重要的考虑因素。

更新并不总是必要的,但是很难想象任何一个软件都没有在某个时刻被发现的bug。即使您的软件是完美的,如果设备在网络或internet上与任何开放源代码库通信,安全更新也可能成为必要。

以CVE-2104-01650(心血)为例。此漏洞影响了OpenSSL加密库,并扩展到网络上三分之二的网站。即使在三年后的今天,仍有许多嵌入式Linux设备运行着OpenSSL的不设防版本,完全可以被攻击。

阻止vs文件更新

当谈到更新Linux时,您可能会看到提到了“块”和“文件”更新系统。这是指通过直接写入块设备或更新单个文件来执行更新,一次更新整个分区。您可能熟悉桌面或服务器Linux的文件更新系统(“例如sudo apt get upgrade”)。

在嵌入式Linux中,基于块的升级是可行的,因为它们具有原子性,而且整个文件系统通常都是嵌入式Linux构建系统的输出。对于特定的产品,我们希望每个嵌入式设备上的存储空间是恒定的,所以我们每次都创建相同大小的分区。这种类型的更新与某种回退或恢复映像密切相关。

故障时的恢复

我们绝不希望设备处于不可用状态(例如,如果发生停电)。我们可以通过确保在更新过程中发生任何错误时始终可以“退回”到另一个分区来解决这个问题。

图2. 发生故障时的恢复-Board Management Controller

这当然是一个复杂的解决方案,需要一个额外的微控制器、一套新的固件和更复杂的硬件设计(它用于某些设备,例如那些包含独立的智能平台管理接口(IPMI)控制器的设备)。因此,您应该致力于构建一个功能强大、范围小、因此不需要更新的引导加载器。
U-Boot环境变量

U-boot实现了一个可以存储变量的非易失性“环境”。甚至可以从Linux访问这些文件。

这是实现上述“开关”的最明显的方法。它还可以用来存储有关以前引导成功或失败的信息,以便在引导失败的情况下可以反转交换机并恢复工作分区。

图3. U-boot环境变量

设置看门狗

处理器的硬件看门狗应该通过U-Boot(CONFIG_-watchdog)设置,然后在引导完成后由Linux进行维护。这将导致整个系统挂起时重置。

正在检查引导失败

一旦您的任务关键型应用程序正在运行,它应该在u-boot环境中设置一个变量,指示完成引导。然后,U-boot将能够在下次引导时检查是否已设置了此选项,并在引导失败时采取措施(有时仅在连续几次失败之后)。

具体的体系结构将取决于您的应用程序和产品;您需要对其进行一点定制,以满足您的需要。您将需要确定所有可能的故障模式,并对所有模式执行恢复。

实施更新

正如我们之前所说的,更新应该是一个单独的加密签名文件。私钥签名确保其来源于制造商您。现在,系统只需要将其解压并运行一个脚本,该脚本将自行执行更新。它将覆盖要更新的分区;轻触任何需要的开关并重新启动。这应该尽快进行,以尽量减少停机时间。

保护更新

我们要确保我们提供给设备的更新文件来自我们制造商,而不是来自其他人。为此,更新文件使用制造商持有的私钥进行签名。相应的公钥是设备上保存的,它将验证请求它执行更新的任何更新文件。如果提供的文件被视为无效,则更新将失败。

正在获取更新

更新如何到达是另一回事。这里有四种可能性:

最明显、最简单的一点是,更新是由一个拥有根用户登录设备的工程师应用的。他运行更新脚本并更新设备。这充满了安全问题,可能只适合于开发中的系统,或者工程或工业环境中使用的系统。

将物理介质插入包含所需更新的设备(U盘)中。板上的软件将通过轮询守护程序或udev规则自动检测和安装。

通过某种方法(例如web应用程序)将更新文件上载到单个计算机。

无线更新,如下一节所述。

无线更新

“空中传送”(OTA)更新通常指通过安全通道从中央服务器更新的设备。它通常指物联网设备、移动电话、汽车ECU等。在本文中,我将描述一种可以在任何连接到互联网的设备上工作的更新类型,这可能是通过Wi-Fi(空中传送)、以太网(铜缆)或其他协议。

正在检查更新

首先要做的是检查更新。在设备上运行的守护进程可以向预先确定的服务器发送请求,提供其当前版本和硬件版本。然后,服务器可以根据这些信息,向设备发送一个签名的更新文件,以便在必要时进行安装,或者报告没有可用的或需要的更新。

复杂性可以通过多种方式增加,从仅根据各种标准向设备子集提供更新,到对更新文件进行完全加密,再到向中央服务器报告更新状态或其他信息。

现成与内部解决方案

有许多现成的更新机制可以与您的嵌入式Linux系统集成,而不必像上面描述的那样重新发明轮子。在yocto项目中可以找到其中一些的比较。

这些可能需要一些时间和精力来与当前的嵌入式Linux构建系统集成,但是它可能比内部开发一个自定义方法要少,而且它可能更健壮,因为其中一些项目已经投入了数百个小时。
您可能不需要现成解决方案的原因:

你希望为你的董事会在每一个层次上定制东西

在接受一个相对较新的、未被广泛使用或认可的大型代码库时,您可能会有安全问题

在ByteSnap Design,我们为各种不同的客户提供完整的硬件和软件解决方案。我们创建了两个内部定制更新系统,同时集成了现成的更新系统,如NXP iMX和TI OMAP系列芯片组上的Mender。

嵌入式Linux的OTA更新,基础知识和实现相关推荐

  1. 嵌入式linux ota,嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,第1部分-基础知识和实现 OTA updates for Embedded Linux,  Fundamentals and implementation 更新的需要 一 ...

  2. arm linux ota,嵌入式Linux的OTA更新,现有更新系统的比较

    原标题:嵌入式Linux的OTA更新,现有更新系统的比较 在基本原理和实现文章中,我们讨论了嵌入式Linux更新系统的基础和实现.在这里,我们讨论了一些现成的开源更新系统,这些系统现在可以与您的Emb ...

  3. 嵌入式linux ota,嵌入式Linux的OTA更新,基本原理和实现

    嵌入式Linux的OTA更新,基本原理和实现 [复制链接] 需要更新 一旦嵌入式Linux产品离开实验室并进入现实世界,如何更新设备的问题就变得至关重要. 更新并非总是必要的,但是很难想到没有某个漏洞 ...

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

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

  5. linux课程_【课程完结】嵌入式Linux应用/驱动开发基础知识两大篇章已全部录制完毕 共72集...

    完结撒花 <第四篇嵌入式Linux应用开发基础知识> <第五篇嵌入式Linux驱动开发基础知识> 两大篇章已全部录制完毕 共计 72 集 01 嵌入式Linux应用开发基础知识 ...

  6. Linux之(6)Kconfig基础知识

    Linux之(6)Kconfig基础知识 Author:onceday date:2022年8月25日 本文档收集整理于互联网,可参考以下文档: Kconfig Language linux kern ...

  7. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  8. 学嵌入式Linux软件开发需要的知识

    首先,我得声明嵌入式Linux的内核很重要,非常非常重要!但是这个东西如果你没有一定的基础,还是暂时不碰为好.因为想知道它的工作机理,你必须具备N多知识才可以的.弄明白内核(包括驱动和协议栈,以及内核 ...

  9. r语言工作路径linux,R语言实用基础知识_工作路径-注释-安装和卸载R包_2019-12-01...

    R语言的实用基础知识有很多,都是我在工作和学习中所整理的,有的是看书整理的,也有的是从网络上的各种博客.各种资源获取的,所以我采用日更的方式进行支持整理和更新,希望能够帮到屏幕前的你! 今天是我日更的 ...

最新文章

  1. 泛型排序器TComparer
  2. 第十届中国信息安全大会召开 主打安全创新
  3. windows Hyper-V Server 2012创建脚本运行环境
  4. jQuery mobile 之三
  5. SAP Commerce Cloud (电商云) UI 的懒加载功能
  6. ABAP 弹出框自建内容POPUP
  7. mamcache登录、_gomemcache首页、文档和下载 - memcache客户端库 - Go语言中文网 - Golang中文社区...
  8. 华为服务器部署项目,服务器部署项目
  9. 实力验证,浪潮整机柜软件定义存储性能有“数”可依
  10. Flutter获取packageName和versionCode
  11. 15投影矩阵与Moore-Penrose逆(1)
  12. Linux基础知识 | vi编辑器
  13. 2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
  14. 企业数据防泄露 | 如何保护您的数据资产?
  15. ORID方法在敏捷中的利用,关于敏捷迭代
  16. python 操作鼠标和键盘
  17. 2015.07.06 大三即将结束,进行一下本学期总结。
  18. 浙江农林大学第二十一届程序设计竞赛校选拔赛A E G H
  19. 百度广告屏蔽;百度新闻屏蔽;百度推送屏蔽
  20. 微信rpc服务器不可用怎么办,Win7提示rpc服务器不可用怎么办 提示rpc服务器不可用解决办法...

热门文章

  1. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例
  2. Docker安装Nextcloud
  3. windows阿里云服务器配置
  4. starrocks问题小结
  5. MinkowskiEngine Miscellaneous Classes杂类
  6. 使用元组输入进行计算和归约
  7. 如何使用TensorCores优化卷积
  8. 语义分割改进:通过视频传播和标签松弛
  9. SOLO: 按位置分割对象
  10. RESTful API 最佳实践