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

[复制链接]

需要更新

一旦嵌入式Linux产品离开实验室并进入现实世界,如何更新设备的问题就变得至关重要。

更新并非总是必要的,但是很难想到没有某个漏洞的软件。即使您的软件是完美的,但是如果设备通过任何开放源代码库在网络或Internet上进行通信,则可能需要进行安全更新。

以CVE-2104-01650(严重)为例。此漏洞影响了OpenSSL加密库,并扩展了网络上三分之二的网站。即使到了三年后的今天,仍然有许多嵌入式Linux设备运行的是OpenSSL的非防御版本,可以广泛攻击。

阻止文件更新

在谈论更新Linux时,您可能会看到提到了“阻止”和“文件”更新系统。这是指通过直接写入块设备或更新单个文件以执行更新来一次更新整个分区。您可能熟悉Desktop或Server Linux的文件更新系统(例如“ sudo apt-get upgrade”)。在嵌入式Linux中,基于模块的升级由于其原子性以及整个文件系统通常是嵌入式Linux构建系统的输出这一事实而成为必经之路。我们期望特定产品在每个嵌入式设备上的存储空间是恒定的,因此我们每次都创建相同大小的分区。此类更新与具有某种后备或恢复映像配合使用。

发生故障时恢复

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

图1.发生故障时的恢复-后备选项

在上方,您可以看到电源中断时后备模式的两种可能实现。引导程序在左侧引导应急分区,然后将其引导到主分区。在右侧,Bootloader会基于开关引导两个分区之一。

引导加载程序应实现某种确定启动是否成功的方法,如果尚未成功,则应返回到救援分区(左图)或先前的工作分区(右图)。

救援方法(左手)允许为主分区提供更多空间,而双rootfs方法(右手)要求在两个分区之间或多或少均匀地分配空间。如果空间不成问题,则建议使用dual-rootfs方法,因为这将减少停机时间。通过救援方法进行更新需要两次重新引导,一次重新进入救援分区,然后另一次重新进入主分区。dual-rootfs方法仅需要一次重新引导,因为可以随时执行更新。

在这些系统中无法安全更新的是引导加载程序(或实际上是救援分区)。如果您也想更新引导加载程序,则需要两个单独的引导加载程序分区,以及某种Board-Management-Controller来实现两者之间切换的逻辑。

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

当然,这是一个复杂的解决方案,需要一个额外的微控制器,一套新的固件以及更复杂的硬件设计(例如,在某些设备中使用,例如那些包含单独的智能平台管理接口(IPMI)控制器的设备) 。因此,您应该着眼于构建功能齐全,范围较小且不需要更新的引导加载程序。

U-Boot环境变量

U-boot实现了一个非易失性“环境”,可以在其中存储变量。甚至可以从Linux(可以通过多种方式来访问它们,具体取决于环境的存储方式,如elinux.org上所述)。

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

图3. U-boot环境变量

设置看门狗

处理器的硬件监视程序应该由U-Boot(CONFIG_WATCHDOG)设置,然后在启动完成后由Linux维护。如果整个系统挂起,这将导致重置。

检查启动失败

关键任务应用程序运行后,应在u-boot环境中设置一个变量,指示启动完成。然后,U-boot将能够检查是否在下一次启动时设置了该设置,如果启动失败(有时仅在连续几次失败之后),则可以采取措施。

具体的架构将取决于您的应用程序和产品。您将需要对此进行一些自定义,以适应您的需求。您将要确定所有可能的故障模式,并对所有故障模式实施恢复。

实施更新

正如我们之前所说,更新应以单个加密签名文件的形式出现。私钥签名可确保其源自制造商您。现在,系统只需解压缩它并运行其中的脚本即可自行执行更新。它将覆盖要更新的分区;轻拂所需的任何开关,然后重新启动。这应该尽快发生,以最大程度地减少停机时间。

保护更新

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

获取更新

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

最明显和最简单的方法是,该更新是由具有root登录到设备的工程师应用的。他运行更新脚本并更新了设备。这充满了安全隐患,并且可能仅适用于开发中的系统或工程或工业环境中使用的系统。

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

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

空中更新,如下一节所述。

空中更新

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

检查更新

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

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

现成与内部解决方案

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

这些可能需要一些时间和精力才能与您当前的嵌入式Linux构建系统集成,但是它可能比内部开发自定义方法要少一些,并且由于其中一些项目已经花费了数百小时而变得更加强大。进入他们。

为什么您不想要现成的解决方案的原因:

您希望在每个级别上为董事会自定义内容

在使用大型代码库时,您可能会遇到安全问题,而该代码库仍相对较新,并且使用或识别的程度不高

