嵌入式Linux的OTA更新,第1部分-基础知识和实现

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。

来源:https://www.cnblogs.com/wujianming-110117/p/13282606.html

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

  1. Linux进程管理:进程和线程基础知识

    <Linux进程管理:进程和线程基础知识> <Linux-进程管理> <C语言进程的内存地址空间分配> <进程和线程模型> <(1)Linux进程 ...

  2. linux下tc、htb、iptables基础知识及openwrt 下qos使用介绍

    htb基础知识:Linux Htb队列规定指南中文版:http://wenku.baidu.com/view/64da046825c52cc58bd6beac.html TC基础知识: Linux 的 ...

  3. Linux包管理器及包安装工具基础知识

    部分内容摘入出处:yum与apt的区别:原创文章,转载请注明出处. 文章目录 一.概述 处理器架构 发行版概念 二.两大主流发行版 RedHat发行系列 Debian发行系列 三.命令与包格式区别 各 ...

  4. Linux(centos7.9)常用命令大全及基础知识

    linux中数组的索引从0开始,其他默认从1开始,例如没有第0列,从第1列开始 在Unix中一切(包括网络套接口)都是文件 在命令行中,无论几个空格,都当成一个空格看待 在linux中,在命令行中通过 ...

  5. Linux学习总结(十七)-shell 基础知识

    该篇内容很杂,但还是不难理解,就不逐个贴图举例. 一 先介绍几种常用字符: 1 * 匹配任意个任意字符 2 ?匹配一个任意字符 3 # 注释符号,符号后的语句不被执行 4 \脱意字符,后面跟带含义字符 ...

  6. c补week1(linux c基本操作及C语言部分基础知识)

    一.linux常见命令 清屏:ctrl+l 在终端输入clear 补全键:tab键 上下箭头:查找输入的历史命令 打开一个和当前路径相同的终端:ctrl+shift+n 1.ls显示当前目录 ls   ...

  7. 嵌入式arm学习总结(一)--电子基础知识

     2011年参加了linux-arm嵌入式培训班,虽然学费比较贵,但对于个人教育的投资,我感觉还是非常值的  .今天无意翻到了培训时候写的一些笔记,在此和大家分享一下,也作为自己的一个存档吧! ( ...

  8. linux的vi编辑器计算工具,2018-1-2Linux基础知识(19)vi编辑器及bash算数

    在上一章当中我们讲述了vim的基本操作,例如我们如何打开文件及关闭文件,以及如何进行编辑等,以及讲到了vim的诸多模式中之间的转换和常用的编辑命令,那么我们接下来介绍vim的末行模式及内建命令行接口的 ...

  9. 嵌入式--基于AD15的原理图及PCB绘制基础知识

    一.新建空白工程模板 1.新建项目    2.新建库->原理图库   3.新建原理图 4.新建库->库->PCB元件库    5.新建PCB    6.四个新建分别保存 如果单独打开 ...

  10. 软考-嵌入式系统设计师-笔记:信息化和知识产权基础知识

    文章目录 信息化基础知识 概述 发展趋势 信息化应用 知识产权基础知识 知识产权分类 知识产权与保护期限 知识产权归属 侵权判定 信息化基础知识 概述 信息九个特征 可识别性.可存储性.可度量性.可共 ...

最新文章

  1. OpenGL中的VAO和VBO使用技巧
  2. 电脑粉碎文件 c语言,文件操作(二):文件粉碎机
  3. 最强大的多线程解决方案!!
  4. IIS7.5中神秘的ApplicationPoolIdentity
  5. linux postgres用户,关于linux:在启动时创建postgres用户
  6. matlab模糊控制工具箱使用和模糊控制pid实例参考
  7. (38)时钟延迟约束
  8. mysql8连接 2002_ERROR 2002 mysql连接失败 解决方法
  9. 用Word2003助你轻松阅读文档(转)
  10. 天狼星网络验证源码/官方正版/内附搭建教程
  11. [转载] 羽毛球——学打羽毛球 04 正手发高远球
  12. Online Object Tracking: A Benchmark
  13. 抓取新浪微博好友昵称和性别
  14. 微软开源自有云服务器专属 Linux 发行版 CBL-Mariner,可在 GitHub 免费下载!
  15. 使用DeepWalk从图中提取特征
  16. Day24-Ajax
  17. Mybatis查询中使用游标
  18. Idea中maven项目热部署,这么好用的IDE怎么会没有热部署,别傻了
  19. .vimrc的使用与配置
  20. 如何查询尼斯分类商品项目

热门文章

  1. 一加6手机可以把PDF文件转Word吗?
  2. 白色/黄色/开关型/罗丹明B染料标记希夫碱/半胱氨酸乙酯荧光探针的制备过程
  3. knn matting matlab,一键抠图,毛发毕现:这个GitHub项目助你快速PS
  4. 网站维护需要做些什么?
  5. root用户修改root密码提示The password fails the dictionary check
  6. 如何搜集你想要的信息
  7. 向PSRAM中写入、读取数据
  8. 1.DDD中的领域对象、值对象、聚合根
  9. android tv outofmem,java.lang.OutOfMemoryError:尝试抛出OutOfMemoryErr...
  10. 很遗憾,这就是现实!35岁之后软件测试工程师靠什么养家?