开源嵌入式操作系统的比较与选择

发表时间: 2021-01-06 18:10

开源嵌入式操作系统,其字面意思有3点,即开放源代码、嵌入式和操作系统,但实质上其流行的关键在于其可扩展性。

开源是指开放源代码,是指软件在开放源代码许可证下发布软件,保障软件用户自由查看软件源代码的权利。这同时也保障了用于修改、复制和再分发的权利,但仍需遵守开源许可协议中的一些约束。开放源代码不仅仅指开放源代码的软件,也是一种软件开发模式。

“许可证”是指授权条款,是指使用、修改、复制和再分发的条款和条件的法律文件。最常见的开源许可证有几种:GNU GPL许可证、Apache许可证等。许可证通常也称为许可协议。

“Apache许可证”是著名非盈利开源组织Apache采用的协议。该协议鼓励代码共享和尊重原作者的著作权,同样允许代码修改、再发布(作为开源或商业软件)。获得该许可证需要满足以下4个条件。

  • 需要给代码的用户一份Apache许可协议。
  • 如果你修改了代码,需要在被修改的文件中说明。
  • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、商标、专利声明和其他原来作者规定需要包含的说明。
  • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache 许可证。你可以在Notice文件中增加自己的许可内容,但不可以表现为对Apache许可证构成更改。
  • Apache许可协议是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布和销售。

    GPL是著名的开源软件Linux采用的许可协议。GPL许可证和Apache许可证等鼓励代码重用的许可很不一样。GPL许可证的出发点是代码的开源使用和引用/修改/衍生代码的开源使用,但不允许修改和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用使用各种商业软件公司发布各种Linux系统以及他们的源代码。

    GPL许可证主要有以下两个特点。

  • 程序运行不受许可协议的限制。
  • 只要在一个软件中使用GPL许可证的产品,则该软件产品发布时也必须采用GPL许可证,即必须同时发布其源代码。这就是所谓的“传染性”。并且在发布任何基于GPL许可的软件时,不能添加任何限制性的条款。
  • 嵌入式系统,是指嵌入到硬件系统内部,为特定应用功能而设计的专用软件系统。与个人计算机的通用操作系统不同,嵌入式系统通常只针对特殊的用途。因此可以对它进行优化,并裁剪到最小。现在通用的硬件系统发展非常迅速,因此出现了在通用硬件系统上的嵌入式操作系统。目前在嵌入式领域广泛使用的操作系统有:Linux、Windows Embedded和VxWorks等。

    基于Linux内核也衍生出很多操作系统发行版本。Linux基金会负责Linux内核的开发、发行及维护工作。对于各个基于Linux内核的发行版本来说,可以选择某款Linux内核长期支持版(LFS)作为自己操作系统的内核。如果对主干版本进行修改,可以将修改反馈给上游。等到下次升级内核版本时,就会得到包含自己修改代码的内核了。

    相对于专有的闭源操作系统,如Windows和Mac,开源Linux操作系统最大的特点就是其可扩展性非常好。但如果从头开始构建操作系统,则会因为使用者的技术水平、软件包的依赖关系、软件包的版本等出现很多不可预知的兼容性问题。这就要求个人和企业用户在选择操作系统时需要注意根据自己的实际情况来选择,这也是目前使用开源Linux操作系统较为困难的最主要原因。还好有些技术社区组织已经针对某些领域做了一些特殊的定制和优化。例如,针对防火墙的操作系统有IPFire;针对智能路由器领域通常使用的嵌入式操作系统有Tomato和OpenWrt等;针对个人桌面领域操作系统有Ubuntu和Fedora等;针对手机有Android和Firefox OS等。它们均是基于Linux内核的操作系统。

    OpenWrt简介

    OpenWrt是一个嵌入式设备的Linux发行版,以GPL许可协议发行。

    OpenWrt项目始于2004年1月,其第一个版本采用了LinkSys的源码。在LinkSys的代码收费后,改为采用正式发布的Linux内核来集成,并将OpenWrt完全模块化,不断推出补丁和驱动。OpenWrt的主要特点在于其高扩展性,并且文件系统可写,开发者无需在每一次修改后完全重新编译,只要编译自己的软件包即可,这样就加快了开发的进度。另外OpenWrt提供了SDK,每个运行软件均能够以SDK来进行编译,以软件包形式进行安装和卸载。其主要特点有如下几个。

  • 代码里不含第三方开源包,只包含开源包地址链接。
  • 编译时自动下载源代码、打补丁来满足指定平台要求,并编译。还可以修改Makefile来下载最新的软件包。
  • 使用LuCI作为最终用户管理界面。LuCI以Apache许可协议发布Web管理功能代码。
  • UCI通用配置管理方法。
  • 通过脚本来调用iptables来实现防火墙功能,配置保存在UCI文件中。
  • 开放和可扩展的OPKG格式安装升级包。
  • OpenWrt和Android比较

    Android是谷歌研发的一款智能终端操作系统,是一种基于Linux的开放源代码的操作系统,主要使用于移动设备 ,如智能手机、平板计算机等,也应用于智能电视等。它由谷歌公司和开放手机联盟领导开发。Android操作系统最初由安迪·鲁宾开发,最初目的是用于数码相机的操作系统。2005年8月谷歌全资收购了Android操作系统。2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android系统。随后谷歌以Apache开源许可协议的授权方式发布了Android的源代码,Android以JAVA层封装了系统层提供给应用开发者统一的API接口。第一部Android智能手机发布于2008年10月。目前,Android已逐渐扩展到平板计算机及其他领域,如电视、智能手表、数码相机和游戏机等。2015年,Android以85%的市场占有率占据移动操作系统市场之首。表1所示为OpenWrt和Android的比较。

    Android操作系统已经演化为一个移动设备开发平台,其软件层次大体上分为4层,即操作系统内核、中间层、应用程序框架层和应用程序。应用程序框架层为应用程序开发者提供了功能强大的API,包括图形显示的各种组件,如视图、列表、文本框、按钮以及嵌入式的Web浏览器等。

    OpenWrt和其他WRT比较

    1.Tomato WRT

    Tomato是一种小型的LinkSys的WRT54G是博通路由器的另外一种可选的替换固件。它有一个新的易于使用的GUI,一个新的带宽监控工具,更为先进的服务质量(QoS)和访问限制,使用新的无线功能,如WDS和无线客户端模式,P2P最大连接上的限制,允许你运行自定义脚本或者Telnet、SSH登录到路由器,在做各种各样的事情。例如重新编程的SES/AOSS按钮,添加无线站点调查来查看你的Wi-Fi邻居,等等。Tomato有以下特点。

  • 代码压缩包35.4MB,仅提供必要的代码,其他代码需要自己手动下载。
  • 在LinkSys提供的源码上仅做少量修改,内核还是采用2.4版本。
  • 在编译时需要特别注意设置环境变量,例如:Export LC_ALL=en_US.UTF-8。
  • 编译时代码有时间依赖,复制时需要保留时间,使用命令“cp –a”。
  • “www.polarcloud.com/tomato”提供源代码及二进制包,源代码和思科发布的代码相近,仅修改一些必须的代码。编译时需要首先下载思科的代码,并替换相应的文件。
  • 代码地址为git://repo.or.cz/tomato.git, 最新版本为Tomato1.28,更新日期为2010-6-29。
  • 它有一些明显缺点,例如仅有发布说明,没有详细修改记录;最近不再更新等。

    2.DD-WRT

    DD-WRT是一个基于Linux的开源固件,适合各种各样的无线路由器和嵌入式操作系统。其重点在于提供最简单的处理,同时在各种硬件平台的框架内支持大量的功能。它是另外一款路由器代码发行版,从2006年2月开始开发,没有分支稳定版本。代码库包含所有的代码,包含SVN信息共大约18GB。其代码始终在更新,2015年10月也有代码提交。有一个缺点是SVN上包含所有的代码,没有分支及标签,无法区分稳定版本。用在私人用途,DD-WRT是免费的,如果用在商业用途则需要获取软件许可。

    表2所示为开源路由器各种发行版本的对比。

    3.比较结果

    OpenWrt相对于其他几个无线路由器操作系统来说,版本管理最为规范,社区最活跃,是最适合选为基础来进一步开发的。当然,OpenWrt也适合初学者来学习。


    本文节选自《智能路由器开发指南》

    内容简介


    OpenWrt是在实现路由器功能方面最受欢迎的开源软件之一。本书基于OpenWrt,详细介绍了智能路由器的开发。

    本书共计15章,按照认识路由器的顺序进行编写,介绍了智能路由器、开发环境及编译分析、OpenWrt包管理系统、OpenWrt配置、软件开发、GDB调试、网络基础知识、路由器基础软件模块、常用软件模块、IP路由、DNS与DHCP、iptables防火墙、UCI防火墙、UPnP、网络测试及分析工具等。丰富的理论知识和代码示例可以帮助读者深入认识和理解OpenWrt技术,并能够提升开发水平和开发效率。

    本书适合软件架构师、软件开发工程师、软件测试工程师以及计算机相关专业的学生阅读。读者通过阅读本书,不仅可以掌握OpenWrt技术,还能进一步提升自己的软件开发水平。