嵌入式系统开发人员如今可以使用范围广泛的操作系统。当然,最直接的操作系统就是没有操作系统!然而,当今的许多系统都是复杂的连接系统,因此可能需要操作系统。需要时,开发人员通常会寻求使用实时操作系统(RTOS)或Linux来帮助自己管理复杂性。不幸的是,如何在裸机、RTOS或Linux之间进行选择,并不总是会很明确。每种方案都有其优点和缺点。这篇文章将探讨我们在选择操作系统时应考虑的系统特性。然后,在下一篇文章中将介绍何时最适合使用每种操作系统。
产品的生命周期成本我们为嵌入式系统选择操作系统,首先要了解自己产品的生命周期成本和要求。需要在产品的物料清单(BOM)成本和软件维护成本之间进行权衡。例如,使用Linux的嵌入式系统,更容易利用开源软件并找到可以编写系统软件的开发人员。但是,基于Linux的系统比基于微控制器(MCU)的系统具有更复杂的硬件要求,并且可能具有更高的BOM成本。基于MCU的系统成本可能较低,但能够成功设计和维护这些系统的开发人员也较少。设计人员需要权衡硬件和软件成本,从而确定自己的产品是否适合使用可以运行Linux的硬件,或者是否更适合使用更便宜的CPU密集度更低的解决方案。
要考虑的物理特征说到硬件功能和要求,在选择嵌入式操作系统时,检查硬件选择的物理特性也是必不可少的。应考虑的微处理器(MPU)或MCU的物理因素包括:
- 外围功能集
- CPU时钟速度
- 可用的闪存
- 可用的RAM
硬件对系统施加的物理限制,可能会立即限制可以使用哪些方案。例如,运行嵌入式Linux,通常需要处理器包含内存管理单元(MMU)。不幸的是,MCU没有MMU。因此,要运行Linux,设计人员至少需要使用Cortex-A范围内的应用处理器,而不是Cortex-M系列中的MCU(但情况变化很快,有人可能会得到具有MMU和合理时钟速率的MCU)。要运行嵌入式Linux,硬件还必须具有至少8GB的存储空间、16GB的RAM和8~16MB的内部闪存存储空间。像Linux这样的内核也可能需要至少500MHz的处理器。这些比运行RTOS所需的要高得多,后者至少需要4kB的RAM、64kB的闪存和以24MHz运行的CPU。
实时性能我从经验中得知,探索裸机、RTOS和Linux系统之间的实时性能特征,是一个烫手山芋。专注于基于MCU的实时系统的工程师经常会告诉我们,用户无法从Linux系统中获得实际的实时性能。Linux工程师则会反驳这不是真的——Linux有实时补丁,可以提供实际的实时行为。自此,争论通常会变得激烈。无论我们站在哪一边,都必须查看实时要求并在选择操作系统时使用它们。评估系统需要的确定性,并根据这些需求评估自己的操作系统。我已看到了运行良好的Linux实时版本,其他则不佳。因此,没有普遍正确的答案,只有适合自己应用的答案。
软件库集成使用裸机、RTOS或Linux之间的一个显著差异,是开发人员可用软件库的可用性和集成程度。在裸机空间中只能靠自己,要么从头开始编写软件,要么自己集成第三方库。另一方面,RTOS则会附带一套已经与RTOS集成的库。例如,可能会发现循环缓冲区、内存管理工具和文件系统等。更多的库可用并实现了集成,但可能仍然需要自己做一些工作。当我们查看Linux时,感觉就像开发人员拥有几乎无限的可用库,并且已经与系统集成。嵌入式Linux最具吸引力和增值的特性,是软件库的可用性和集成。开发人员可以使用一个整体的操作系统,这很强大,但也有潜在的危险。
不要忘记安全性如今,许多设计人员正在构建必须具有安全解决方案的连接系统。操作系统在安全解决方案中发挥着重要作用。例如,如果在Linux内核使用的标准库中发现漏洞,则在修补之前每个Linux设备都有该漏洞。裸机或基于RTOS的系统则很可能不会有同样的漏洞。特定的操作系统比其他操作系统更容易成为黑客的目标,因为他们可以使用工具集来破解这些设备。例如,我已经将使用RTOS的嵌入式系统在没有施加保护的情况下直接放到互联网上,它们已使用了数周却没有受到损害。然而,我曾经把一个基于Linux的系统放到互联网上,它在48小时内就受到黑客入侵而成为中国僵尸网络的一部分。在Linux系统防御中,我相信仍然设置了默认密码,但这表明如果我们不花时间正确配置操作系统,则破解它并不需要太多时间。
总结开发人员在选择操作系统时应考虑许多特性。第一个特性更多地与成本和构建产品的业务方面有关。然而,更重要的特性,如可用库、安全性和可维护性等,也起着至关重要的作用。那么,我们应该使用哪种操作系统并在什么情况下对其进行使用呢?在下一篇文章中,我们将探讨这个问题并提供有关在何处使用裸机、RTOS和Linux的指南。