本节书摘来异步社区《智能路由器开发指南》一书中的第1章,第1.3节,作者:张永智 ,李章明,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.3 开源嵌入式操作系统比较
开源嵌入式操作系统,其字面意思有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内核的操作系统。
1.3.1 和Android比较
Android是谷歌研发的一款智能终端操作系统,是一种基于Linux的开放源代码的操作系统,主要使用于移动设备 ,如智能手机、平板计算机等,也应用于智能电视等。它由谷歌公司和开放手机联盟领导开发。Android操作系统最初由安迪·鲁宾开发,最初目的是用于数码相机的操作系统。2005年8月谷歌全资收购了Android操作系统。2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android系统。随后谷歌以Apache开源许可协议的授权方式发布了Android的源代码,Android以JAVA层封装了系统层提供给应用开发者统一的API接口。第一部Android智能手机发布于2008年10月。目前,Android已逐渐扩展到平板计算机及其他领域,如电视、智能手表、数码相机和游戏机等。2015年,Android以85%的市场占有率占据移动操作系统市场之首。表1-2所示为OpenWrt和Android的比较。
Android操作系统已经演化为一个移动设备开发平台,其软件层次大体上分为4层,即操作系统内核、中间层、应用程序框架层和应用程序。应用程序框架层为应用程序开发者提供了功能强大的API,包括图形显示的各种组件,如视图、列表、文本框、按钮以及嵌入式的Web浏览器等。
![d82d11b3945f43e2f4c4a32fef2aaab1909bbb28](https://i-blog.csdnimg.cn/blog_migrate/a3e37d3de257fe6d3f2b59caa797818a.png)
1.3.2 和其他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是免费的,如果用在商业用途则需要获取软件许可。
![30815a7e245a3610c718887731366d0eeb00ae1a](https://i-blog.csdnimg.cn/blog_migrate/986a8b5555bff5c51cb4e33884b37c35.png)
![ea3ac628e3e1803d3cb7cd413327d91226c0e663](https://i-blog.csdnimg.cn/blog_migrate/e249f2cc7a8808d78bd43a69b8535e9a.png)
3.比较结果
OpenWrt相对于其他几个无线路由器操作系统来说,版本管理最为规范,社区最活跃,是最适合选为基础来进一步开发的。当然,OpenWrt也适合初学者来学习。本书中采用了OpenWrt来论述智能路由器的开发过程,非常有利于初学者快速上手。