在ByteSnap Design,我们为许多不同的客户提供了完整的硬件和软件解决方案,我们创建了内部自定义更新系统,同时在各种不同的芯片组(例如MTS)上集成了Mender等现成的更新系统。

文章来源:http://emb.hqyj.com/Column/20209217.html

嵌入式linux ota,嵌入式Linux的OTA更新,基本原理和实现相关推荐

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

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

  2. 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...

    描述 1.前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用.工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点.随着32位嵌入式CPU价格 ...

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

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

  4. 嵌入式系统基本概念Linux常用命令

    文章目录 1. 嵌入式系统 2. 嵌入式层次图 3. Linux常用命令 4. vim操作 5. GNU工具 6. Linux软件包 6.1 Linux软件包命名规则 6.2 安装命令 离线安装dpk ...

  5. linux 远程挂载摄像头_基于Linux的嵌入式网络摄像机设计

    本嵌入式网络摄像机采用高性能ARM9芯片微处理器,内置嵌入式Web服务器. 通过嵌入式多任务操作系统采集摄像机视频数据:采集的视频信号数字化后经MJPEG算法压缩,再通过内部总线送到内置的Web服务器 ...

  6. ARM+linux+2440嵌入式开发相关经典书籍(转)

    源:ARM+linux+2440嵌入式开发相关经典书籍 转载于:https://www.cnblogs.com/LittleTiger/p/7992971.html

  7. 实验6Linux系统开发环境,哈工大嵌入式操作系统课件—6 Linux开发环境1-linux基.ppt...

    <哈工大嵌入式操作系统课件-6 Linux开发环境1-linux基.ppt>由会员分享,可在线阅读,更多相关<哈工大嵌入式操作系统课件-6 Linux开发环境1-linux基.ppt ...

  8. 基于Linux下嵌入式网关,基于嵌入式Linux系统的无线网络网关设计

    嵌入式网关.嵌入式web服务器(boa).嵌入式sqlite数据库.通用网关接口 1.概述 传统网关在功能上主要完成协议转换及部分系统管理功能,而采用嵌入式无线网关作为无线网络设备接入有线网络的接入部 ...

  9. 基于Linux的嵌入式浏览器的实现

    随着信息技术与网络技术的快速发展,以及人们日常生活对网络信息的需求的不断增加.掌上电脑.上网本.手机.导航仪器.智能电视.智能家电等对嵌入式系统提出了更多更高的要求.在嵌入式系统中利用嵌入式浏览器获取 ...

  10. linux 嵌入式串口通信设计目的,基于linux的嵌入式串口通信.doc

    PAGE 天津电子信息职业技术学院 <嵌入式软件编程>课程报告 课程名称:基于linux的嵌入式串口通信 课程代码: 115229 姓 名: 甘琦 学 号: 48 专 业: 物联网应用技术 ...

最新文章

  1. 人才招聘丨 清华大学精准医学研究院招聘启事
  2. 滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
  3. python中的浮点数用法_如何利用Python在运算后得到浮点数值的方法详解
  4. Misc-wireshark-1(秒懂!!)
  5. DEV-aspxgridview中的aspcheckbox
  6. 战胜柯洁战胜不了高中生?DeepMind挑战高中数学题,完败
  7. ubuntu16.04查看opencv版本
  8. proteus——采用 LM317 的稳压电源
  9. 问题:检测到远端X服务正在运行中(CVE-1999-0526)
  10. 手机安装 卸载CA证书
  11. NodeJS 搭建图形识别功能
  12. 热电冷磁之牛顿的三棱镜谭:围棋之C++
  13. 实战 | 我是怎么定位问题的?
  14. 仅有爱情是不够的(转载)
  15. android相对控件居中对齐,相对布局(RelativeLayout)常用属性
  16. windows下使用vscode编写运行以及调试C/C++
  17. 开发Python用什么工具好?
  18. android开发环境安装
  19. nodemcu 智能插座
  20. C++中definition与declaration的区别

热门文章

  1. matlab画图窗口显示中文乱码,全是方框的解决方法
  2. 【Flutter】应用开发笔记
  3. 20164305徐广皓 - Exp1 PC平台逆向破解(5)M
  4. 【DirectX 2D游戏编程基础】DirectX精灵的创建
  5. RTX 30系列性能≥2倍图灵GPU!AI算力前瞻,性价比超泰坦
  6. 收敛交叉映射(convergent cross mapping,CCM)滥觞、2012年Science论文引言部分:Detecting Causality in Complex Ecosystems
  7. 智慧点餐系统多方面优化餐厅运作效率
  8. ORA-12805: parallel query server died unexpectedly ORA-04030 (sort subheap,sort key) 原因排查与解决方法
  9. 基于WT588F02B语音芯片的智能语音感应洗手液器设计方案
  10. Hexo NexT 评论系统 Valine 的使用