嵌入式环境中的挑战
根据相关数据推测,到2025年,全球联网设备将超过557亿台,其中75%连接到物联网平台。有了这么多联网的物联网设备,更新它们变得简单、高效、最重要的是安全,这一点至关重要。
但在深入研究嵌入式设备更新所需的内容之前,有必要仔细看看嵌入式环境是什么样子的。与云计算或web编程不同,你在嵌入式世界中的环境受到严格控制,有许多限制。
设备通常位于难以到达的位置
通常情况下,消费者和其他你甚至没有想到的设备都位于偏远且难以到达的位置。如果你想到wifi路由器和其他难以获得的设备,它们不可能总是以可控的方式更新。
网络连接可能会有所不同
连接可能是断断续续的,可能是通过4G连接,或者比这更慢的连接。你可能有也可能没有安全的连接,特别是当你通过公共网络时。
产品寿命可延长至10年以上
嵌入式开发领域中的产品寿命差异很大。一些市场,如汽车,可以保持相同的硬件五到十年,而家用电器,它可以是原来的两倍。但在消费电子领域,产品的使用寿命更像是6到12个月,因此种类繁多。
电力并非总是有保障的
必须解决电力问题,特别是在客户不是企业的消费者服务提供商(CSP)的情况下。许多消费类设备都使用电池供电,即使没有,也不能保证设备所有者在任何特定时刻都不会拔下电源。你必须能够处理可能具有间歇性电源的设备。
嵌入式Linux系统上更新了什么?
大多数嵌入式设备都是单用途设计,其构造目的是为了更好地执行一件事情。由于这种高度的专门化,Linux发行版通常是完全精简的。当涉及到安全和其他维护更新时,以下是需要在嵌入式Linux设备上更新的基本组件:
- Board Support Package(BSP):这通常由你使用的系统芯片制造商提供,它包含为设备中使用的目标板提供基本Linux内核支持的代码库。嵌入式开发人员通常可以自定义这些内容,有时还需要更新。
- Bootloader :这是设备通电后运行的第一个组件。它初始化了主板并启动了Linux内核。
- Linux Kernel:Linux发行版的核心,包括你想要运行的应用程序的任何专用模块和特定驱动程序。这通常是一个需要半定期更新的组件。
- 根文件系统:这是保持系统运行的基本系统库和其他实用程序和脚本所在的位置。这些文件中的大多数都需要更新和升级。
- 系统应用程序和包:这是你的应用程序所在的用户区。在这里,你需要更新功能,偶尔修复bug。
传统嵌入式发行版更新
更新嵌入式系统通常需要完全重建操作系统以保护设备。根据你使用的Linux发行版的不同,可以逐个文件、逐个包或以一层一层更可移植的方式手动完成。一旦嵌入式开发人员添加了修复和升级,然后重新构建并测试了操作系统,你就可以从空中传送(OTA)设备更新系统将其部署回设备。
“重建整个操作系统”方法的一个大问题是,现在你可能有1000台设备,其中许多设备都有定制的配置和定制的发行版,带有精选的软件包和模块,甚至是偏离原始电路板设计的高度专业化的电路板支持软件包。单独或甚至在较小的设备组中更新所有这些是一个耗时且容易出错的过程。
用容器更新嵌入式系统
如果你可以将整个操作系统和系统想象为一组模块化的容器化不可变构建块,你可以完全控制这些构建块,会怎么样?使用容器,可以将系统粒度保持在第三方可以将组件作为完全工作单元交付的水平,如果操作正确,这些组件之间的相互依赖性将非常小。
一个完全容器化的系统包括以下容器:Linux内核、任何中间件包以及用户区。此级别的容器化为你提供了一个完全模块化的系统,如果需要,可以跨数百万台设备进行更灵活和独立的更新,这将大大提高嵌入式开发效率。