嵌入设计相关的自由软件

开源软件已成为嵌入行业中的一个重要话题,因为设计者要在有限预算情况下应对逐步增加的软件复杂性。

  提示
  * 传统上自己开发嵌入式软件的设计团队正转向开源软件,以应对日益增长的设备复杂性。
  * 免费的源代码和无需经常性专利费都吸引着很多设计者,考虑在新的嵌入式系统项目中使用开源软件。
  * 你可以对各种开源软件产品作缩放调整,以适应小规模的嵌入式设备硬件配置。
  * 嵌入式系统开发者创造了多种保护专有软件,并利用开源软件优势的技术。

  由于有可能在操作系统软件、开发工具、经常性专利费以及日程方面节省庞大投入,每个嵌入式系统新项目的设计者与管理者都至少必须考虑一下开源软件。当嵌入式系统业从资源有限的设计转向有多种新软件功能(如高速网络、无线通信、交互图像以及数据加密)的高性能复杂应用系统时,各式各样的开源软件就获得了一个立足点。开发人员可以将免费下载的操作系统、库和组件与自己的专用定制软件集成起来,从而节省数以千计人工小时的开发成本。

  设计者可以选择的开源软件范围广泛,从各种极其流行的Linux操作系统变种,直到完备的调试工具。SourceForge.net是最大的开源软件开发网站,它免费管理超过18万个注册的项目,包括数据库、安全、游戏、聚类、多媒体和VoIP(IP电话)。不过,在你准备赶上这个潮流,开始下载免费代码以前,要先仔细看看开源因之流行的特性使很多设计者敬而远之的问题。这些问题会影响你的决策:定制、支持、许可、碎片、硬件成本、开发工具以及实时性能等。

  嵌入式开源软件用户的初始任务是使代码能适应于某个特定的硬件结构。根据开源的特性,开源产品必须适合于最广泛的用户,因此它们要求通用化,而不是面向某个应用。这种通用化会迫使设计者增加内存系统,除非专利费的节省能补偿,否则多余的内存需求就会转化为嵌入设备的较高再生成本。今天,大多数商用成品电路板供应商都为自己的产品提供开源的电路板支持软件包。例如,WinSystems随自己的成品板级产品提供一个定制的开源开发工具包,它包括设备的驱动程序、文档、布线和快速入门指南(图1)。这个工具包还带有BlueCollarLinux,这是Linux操作系统的一种基本的嵌入实现,你可以从开源文件重新建立它,而无需特殊或专有的开发工具。

  修补我的代码

  潜在开源软件用户的最大抱怨是缺乏一个中心化的资源,能提供类似于商业软件供应商那样的支持。开发者通常可以从互联网上找到他们问题的答案,但没有人负责研究和响应这些问题。替代办法是组织一个内部支持团队,或联络一个第三方。尽管业内很多公司都广泛接受开源软件为免费代码,但很多设计者仍希望付费获得专家支持、专用工具、定制服务,以及预封装的配置,以简化开发过程。商用供应商会提供定制的嵌入配置、订购的支持包、开发工具套件,以及实例程序,作为免费代码的补充。例如,MontaVistaSoftware公司为嵌入Linux用户提供基于订购的合同支持服务。

  开发人员认为嵌入式开源软件环境中的另一个危险是出现代码碎片的可能性。如果一个开发者决定修补开源代码以解决某个集成问题,而另一个开发者作了相似但却是不兼容的修改,现在就存在三个代码版本了。一个开发人员为一种版本所编写的应用可能与其它版本不兼容。供应商在交付操作系统时,一般也带有嵌入设备的应用,因此开发人员比最终用户更担心代码碎片问题。除了一些专用版本(如实时Linux),Linux开源社区已通过完善的升级建议和版本系统,成功地避免了多版本并存的问题。

  一般来说,开源软件都不是公共财产,你必须遵守一些规则,如阐明作为使用条件的个人许可。OSI(开源促进会)维护着20多个开源标准许可的完整版本,为社区提供服务。例如,Linux的许可是在常见的GNUGPL(通用公开许可)下,提出了详细的使用要求。如果你修改和分发了GPL软件,你的修改会自动归入GPL,并且你必须向任何提出要求的人交付源码。尽管很多嵌入式系统开发者会因为担心披露自己的专有软件源码而回避Linux,但你的应用程序和设备驱动可以保持为私有,只要它们与Linux核心分离且不包含GPL代码。这种代码隔离一直是开发人员忧虑的:WarrenWebb,EDN技术编辑