在台式计算机上,操作系统(OS)的选择很大程度上取决于口味-Windows,Apple,Linux。选择相对较少。对于嵌入式系统,问题要复杂得多。可用的大量选项反映了嵌入式应用程序的多样性。
您真的需要一个操作系统吗?如今很少找到没有操作系统的嵌入式系统。没有某种类型的内核,只有最简单的一种设备才能有效地构建。但是这种可能性不容忽视。嵌入式设备的整个范围可以由CPU复杂度(广义上为数据总线宽度)与软件复杂度的图表(图1)表示。
图1:CPU与软件和OS的复杂性。
图1分为四个象限。右上角(高端处理器上的复杂软件)是传统的实时操作系统(RTOS)和其他操作系统。在功能不那么强大的CPU上,如果软件相当复杂,则部署基本内核可能仍然有用。有时,功能强大的芯片用于运行非常简单的软件,在该软件中,需要CPU性能来提高执行速度。在这种情况下,可能并非严格要求使用内核,但应谨慎使用,因为它可以改善软件体系结构的可伸缩性并适应将来复杂性的提高。实际上,只有在低端设备上运行简单软件时,才不需要任何类型的内核。
得出结论,项目需要操作系统,因此存在选择的问题。广义上讲,有四个选项:选择高端操作系统,例如Linux或Windows的嵌入式变体。从众多选择中选择一个实时操作系统;部署广泛可用的免费操作系统之一;或在内部实现内核。接下来是对这些选项的回顾。
商业操作系统市场上
有许多商业操作系统。与其他产品相比,这些产品具有许多优点和缺点。
优点。 有许多商业RTOS产品可用,其中许多来自成熟的,信誉良好的供应商。但这是应该仔细考虑的事情。公司的规模,产品的成熟度和用户群都是重要因素。关键要求是技术支持的可用性。
在选择RTOS时,买卖双方都做出了长期承诺。关系的一个方面是考虑将来可能的CPU迁移。可以依靠成熟的RTOS供应商来及时支持新设备,而他们的产品可能旨在简化移植过程。
好的文档是必不可少的,并且可能需要商业RTOS供应商提供。没有理由不要求查看手册样本。在过去,这可能具有挑战性-将书籍运送到世界各地。现在,通过电子邮件发送PDF是一个合理的期望。
源代码可用于许多商业操作系统-有时是免费的;有时需要收取特定费用。值得检查代码是否可读,因为源代码可能会使人类读者难以理解,并且也应进行注释。这不是好的文档的替代品,而是有用的补充
开发多线程应用程序有很多挑战,其中之一就是调试。拥有某种支持RTOS的调试器非常有用。对停止模式(CPU在断点处暂停)的支持就足够了。在某些情况下,运行模式(仅停止当前任务)会很有用。
很少有嵌入式应用程序只需要一个准系统多线程内核。通常需要其他中间件组件。商业OS可能范围很广,包括通信协议,应该对其进行充分验证;文件系统,包括闪存;和图形包以帮助UI设计。
嵌入式开发的一个特殊挑战是在硬件附近工作。使用操作系统,这意味着要开发驱动程序。商业操作系统很可能会为标准设备提供广泛的驱动程序,并支持自定义驱动程序开发。
缺点。 从技术上讲,每个嵌入式系统都是不同的。一台设备到另一台设备的CPU,内存和外围设备都不同。但是系统在商业上也有所不同,并且设备的最终价格以及生产的数量会影响OS许可选项。在某些情况下,每台设备几美元是合理的。在另一些预计数量非常庞大的国家中,免版税业务模型可能是理想的。
反对使用商业操作系统的一个普遍反对意见是,开发人员对其功能没有内部了解。这可能是正确的,但这真的重要吗?如果操作系统的行为如记录所示,为什么准确知道其如何实现结果很重要?可能会争辩说,由于OS的操作是特定的专业知识,因此大多数嵌入式软件开发团队无法负担得起维持这种专业知识的能力。如果源代码可用,它可以提供保险,以防需要检查操作系统的内部运行。
像购买任何产品的人一样,操作系统的购买者也不想被某个供应商所束缚,即使该供应商会欢迎这种可能性。对于商用OS产品,它们之间的主要区别在于应用程序接口– API。现实情况是这些差异不会太大,因此,如果需要更换OS供应商,则稍后移植可能不是大问题。当然,遵守标准至少会导致一定程度的供应商独立性。在这种情况下,POSIX API可能是最佳选择。
商用OS的另一个常见异议是它们具有太多的功能,因为它们需要满足大量客户群的需求。尽管这是事实,但该功能的成本已被分摊,因此对单个客户没有实际影响。操作系统也可能作为一组组件提供,其中许多是可选的。在商业RTOS的早期,产品是单片的代码块,但是随着可用功能的增加,出现了可伸缩性的想法。完全可扩展的OS可以将所需的功能仅合并到最终的可执行映像中。
“免费”操作系统
在这种情况下,免费操作系统并不真正包含Linux,因为大多数嵌入式开发人员可能会花钱购买受支持和打包的版本,因此它并不是真正的免费。本节介绍一些比较流行的较小的,易于下载的RTOS。
优点。 明显的吸引力显然是缺乏前期成本,由于无需担心许可证费用,部署后该成本仍将继续。
自由OS倾向于包含源代码,这当然对参考很有用,因为文档可能有限并且难以获得支持。这也是配置和移植到新硬件环境的要求,当然这要取决于用户。
与许多类型的用户支持的软件一样,免费的RTOS经常会吸引大量的追随者,从而形成了一个活跃的在线社区,可以免费获得支持。尽管这是有吸引力且有用的,但值得关注的是它的寿命。嵌入式软件往往会经历不同技术或产品流行的阶段。如果您选择的RTOS过时了怎么办?同样,这种社区支持通常集中在软件的当前版本上。如果您的产品使用的是较早版本,则可能无法找到有关问题的帮助。
缺点。 在嵌入式设备中部署OS是一项长期的任务,因此长期支持的问题非常重要。对于免费的OS,您可以依靠社区的长期支持吗?另外,由于经常会导致解决方案,因此文档是否草草了?
开发多线程代码具有挑战性,因此需要合适的调试工具。如果免费OS流行,则可能是第三方开发了这种工具,但是支持的问题仍然存在。
自由软件存在心理挑战。由于源代码易于获得,并且开发人员认为该代码不具有货币价值,因此强烈倾向于“改进”它。这可能只是为了使代码更高效而进行的微小调整,也可能是增加了新功能。无论哪种情况,结果都可能是不同项目中使用的许多类似但不同的OS版本。维护是一个巨大的挑战。
在大多数部署了OS的嵌入式应用程序中,不仅需要多线程内核,还需要文件系统或网络之类的东西。这样的选项可能可用,但如果没有,则需要更多的工作来定位必要的中间件并进行移植或使其适应所选的OS。
选择一个操作系统(无论是否免费)的关键条件之一是对为项目选择的CPU的支持。但是,选择了OS后,需要大量的时间和精力投入。如果可以将其用于多个项目,则这是值得的。但是,如果选择了不同的CPU,那么有什么保证可以提供或将提供支持?
所有软件,无论是免费的还是商业的,都以某种方式获得许可。许可证可能是一个复杂的文档,以某种方式限制了软件的部署。违反许可证的处罚可能很严厉。开源软件可能特别棘手,因为许可证可能会损害应用程序代码的状态,从而迫使您必须公开提供其源代码。在将任何开源代码合并到您的应用程序之前,应寻求法律建议。
自定义操作系统的
优点。 开发内部内核最常被引用的原因是保持对完整代码库的控制。这听起来很明智,但它假设保留了具有相当专业知识的工作人员,这些专业知识可能非常专业。
对于内部开发的代码,当然没有持续的许可证费用。但是持续的维护成本不容忽视。
内部开发的另一个常见理由是,最终的实时操作系统将完全符合项目要求。可以说,内核的功能更有可能由负担得起的开发量来定义。完全可扩展的商用OS可能会在不妥协的情况下完全满足需求。
缺点。 所有软件开发都要花钱。但是,开发内部内核的成本通常被吸收到项目中,因此它们是不可见的。
部署操作系统后,它可能会使用一段时间。因此,需要长期的支持。如果开发人员留在这里,这不是问题。同样,如果代码经过精心记录,将不会有太大的问题。但这都是危险的假设。
如前所述,多线程代码可能会出现一些细微的错误,需要操作系统感知的调试器才能检测到。创建了内核之后,开发这种工具的可能性不大。一种选择是使商业调试器适合内部内核。
随着时间的推移,内部内核可能会在多个项目中使用。但是,每个项目团队都有可能寻求改进基本代码的危险。这导致内核的多个版本,从而加剧了支持和维护问题。
一个普通的内核不可能就足够了。附加中间件的开发将进一步增加开发成本,并且商业中间件供应商不太可能会接受移植到非商业RTOS的想法。
在某个时候,随着技术的发展,必须更换CPU。如果内核具有沉重的处理器专用性,这将是一个问题。通常,有很大一部分汇编语言和字节序,并且需要检查中断支持。
开发内部OS的最大缺点是哲学上的。最成功的企业专注于他们的核心竞争力。除非您是内核开发人员,否则专注于您的主要业务是最有意义的。
操作系统选择标准
决定研究商用或至少商用支持的操作系统后,将要解决一系列资格问题:
您的应用程序实时吗?“实时”不一定意味着快速-它意味着可预测或确定性。这些不是绝对术语。这是一个问题,即您需要系统如何对事件做出响应。时机有多关键?如果您需要较高的确定性,那么RTOS可能是您的最佳选择。在某些情况下,Linux可以使用,特别是在可以使用实时扩展的情况下。
内存大小受限制吗?与台式计算机不同,大多数嵌入式系统的内存大小是固定的。可用内存量是另一个重要的选择标准。除非您有用于操作系统的数兆字节,否则Linux等的实现不太可能。
CPU功率受限吗?可用的CPU功率也很重要。如果处理器仅具有足够的能力来运行应用程序,则OS不会引入运行时开销。实时操作系统倾向于有效地以及可预测地使用CPU时间。
设备功耗是否成问题?对于许多类型的系统,功耗已成为越来越普遍的关注点。这可能是为了保留手持设备的电池寿命,或者是出于环境和经济原因而使用固定系统。以前的内存大小和CPU能力标准在这里具有影响力,因此OS的大小和执行效率很重要。许多操作系统包括电源管理工具(图2)。Linux提供了一些这样的功能,并且越来越多的RTOS包含了电源管理框架,包括Nucleus RTOS。
图2:操作系统电源管理功能。
您是否有晦涩或自定义的外围设备?嵌入式系统始终包括许多外围设备以及CPU。如果这些是标准设备,则无论选择哪种操作系统,驱动程序都应该可用。通信协议也是如此。如果您的设备比较晦涩,则可能有问题。尽管许多RTOS具有广泛的驱动程序,但它们几乎总是会被Linux击败。如果您具有独特的自定义硬件,则需要编写驱动程序。Linux的好处是可以使用大量的驱动程序编写专业知识。因此,可以选择雇用员工或寻求支持嵌入式Linux的供应商(例如Mentor Embedded)的帮助。
您是否有MMU,或者可以包含MMU?如果您的设计不包括内存管理单元(MMU),则没有选择使用Linux等的选项,因为MMU对于所有过程模型操作系统都是必需的。大多数RTOS是线程模型,不需要MMU。但是,某些RTOS(如果有)可以有效地使用MMU。
您的应用需要安全认证吗?在某些行业中,认证是强制性的。这可能是一个昂贵的过程,需要访问所有源代码。由于认证成本在某种程度上与代码行数有关,因此较小的OS自然是吸引人的。通常有必要对完整的应用程序进行认证,因此无法购买预先认证的操作系统。一些OS供应商可以通过提供一些必需的文档来提供帮助。显然,优良作法是选择一个在特定应用领域中拥有可靠记录的操作系统。例如,即使Mentor Embedded不能向您出售Nucleus RTOS的“经医学系统认证”版本,我们的确有许多客户已在此类应用程序中成功使用了该产品。
是否需要企业系统互操作性?如果您的设备需要与企业系统进行重要的互操作,则可能是选择Microsoft产品的一种情况。
是否知道售价和运输量?在查看操作系统的选择时,很容易陷入技术上。通常,与许多购买决策一样,重要的因素是成本。在这种情况下,不仅仅是获得最佳价格的问题。商业模式也很重要。对于某些嵌入式设备,在每台设备上支付版税是合理的。对于大批量,免版税模式可能更好。开源当然很有趣,但是在这种情况下,与纯商业产品一样,必须将持续的维护成本考虑在内
您是否有过使用其他操作系统的有用经验?由于培训是昂贵且费时的,因此,尽可能利用现有经验始终是一种好的做法。如果开发团队具有特定API的经验,那么这可能会对选择过程产生重大影响。当然,如果您有使用POSIX这样的标准的经验,那么您将拥有更大的自由度。供应商的经验也很重要。特别是,过去与技术支持的互动非常有价值。同样,请考虑文档和源代码的质量。至少有一个供应商提供源代码,但故意使其变得不可读
要考虑的多核问题
广泛地讲,有两种类型的多核系统。如果CPU都是相同的架构,则该系统称为同类系统。如果CPU的架构不同,那么它就是异构的。系统也可以是两者的混合体。
大致有两种软件体系结构。对称多处理(SMP)是指一个OS跨多个内核运行,并在它们之间分配工作。SMP只能在同类多核系统上实现。非对称多处理(AMP)是每个CPU都有自己的OS实例时。AMP可以在任何多核配置上实现。系统部分组成一个SMP子系统,其他部分组成AMP的混合形式很有可能。
选择多核操作系统。借助SMP系统,操作系统可以在可用核心之间分配工作。这需要特定的OS变体。所有高端操作系统都具有此选项,这是台式机系统的常见做法。像Nucleus RTOS这样的实时操作系统越来越多地具有SMP版本。显然,利用多核体系结构的效率可能是关键的OS选择因素。
为AMP系统中的每个核心选择操作系统所需的步骤与为单核系统选择一个操作系统所需的步骤相同。但是,还存在内核间通信的问题,在其中使用MCAPI可能是一个有吸引力的选择。替代地,可以使用管理程序来提供对AMP系统的全面监视。
考虑工具很重要。对于任何嵌入式软件开发,拥有正确的工具至关重要。对于多核,多OS项目,这至关重要。维护完整系统的可见性,评估其性能以及调试不同内核上的代码之间的复杂交互都需要复杂的工具。此类工具的可用性可能会对操作系统的选择和您选择的供应商产生重大影响。(Mentor Embedded的Sourcery Analyzer是支持多核,多OS设计的理想工具。)
结论
lw
评论
查看更多