嵌入式Linux的OTA更新,第2部分-现成更新系统的比较
扫描二维码
随时随地手机看文章
我们讨论了嵌入式Linux更新系统的基本原理和实现.在这里,我们讨论一些现成的开源更新系统,这些系统现在可以与您的嵌入式Linux项目集成。
这个更新系统感觉非常专业和可用的盒子.它使用了一个与前一篇文章中描述的非常相似的双根文件更新系统。它与U-脚紧密结合,以允许在非引导图像的情况下返回。
这是相当容易的开始与修理,因为有很好的清晰的逐步文档,如何建立和整合各个组件。它们在流行的平台上提供参考实现,比如树莓皮和贝格莱骨黑色,这可以让你对在你的平台上工作所需的工作量有一个想法。
我发现它花了三天的时间整合并开始工作。有很多小的改变使它与我的YOCto构建设置(基于Morty)。解决这些问题需要一些开放式的专业知识。为了正确地整合双船装置,需要U-脚的专业知识。
在此结束时,它输出一个"Sdi毫克",其中包含引导加载程序和文件系统,需要以某种方式写入您的闪存。您如何做这取决于您的目标硬件。它还输出所谓的"工件",其中包含新的文件系统映像和各种元数据。
这些工件可以通过手动安装的修理工命令行工具安装(理论上可以扩展到从USB棒上自动安装)。工件也可以通过Web接口上传到后端更新网络服务,从这里可以向下推到单个单元。
控制后端更新服务器的网络接口设计良好,易于使用。设置它是通过码头,这使初始设置非常简单。在一个完整的生产准备系统中需要码头工人的专业知识。从这个Web接口中,您可以看到当前在该领域部署的所有设备,并将更新单独地或分组地推给它们。
图1:修补器包含一个定制的Web接口,用于将更新推到设备上
大多数修理工都是用GIT编程语言编写的。对于长期采用和生产版本而言,需要一些关于go的专门知识。虽然这种语言在嵌入式世界中仍然是一种不寻常的语言,但将来可能会被更广泛地使用。
您被绑定到一个硬编码的引导设备(例如:/d/mmcblk0),因此没有简单的方法允许从多个中介中启动。它还对您的系统做了许多假设,例如引导加载程序和内核中的各种选项(例如,包括对某些文件系统的支持)。至关重要的是,它要求系统化,这可能使它不适合某些项目。
快速更新
这个更新系统是高度可配置的。您使用大多数嵌入式Linux开发人员都熟悉的"K康菲"系统来配置它。对于几个配置选项的例子:它支持几个引导加载器(U-Boot、LUB、EIFI引导保护);它可以根据给定的公钥签名和验证有签名的图像;它可以支持使用对称密钥加密对图像进行加密。
图2:SW更新的配置系统
每次更新都包含一个cpio档案,其中包含一个以"sw-说明"文件形式出现的元数据和执行更新所需的实际数据文件。这通常会包含一个文件系统列表,以及它们应该放在哪个块设备中。更新文件必须由用户手动创建;它不会从构建系统中脱落。
不像修理工,SW更新不介入和处理系统需要如何建立的细节。修理工会在某种程度上为你修补你的U-脚踏实地环境,SW更新将需要你为自己的"乒乓球"A-B双根脚设施制定低层次的实现细节。
SW更新可以提供命令行安装.它还提供了一个后端更新系统,类似于修理工的系统,该系统是以伊塞普霍克比特为基础的,它与一个在目标上运行的名为"冲浪船"的守护神一起运行,该守护神处理对SW更新的调用。它还可以在设备本身上运行嵌入式HTTP服务器,从中可以上传和安装更新。
它默认地提供了一个被剥离的图像配方,设计为运行为一个InitRAM恢复图像。从我到目前为止的经验来看,这个系统是为一个恢复分区更新而设计的,而不是一个双重的根文件更新(这方面的优点和缺点在上一篇文章中已经讨论过)。似乎不可能或至少很难将双根文件更新与后台OTA更新守护神"Sericata"整合。
大多数的SW更新都是用C编写的,所以大多数嵌入式Linux开发人员可以很容易地进行修改或进行调试。开发人员还将"处理程序"的想法融入到应用程序中,以便其他代码编写者能够方便地扩展。这些功能可以实现额外的更新功能,例如固件下载到其他硅板上。
像修理工一样,SW更新对用户提出了一些要求,但由于系统的可配置性,这些要求是有限的,有些甚至是可选的。
Rauc被设计为比前两个更新系统更轻量级的更新系统,主要的二进制仅为大约。512k相比之下,SW更新的1.3米和修理工的6.9米(这是基于YOCto输出的粗略计算,没有考虑到依赖性、不同的构建目标等。)。
它从构建系统输出所谓的"束"。这些包包含压缩文件系统和元数据。他们总是被要求数字签名,这是一个核心设计概念的Rauc。它将文件系统图像编程成各种"插槽",然后可以标记工作或损坏或准备更新。它将与引导程序环境接口,以决定是否
Rauc要求在内核中使用某些选项(例如:QAASF支持),并且在根文件系统中也有一些软件依赖关系。Rauc,就像斯普拉特一样,是用C写的。它不实现流式流修复器做和SW更新可以做。
就像SWLTED一样,它支持使用EXESTHOKOKBIT作为后端更新系统,允许您从Web接口向下推更新到设备。
图3:可以使用EXLEXHOKOBT作为Web接口,将更新推到设备上,它可以与Rauc和SWRET集成
最后
本文未提及基于文件的更新系统(如前一篇文章所述)。其他人因简洁而被忽略。
使用哪个系统的决定实际上取决于项目。看起来,修补工可能更容易开始,而SW更新可能有助于与已经在内部部分开发的更新系统集成,ROAC可能被用作SW更新的替代。