现在我确信我们都很清楚Linux与Windows桌面的相对优点.但是,我对嵌入式开发世界的了解却少得多.我主要对行业解决方案感兴趣,因此对iPhone或Android不感兴趣,对这两个操作系统更感兴趣.
嵌入式世界中两个平台之间的相对权衡是什么?如果您正在考虑使用自定义硬件,部分自定义操作系统和自定义应用程序为特定项目构建一个框,那么您会选择哪个以及为什么?
我认为Windows CE赢得了工具,Linux在成本和性能方面都获胜.然而,这只是一种猜测.有没有人有这两者的任何事实或经验?
我在一家为所有硬件提供CE和Linux的公司工作了几年,所以我对这个等式的两个方面都非常熟悉.
工具: Windows CE工具肯定比Linux提供的更好,尽管linux工具肯定会越来越好.
性能: Windows CE是实时的.Linux不是.Linux内核根本不是为确定性而设计的.您可以添加扩展以实现实时排序,但CE可以胜任它.
成本:这是一个很大误解的领域.我的一般经验是CE开箱即用的成本较低(Platform Builder为1美元,运输运行时为每台设备3美元."什么?"你问?"Linux是免费的."嗯,不是真的那么多特别是在嵌入式领域.是的,有像Debian这样的免费发行版.但是你可能需要的很多部分都不在那个免费类别中.像QT,Java运行时和媒体编解码器这样的UI框架就像一个开始.此外,大多数具有商业支持系统(例如MontaVista)的Linux发行版都不是免费的.
来源可用性:由于缺乏源代码,Linux支持者可能会说CE是一个糟糕的选择.我可以说的是,在与CE合作的十多年中,其中一半用于定制内核和驱动程序的定制板工作,我只需要没有CE的源代码(他们运送的是巨大的大部分)一次.我也喜欢有源代码,但微软提供支持,所以在极少数情况下你可能认为你需要这个来源,你可以让他们解决问题(有一次我们需要源代码,微软提供了修复,而且是免费的 - 是CE的模特.
这是否意味着CE每次都获胜?不,我根本不会建议.如果你是一个Linux商店,并且你拥有大量的Linux经验和代码资产,那么用完CE就是愚蠢的.但是,如果您从头开始进入CE,通常会降低TCO.具有Win32/C#经验的开发人员更为普遍,因此成本更低.与大多数其他发行版相比,你在CE中获得了更多的"框内",这意味着如果你还没有在内部完成这些工作,那么上市时间会更快.
我会代表Linux方面,至少对于我熟悉的软件类别(RF数据采集设备).或工业应用与消费者应用.
Windows CE(及其相关工具)IMH相当近期E)强烈偏向于在小屏幕上创建"Windows体验".用户输入模式强调类似鼠标的动作.登录,应用程序选择等都尽可能与标准Windows类似.
如果用户驾驶叉车,或填充拣货车,或将物料从一个地方移动到另一个地方,则会出现问题.
它是一个移动目标 - 特别是在.NET方面.Compact .NET运行时非常缺陷,重要的库(如网络,数据处理和UI)不完整,版本也经常弃用以前的版本..CE似乎是Windows系列中的继子(可能因为没有大量的竞争对手向硬件集成商销售.)
一个漂亮稳定的行和列Linux控制台是一个非常方便的上下文,对于很多(在我的经验)大多数高硬度的应用程序在一个小的屏幕上.
但是对你的手机或Zune上的游戏来说并不是很好.
注意:
我认为ctacke可能会准确地说出硬件集成商的一面.我更加关注管道中的玩家 - 软件集成商和用户.
选择通常主要取决于感知和文化,而不是具体数据.并且,当您考虑现代操作系统的复杂性,将其移植到自定义硬件以及未知未来需求相关的所有问题时,基于具体数据做出选择是很困难的.即使从应用程序的角度来看,事情也会随着项目的生命而改变.要求来去匆匆.你发现自己做了一些你从未想过的事情,特别是如果它们是可能的话.无处不在的USB和网络端口提供了很多可能性 - 例如添加Cell调制解调器支持或打印机支持.基于闪存的存储使现场软件更新为标准操作模式.最后,每个解决方案都有其优点和缺点 - 在所有情况下都没有最好的灵丹妙药.
在考虑嵌入式Linux开发时,我经常使用冰山比喻; 你看到进入一个项目的是水面以上的部分.这些是您的应用程序与之交互的部分,您需要自定义的驱动程序,您理解的部分.另外90%是在水下,这里存在很大的变化.驱动程序的质量问题或者无法为将来可能要支持的某些内容找到驱动程序可能会轻易淹没项目的已知部分.很少有人在WinCE和Linux解决方案方面拥有丰富的经验,因此倾向于选择舒适的(或经理们熟悉的)或我们经验丰富的东西.以下是需要考虑的几个方面的想法:
系统软件开发
这个领域的问题包括CPU支持,驱动程序质量,现场软件更新,文件系统支持,驱动程序可用性等.过去两年中发生的变化之一是CPU供应商现在将Linux移植到他们的新芯片中作为第一个OS.之前,操作系统移植通常由Linux软件公司(如MontaVista)或社区工作完成.因此,Linux内核现在支持大多数主流嵌入式cpu,几乎没有其他补丁.这与5年前的情况截然不同.因为许多人使用相同的源代码,所以问题得到修复,并且通常会回馈给主流来源.使用WinCE,BSP /驱动程序支持往往更像是一个参考实现,然后OEM /用户接受它,修复任何问题,这就是修复程序往往保留的地方.
从系统的角度来看,考虑未来需求的灵活性非常重要.仅仅因为它现在不是一个要求并不意味着它不会成为未来的要求.获得对外围设备的驱动程序支持几乎是不可能的,或者是为了使其实用化而付出太大的努力.
大多数人都很少考虑构建系统,或者从来没有想过"如果有一个很好的gui缠绕在工具上,那一定很容易".OpenEmbedded是构建嵌入式Linux产品的非常流行的方式,并且最近被认可为MontaVista的Linux 6产品的技术基础,并且通常被新用户认为是"难以使用".虽然WinCE构建工具在表面上看起来更简单(10%以上),但是当我需要定制某些东西,实现复杂功能(如软件更新等)时,仍会遇到问题.构建具有生产等级的生产系统功能,您仍需要团队中了解操作系统的人员,并且可以在操作系统和构建系统的详细级别上工作.无论是WinCE还是嵌入式Linux,这通常意味着公司要么需要内部经验丰富的开发人员,要么聘请专家来完成部分系统软件开发.系统软件开发与应用程序开发不同,除非你有很多时间,否则通常不是你想要没有经验的东西.公司在第一批项目中聘请专家帮助,然后在内部进行后续项目是很常见的.另一个需要考虑的功能是并行构建支持.随着四核工作站成为标准,完全构建可以在1.2小时内完成,而不是8小时吗?构建系统在从各种来源(如各种修订控制系统等)中提取和构建源代码的灵活性.
嵌入式处理器变得越来越复杂.让cpu运行已经不够了.如果您考虑使用TI的OMAP3 cpu系列,那么您必须提出以下问题:是否有可用于3D加速引擎的库,我甚至可以在没有每年承诺数百万个单元的情况下获得这些库?是否支持DSP桥接?这一切的成本是多少?在我参与的最近一个项目中,Atmel AT91SAM9260的基本WinCE BSP售价为7000美元.就开发人员时间而言,这并不多,但您还必须考虑维护的持续成本,升级到新版本的操作系统等.
应用开发
Embedded Linux和WinCE都支持一系列应用程序库和编程语言.C和C++得到很好的支持.大多数业务类型的应用程序都在WinCE世界中转向C#.Linux拥有Mono,它为.NET技术提供了广泛的支持,并且在嵌入式Linux系统中运行良好.嵌入式Linux有许多Java开发环境.您遇到差异的一个领域是图形库.通常,Linux上没有很好地支持Microsoft图形API,因此如果您拥有一个顽固的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则不是.使用PREEMPT选项的库存内核中的Linux实时支持是不错的,并且通过添加相对较小的实时补丁,实时支持非常好.使用Linux可以轻松实现亚毫秒级.在过去几年中,随着实时功能与库存内核的融合,这种情况发生了变化.
发展流程
在高效的环境中,大多数高级嵌入式应用程序都是在PC上开发和调试的,而不是目标硬件.即使在目标系统上的远程调试运行良好的设置中,在工作站上调试应用程序也能更好地工作.因此,一个解决方案具有良好的目标调试,而另一个解决方案没有真正相关的事实.对于以数据为中心的系统,通常具有模拟模式,可以在不连接到实际I/O的情况下测试应用程序.对于Linux和WinCE应用程序,嵌入式设备的应用程序编程类似于PC的编程.嵌入式Linux更进了一步.由于嵌入式Linux技术与桌面和服务器Linux技术相同,因此几乎所有为桌面/服务器(包括系统软件)开发的内容都可以免费嵌入.这意味着非常完整的驱动程序支持(请参阅上面的USB单元调制解调器和打印机示例),强大的文件系统支持,内存管理等.Linux的选项范围非常惊人,但有些人可能会认为这是一个负面因素,并且更喜欢更多像Windows CE这样的集成解决方案,一切都来自一个地方.缺乏灵活性,但在某些情况下,权衡可能是值得的.有关可以使用Openembedded为嵌入式Linux系统构建的软件包数量的示例,请参阅.
GUI趋势
重要的是要考虑嵌入式设备的趋势,其中小型显示器由手机(iPhone,Palm Pre等)驱动.桌面系统中常见的标准GUI小部件(对话框,复选框,下拉列表等)不会为现代嵌入式系统削减它.因此,考虑支持3D效果和设计用于触摸屏设备的小部件库非常重要.Clutter库就是这种支持的一个例子.
远程支持
回到调试工具的问题,大多数人停在设备在实验室工作站旁边设置的场景中.但是,当您需要对在全球范围内进行beta测试的设备进行故障排除时呢?这就是像Gdb这样的命令行调试器的优势所在,而不是缺点.如果您不支持新西兰的单元调制解调器,或者像ssh一样有效的连接机制来访问和传输文件,那么如何连接到设备呢?
摘要
选择任何先进技术并不是一项简单的任务,即使有经验也很难做到.因此,重要的是要提出正确的问题,并从多个角度审视决策.希望这篇文章可以提供帮助.
我参与了涉及定制OEM板软件的项目,我不会说Linux更便宜.购买电路板时,您还需要购买SDK.你仍然需要支付Linux版本.一些制造商为其主板提供Windows CE和Linux解决方案,并且没有价格差异.对于Windows CE,您还需要Platform Builder并支付许可费用,但如果没有支持则更容易.
另一个重要问题是如果您正在构建用户界面或无头设备.对于需要LCD屏幕和人机交互的设备,使用Windows CE更容易.另一方面,如果您正在构建无头设备,Linux可能是一个更健全的选择 - 特别是如果涉及网络协议.我相信Linux实现更可靠,更容易调整.
使用Linux,您永远不会拥有自己,并且您永远不会依赖单个实体来提供权限.有许多支持选项,您可以通过许多竞争来源自由选择系统的任何部分的支持选项.
使用Windows CE,您必须遵守必须同意的复杂许可协议中规定的许可和限制.找个律师.使用Windows CE,您只有一个专有的操作系统支持源,您将只在他们认为合适的情况下继续支持并提供您所需的内容.你可能不同意他们的立场,但不会有任何追索权,只能屈服于他们的处方.增量组件,模块,开发套件,许可和支持的成本往往会与专有平台堆积在一起.从长远来看,当供应商不再希望支持该平台而您自己没有权利支持和分发时会发生什么?当供应商转向更新的技术并希望您随身携带它们时会发生什么?即使您可能还没准备好采取行动?$$$
我们对Windows解决方案的一般体验是,随着时间的推移,它们往往会变得更加昂贵.最初被认为是最低TCO的东西很快就会受到影响,并且解决方案会受到阻碍,并且需要维护和支持.随着时间的推移,许可证必须重新协商,并且为了满足业务需求,新的技术(通常是不需要的)会被提供者一时兴起.最重要的是,许可协议正在不断变化 - 找一位律师.
使用Linux,您可以自由地提供内部支持和专业知识,而无需根据需要分发解决方案.您还可以自由地继续使用和支持原始提供商不再支持的技术.拥有源代码和RIGHT可以满足您的需求(GPL,LGPL)是一个强大的吸引力,它涉及业务连续性和包含成本,同时提供对最适合您需求的最新技术或技术的访问.
我开发的网络驱动程序既适用于RT Linux(更具体地说,Linux抢占式内核和RT补丁)和Windows CE.我的经验是Windows CE在实时响应方面更稳定.帧时序还表明Windows CE具有较少的抖动.
在RT Linux上,我们遇到了各种各样的问题.例如,当用户移动鼠标时; 我们的帧被推迟了.猜猜看,x-windows的某些变种会禁用中断.您可能还会觉得在控制台屏幕上更安全.如果启用了VGA帧缓冲区,则会再次注定失败.我们在抖动方面只有一个问题.当USB控制器在BIOS中设置为错误模式且Windows CE使用大量时间进行轮询时,会出现问题.
说实话,Windows CE有更多的支持.在Linux上,你是独立的.您必须阅读每个可能的邮件列表,以了解您可能遇到的问题.
部分定制的操作系统
如果操作系统是开源的(并且您具有专业知识),则更容易实现.