32

现在我确信我们都非常清楚 Linux 与 Windows 桌面的相对优点。但是,我对嵌入式开发世界的了解要少得多。我主要对工业解决方案感兴趣,因此对 iPhone 或 Android 不感兴趣,而对这两个操作系统更感兴趣。

嵌入式世界中两个平台之间的相对权衡是什么?如果您正在考虑为具有自定义硬件、部分自定义操作系统和自定义应用程序的特定项目构建一个盒子,那么您会选择哪一个?为什么?

我会假设 Windows CE 在工具上胜出,而 Linux 在成本和性能上都胜出。然而,这只是完全的猜测。有没有人有这两者的任何事实或经验?

4

8 回答 8

46

我在一家为所有硬件提供 CE 和 Linux 的公司工作了几年,所以我对这个等式的两边都相当熟悉。

  • 工具: Windows CE 工具肯定比 Linux 提供的工具好,虽然 linux 工具肯定越来越好。
  • 性能: Windows CE 是实时的。Linux 不是。linux 内核根本不是为确定性而设计的。您可以添加一些扩展以获得某种实时性,但 CE 胜过它。
  • 成本:这是一个存在很大误解的领域。我的一般经验是,CE 开箱即用的成本较低(Platform Builder 为 1000 美元,运输运行时每台设备低至 3 美元。“什么?”你问?“Linux 是免费的。”嗯,没那么多, 特别是在嵌入式领域。是的,有像 Debian 这样的免费发行版。但是你可能需要很多不属于免费类别的部分。像 QT、Java 运行时和媒体编解码器这样的 UI 框架只是一个开始。此外,大多数具有商业支持系统(例如 MontaVista)的 Linux 发行版都不是免费的。
  • 源代码可用性: Linux 支持者可能会说,由于缺少源代码,CE 是一个糟糕的选择。我只能说,在与 CE 合作的十多年中,其中一半用于为定制板做定制内核和驱动程序工作,我只需要没有随 CE 提供的源(他们提供了大量大部分)一次。我也喜欢有源,但微软提供支持,所以在极少数情况下你可能认为你需要那个源,你可以让他们解决问题(有一次我们需要源,微软提供了一个修复,而且是免费的——这是他们在 CE 下的模型。

这是否意味着CE每次都获胜?不,我根本不建议这样做。如果您是一家 Linux 商店,并且拥有大量 Linux 经验和代码资产,那么跑出去去 CE 是愚蠢的。但是,如果您是从头开始,CE 通常具有较低的 TCO。具有 Win32/C# 经验的开发人员更普遍,因此成本更低。与大多数其他发行版相比,您还可以通过 CE 获得更多的“内置”功能,这意味着如果您还没有在内部完成这些事情,那么上市时间会更快。

于 2008-11-28T19:52:48.993 回答
26

我将代表 Linux 方面,至少针对我熟悉的软件类别(即 RF 数据收集设备)。或者工业应用与消费者应用。

Windows CE(及其相关工具)IMH 相当近的 E)强烈倾向于在小屏幕上创建“Windows 体验”。用户输入模式强调类似鼠标的动作。登录、应用程序选择等都尽量与标准 Windows 相似。

如果用户正在驾驶叉车,或者正在装满拣货车,或者将材料从一个地方移动到另一个地方,那么就会出现问题。

它是一个不断变化的目标——尤其是在 .NET 方面。Compact .NET 运行时存在严重缺陷,重要的库(如网络、数据处理和 UI)不完整,并且版本经常弃用以前的版本。. CE 似乎是 Windows 家族中的继子(可能是因为向硬件集成商销售的积极竞争并不多。)

一个不错的稳定的行和列 Linux 控制台对于小屏幕上的许多(根据我的经验)高使用率的应用程序来说是一个非常方便的上下文。

不过,对于您的手机或 Zune 上的游戏来说,这并不是什么好事。

笔记:

我认为 ctacke 可能准确地代表了硬件集成商的一面。我与更进一​​步的玩家——软件集成商和用户保持一致。

于 2008-11-28T22:08:29.717 回答
21

选择通常主要基于感知和文化,而不是具体数据。而且,当您考虑现代操作系统的复杂性、与将其移植到定制硬件相关的所有问题以及未知的未来需求时,根据具体数据做出选择是很困难的。即使从应用程序的角度来看,事情也会随着项目的生命周期而变化。需求来来去去。你会发现自己在做你从未想过会做的事情,尤其是在可能的情况下。无处不在的 USB 和网络端口开启了许多可能性——例如添加 Cell 调制解调器支持或打印机支持。基于闪存的存储使现场软件更新成为标准操作模式。最后,每种解决方案都有其优点和缺点——没有在所有情况下都是最好的灵丹妙药。

在考虑嵌入式 Linux 开发时,我经常使用冰山的比喻;你在项目中看到的是水面以上的部分。这些是您的应用程序与之交互的部分,您需要自定义的驱动程序,您理解的部分。其余 90% 在水下,因此存在很大的可变性。驱动程序的质量问题或无法找到您将来可能想要支持的驱动程序很容易淹没项目的已知部分。很少有人同时拥有 WinCE 和 Linux 解决方案的丰富经验,因此倾向于选择舒适的(或经理舒适的)或我们所拥有的经验。以下是一些需要考虑的方面的想法:

系统软件开发

这个领域的问题包括 CPU 支持、驱动程序质量、现场软件更新、文件系统支持、驱动程序可用性等。过去两年发生的变化之一是 CPU 供应商现在正在将 Linux 移植到他们的新芯片中作为第一个操作系统。以前,操作系统移植通常由诸如 MontaVista 之类的 Linux 软件公司或社区努力完成。因此,Linux 内核现在支持大多数主流嵌入式 CPU,只需要很少的附加补丁。这与 5 年前的情况截然不同。因为很多人都在使用相同的源代码,所以问题会得到修复,并且通常会被贡献回主流源代码。使用 WinCE,BSP/驱动程序支持更多地是一种参考实现,然后 OEM/用户接受它,修复任何问题,这就是修复程序往往停留的地方。

从系统的角度来看,考虑未来需求的灵活性非常重要。仅仅因为它现在不是一个要求并不意味着它将来不会是一个要求。获得对外围设备的驱动程序支持几乎是不可能的,或者需要付出太大的努力才能使其实用。

大多数人很少考虑构建系统,或者从不考虑“如果有一个很好的 gui 围绕该工具,它一定很容易”。OpenEmbedded 是一种非常流行的构建嵌入式 Linux 产品的方式,最近被认可为 MontaVista 的 Linux 6 产品的技术基础,被新用户普遍认为“难以使用”。虽然 WinCE 构建工具表面上看起来更简单(高于水面的 10%),但当我需要自定义某些东西、实现软件更新等复杂功能时,您仍然会遇到问题。构建具有生产级的生产系统功能,您仍然需要团队中了解操作系统并且可以在操作系统和构建系统的详细级别上工作的人。使用 WinCE 或嵌入式 Linux,这通常意味着公司要么需要有经验丰富的内部开发人员,要么聘请专家进行部分系统软件开发。系统软件开发与应用程序开发不同,除非你有很多时间,否则通常不是没有经验就想从事的事情。公司通常会为最初的几个项目聘请专家帮助,然后在内部进行后续项目。另一个需要考虑的特性是并行构建支持。随着四核工作站成为标准,一个完整的构建可以在 1.2 小时内完成而不是 8 小时内完成是否重要?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。或聘请专家进行部分系统软件开发。系统软件开发与应用程序开发不同,除非你有很多时间,否则通常不是没有经验就想从事的事情。公司通常会为最初的几个项目聘请专家帮助,然后在内部进行后续项目。另一个需要考虑的特性是并行构建支持。随着四核工作站成为标准,一个完整的构建可以在 1.2 小时内完成而不是 8 小时内完成是否重要?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。或聘请专家进行部分系统软件开发。系统软件开发与应用程序开发不同,除非你有很多时间,否则通常不是没有经验就想从事的事情。公司通常会为最初的几个项目聘请专家帮助,然后在内部进行后续项目。另一个需要考虑的特性是并行构建支持。随着四核工作站成为标准,一个完整的构建可以在 1.2 小时内完成而不是 8 小时内完成是否重要?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。除非您有很多时间,否则通常不是您想在没有经验的情况下从事的事情。公司通常会为最初的几个项目聘请专家帮助,然后在内部进行后续项目。另一个需要考虑的特性是并行构建支持。随着四核工作站成为标准,一个完整的构建可以在 1.2 小时内完成而不是 8 小时内完成是否重要?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。除非您有很多时间,否则通常不是您想在没有经验的情况下从事的事情。公司通常会为最初的几个项目聘请专家帮助,然后在内部进行后续项目。另一个需要考虑的特性是并行构建支持。随着四核工作站成为标准,一个完整的构建可以在 1.2 小时内完成而不是 8 小时内完成是否重要?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。一个完整的构建可以在 1.2 小时而不是 8 小时内完成,这很重要吗?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。一个完整的构建可以在 1.2 小时而不是 8 小时内完成,这很重要吗?构建系统在从各种来源(如各种版本控制系统等)提取和构建源代码方面有多灵活。

嵌入式处理器正变得越来越复杂。仅仅让 cpu 运行已经不够好。如果您考虑 TI 的 OMAP3 cpu 系列,那么您必须提出以下问题:是否有可用于 3D 加速引擎的库,我什至可以在不承诺每年数百万台的情况下获得它们吗?是否支持 DSP 桥接器?这一切的代价是什么?在我最近参与的一个项目中,用于 Atmel AT91SAM9260 的基本 WinCE BSP 成本为 7000 美元。就开发人员的时间而言,这并不多,但您还必须考虑维护、升级到新版本操作系统等的持续成本。

应用开发

嵌入式 Linux 和 WinCE 都支持一系列应用程序库和编程语言。C 和 C++ 得到很好的支持。在 WinCE 世界中,大多数业务类型的应用程序正在迁移到 C#。Linux 有 Mono,它为 .NET 技术提供了广泛的支持,并且在嵌入式 Linux 系统中运行得非常好。嵌入式 Linux 有许多可用的 Java 开发环境。您确实遇到差异的一个领域是图形库。通常,Microsoft 图形 API 在 Linux 上没有得到很好的支持,所以如果你有一个大型的应用程序团队,他们是死硬的 Windows GUI 程序员,那么 WinCE 可能是有意义的。但是,在 Windows PC 和嵌入式 Linux 设备上运行的 GUI 工具包有很多选项。一些示例包括 GTK+、Qt、wxWidgets 等。Gimp 是在 Windows 上运行的 GTK+ 应用程序的一个示例,此外还有许多其他应用程序。它们是与 GTK+ 和 Qt 的 C# 绑定。另一个似乎在 WinCE 领域变得强大的功能是 Windows Communication Foundation (WCF)。但同样,有一些项目可以将 WCF 引入 Mono,这取决于您需要哪些部分。嵌入式 Linux 对 Python 等脚本语言的支持非常好,Python 在 200MHz ARM 处理器上运行得非常好。

人们常常认为 WinCE 是实时的,而 Linux 不是。Linux 实时支持在带有 PREEMPT 选项的股票内核中是不错的,并且通过添加一个相对较小的实时补丁,实时支持非常好。使用 Linux,您可以轻松实现亚毫秒级计时。这在过去几年中随着实时功能合并到股票内核而发生了变化。

开发流程

在生产环境中,最先进的嵌入式应用程序是在 PC 上开发和调试的,而不是在目标硬件上。即使在目标系统上的远程调试效果很好的设置中,在工作站上调试应用程序也效果更好。因此,一种解决方案具有良好的目标调试功能,而另一种解决方案没有这一事实并不真正相关。对于以数据为中心的系统,通常具有可以在不连接到真实 I/O 的情况下测试应用程序的模拟模式。对于 Linux 和 WinCE 应用程序,嵌入式设备的应用程序编程类似于 PC 编程。嵌入式 Linux 更进一步。由于嵌入式 Linux 技术与桌面和服务器 Linux 技术相同,几乎所有为桌面/服务器开发的东西(包括系统软件)都可以免费嵌入。这意味着非常完整的驱动程序支持(参见上面的 USB 单元调制解调器和打印机示例)、强大的文件系统支持、内存管理等。Linux 的选择范围令人震惊,但有些人可能会认为这是一个负面因素,并且更喜欢像 Windows CE 这样的集成解决方案,一切都来自一个地方。失去了灵活性,但在某些情况下,这种权衡可能是值得的。有关可以使用 Openembedded 为嵌入式 Linux 系统构建的软件包数量的示例,请参阅。并且更喜欢像 Windows CE 这样的更集成的解决方案,其中一切都来自一个地方。失去了灵活性,但在某些情况下,这种权衡可能是值得的。有关可以使用 Openembedded 为嵌入式 Linux 系统构建的软件包数量的示例,请参阅。并且更喜欢像 Windows CE 这样的更集成的解决方案,其中一切都来自一个地方。失去了灵活性,但在某些情况下,这种权衡可能是值得的。有关可以使用 Openembedded 为嵌入式 Linux 系统构建的软件包数量的示例,请参阅。

图形用户界面趋势

重要的是要考虑由手机(iPhone、Palm Pre 等)驱动的带有小型显示器的嵌入式设备的趋势。桌面系统中常见的标准 GUI 小部件(对话框、复选框、下拉列表等)并不适用于现代嵌入式系统。因此,考虑支持 3D 效果和设计用于触摸屏设备的小部件库非常重要。Clutter 库是此类支持的一个示例。

远程支持

回到调试工具的问题,大多数人停留在设备设置在实验室工作站旁边的场景上。但是,当您需要对在世界各地进行 beta 测试的设备进行故障排除时,该怎么办?这就是像 Gdb 这样的命令行调试器的优点,而不是缺点。如果您不支持新西兰的蜂窝调制解调器,或者不支持 ssh 等用于 shell 访问和传输文件的高效连接机制,您如何连接到设备?

概括

选择任何先进技术都不是一件容易的事,即使有经验也很难做到。因此,重要的是要提出正确的问题,并从多个角度看待决定。希望这篇文章能对此有所帮助。

于 2009-06-20T19:20:33.037 回答
13

我参与过涉及定制 OEM 板的软件的项目,我不会说 Linux 更便宜。购买开发板时,您还需要购买 SDK。即使是 Linux 版本,您仍然需要付费。一些制造商为其板提供 Windows CE 和 Linux 解决方案,并且没有价格差异。对于 Windows CE,您还需要 Platform Builder 并支付许可证费用,但没有支持会更容易。

另一个重要问题是,如果您正在构建用户界面或无头设备。对于需要 LCD 屏幕和人机交互的设备,使用 Windows CE 更容易。另一方面,如果您正在构建无头设备,Linux 可能是一个更合理的选择——尤其是在涉及网络协议的情况下。我相信 Linux 实现更可靠,更容易调整。

于 2008-11-28T21:45:16.583 回答
8

使用 Linux,您永远不会独自一人,也永远不会依赖单一实体来提供权限。有许多支持选项,您可以通过许多竞争来源自由选择系统任何部分的支持选项。

对于 Windows CE,您必须遵守必须同意的复杂许可协议中规定的许可和限制。找个律师。使用 Windows CE,您只有一个专有的操作系​​统支持来源,并且您只会在他们认为适合支持和提供您需要的东西时继续进行。您可能不同意他们的立场,但除了屈从于他们的规定外,您别无选择。增量组件、模块、开发套件、许可和支持的成本往往与专有平台堆积在一起。从长远来看,当供应商不再希望支持该平台而您无权自己支持和分发它时会发生什么?当供应商转向更新的技术并希望您与他们一起移动时会发生什么,即使您可能还没有准备好采取行动?$$$

我们对 Windows 解决方案的总体经验是,随着时间的推移,它们往往会变得更加昂贵。最初被认为是最低 TCO 的解决方案很快被吸引到维护和支持成本高昂且负担重的解决方案上。随着时间的推移,许可证必须重新谈判,而且通常不需要的新技术为了满足他们的业务需求而被供应商一时兴起被迫纳入画面。最重要的是,许可协议不断变化——请律师。

使用 Linux,您可以自由地提供内部支持和专业知识,而无需根据需要分发解决方案。您还可以自由地继续使用和支持原始提供商不再想要支持的技术。在业务连续性和控制成本方面,拥有源代码和使用它的权利(GPL、LGPL)是一个强大的吸引力,同时提供对最新技术或满足您需求的技术的访问。

于 2011-06-02T15:09:59.343 回答
7

我已经开发了可以在 RT Linux(更具体地说,带有 RT 补丁的 Linux 抢占式内核)和 Windows CE 上运行的网络驱动程序。我的经验是 windows CE 在实时响应方面更稳定。帧计时还显示 Windows CE 的抖动更小。

在 RT Linux 上,我们遇到了各种各样的问题。例如,当用户移动鼠标时;我们的帧被延迟了。你猜怎么着,x-windows 的某些变体禁用中断。您可能还会觉得仅在控制台屏幕上更安全。如果您启用了 VGA 帧缓冲区,您将再次失败。我们在抖动方面再次遇到了 Windows CE 的一个问题。当 USB 控制器在 BIOS 中设置为不正确的模式并且 Windows CE 使用大量时间进行轮询时,就会出现问题。

老实说,windows CE有更多的支持。在 Linux 上,您只能靠自己。您必须阅读所有可能的邮件列表以了解您可能遇到的问题。

于 2009-06-20T22:01:01.480 回答
5

部分定制的操作系统

如果操作系统是开源的(并且您具有专业知识),则更容易实现。

于 2008-11-28T19:55:01.297 回答
2

对于某些嵌入式系统,Android 是一个不错的选择。(它是基于 linux 的)

  • 您有许多能够在此系统上进行开发的专家。

  • 您可以访问 java 或 C 中的许多库。

但它使用了大量的内存和能量。

对于付费/许可软件,我们经常忘记的是您必须处理许可证。这需要时间和精力!然后,您必须跟踪您是否正确付款。它涉及许多具有不同技能的不同人员,并且决策成本很高。

这项成本通常不包括在表明开源/免费软件比付费软件更昂贵的研究中。

使用“免费软件”可以更轻松地处理许可证,并且您在处理这些问题上花费的时间更少。就我个人而言,每次更改软件的某些部分时,我都希望避免与您的法律/财务团队进行不必要的沟通。

于 2013-10-09T08:45:54.397 回答