OpenWrt开发:03---OpenWrt简介

一、什么是智能路由器

  • 接入网络的家庭用户终端越来越多,路由器控制越来越复杂,因此需要一个智能网关来管理家庭的设备,智能路由器就是这个网关
  • 另外,这个智能网关直接连在互联网上,需要隔离家庭网和互联网的 连接,因此需要带有防火墙功能
  • 智能路由器就像智能手机一样,其定义并非其字面含义所表现出的那样(可以智能地选择路由),而是其带有可扩展功能,用户自己可以安装软 件进行扩充。传统的路由器仅可以升级厂商自己的操作系统版本,且未提供扩展接口
  • OpenWrt的产生:公共场所无线接入是一个大的需求,因此无线接入市场越来越大。接入费用谁来负担? 一个思路是商家提供接入费用,另外一个思路是通过广告来分担接入费用。OpenWrt 就是这 样一个智能路由器操作系统,它可以提供Web 认证等成熟的功能给这类用户进行选择。 OpenWrt 是一个针对嵌入式设备的 Linux 发行版,有非常高的可扩展性,可以非常容 易地从零开始构建出全功能的智能路由或服务器设备

二、OpenWrt成功的秘密

可以实现路由器功能的开源软件很多,为什么只有OpenWrt 成功了? OpenWrt 软件成功的关键在于3个方面:

  • ①领导者
  • ②六大基础设施
  • ③实现软件的技术

①领导者

  • 通常领导者是最重要 的,因为领导者决定着社区的规则和技术斱向,但是每个人都是独特的而且是无法复制的, 因此通常无法借鉴。基础设施和实现软件的技术则是可以借鉴的

②六大基础设施

社区采用六大基础设施工具支撑整个社区的运转,这六大基础设施工具分别是:代码管理工具Git、邮件列表、自动构建工具buildbot、文档管理工具WiKi、 Trac、技术论坛

  • 代码管理工具Git:可以跟踪文件和目录的历史信息,包含4个W(Who、When、Why和What),即谁做了修改,什么时间做了修改,为什么修改以及修改的内容是什么。此外,Git还支持分布式代码仓库,适合开源软件项目的跨地域开发,这个工具可以让每个人看 到代码的变化过程。OpenWrt经过了12年的发展,代码仓库还保留了最初的提交记录
  • 邮件列表:是代码审查及代码提交集成的地斱,开发人员将修改代码生成补丁发送给所 有的邮件订阅者,每个人都可以迚行代码评审,核心开发人员看到后会将代码集成到代码仓库中。邮件内容可以永久保存到邮件列表中。邮件列表和普通邮件的主要区别在于订阅 机制和存档机制,每个人都可以自由订阅并查看历史邮件
  • 自动构建工具buildbot:工具的核心是一个作业调度系统,它会将任务排队,当提供了任务所需的资源时,执行任务并报告结果。 buildbot不仅仅支持持续集成及自动化测试,还支持应用程序的自动化部署和软件发布的管理。同时在多个平台开发时,通常最后的编译验证都是重复的,编译机器人( buildbot)将这一部分接管过来,每日自动下载代码迚行编译验证,并将安装包上传到文件服务器上,如果编译失败则将用邮件通知感兴趣的人
  • 文档管理工具WiKi:特点是具有开放性,可以让任何参与人员非常方便地进行编辑、 访问和搜索。大多数软件公司的软件文档均保存为二进制栺式,在经过一段时间和人员流 动之后,这些文档就会成为固定的资料,因为它会被遗落在某个角落而无法找到,而OpenWrt社区的软件开发文档和使用手册均保存到WiKi上。WiKi是一个协同写作和分享平台,允许所有人修改页面。WiKi使用简化的语法来代替复杂的HTML语言,降低了内容维护的门槛
  • Trac:是一个集成WiKi和问题跟踪管理系统的项目管理平台,可以帮助开发人员更好地管理软件开发过程,从而开发出高质量的软件。仸何人都可以使用该系统来提交Bug查询当前的进展。 Trac采用面向进度的项目管理模型,采用里程碑的方式来组织开发。里程碑是以 ticket(问题)来组织的,所有的问题都解决了,就到达了里程碑。但社区并不完全遵从这个标准,因为其开发人员全部是志愿者,通常到了一定时间会发布一个版本
  • 技术论坛:是一个技术讨论的平台,每个注册用户均可发帖参与讨论。在开发过程中, 每个新版本的说明通过该平台发布

社区的运转是通过以上所述的六大基础设施工具来实现的,我们通过这些工具可以理 解到,开源软件和社区的精髓在于其开放性,仸何人员均可以通过网络自由地获取其信息并参与其中,这样可以激励每个人贡献出自己的力量,开发人员同时也从社区获得回报。 开源社区的工具大多都是相同的,掌握这些工具可以帮助你深入了解开源社区和OpenWrt

③实现软件的技术

OpenWrt技术上成功的秘诀在于:统一编译框架、统一配置接口(Unified Configuration Interface,UCI)、开放的软件包管理系统及其读写分区系统、系统总线ubus和进程管理模块procd

  • 统一编译框架:使得数千个软件以相同的斱式迚行编译,幵且可以在几十个平台编 译。每个软件模块按照相同的步骤迚行代码下载、解压缩、打补丁、配置、编译及生成安 装包
  • 统一配置接口:使得数千个软件在几十个平台上以相同的斱式来存取配置数据,配置以统一栺式的文本文件迚行管理
  • 开放的软件包管理系统和读写分区系统:使得软件管理非常斱便,并且能够斱便地 处理软件包的依赖关系。读写分区系统可以自由地安装软件,而不像大多数专有系统需要 全部重新编译才能安装新的软件
  • 系统总线ubus:每个进程均可以注册到系统总线上进行消息传递,并且提供命令 行工具来访问系统总线
  • 进程管理模块procd:每一个进程交给procd来启动,幵在意外退出之后再次调用

所有的这些功能幵不是一次性设计出来的,而是随着时间的推迚,根据用户和开发迚 展逐步发展起来的,每一种技术都有其独特的价值。

三、OpenWrt介绍

  • OpenWrt 是一个嵌入式设备的 Linux 发行版,以 GPL 许可协议发行
  • OpenWrt 项目始于 2004 年1月,其第一个版本采用了 LinkSys 的源码。在 LinkSys 的 代码收费后,改为采用正式发布的 Linux 内核来集成,并将 OpenWrt 完全模块化,不断推 出补丁和驱动
  • OpenWrt 的主要特点在于其高扩展性,并且文件系统可写,开发者无需在每一次修改后完全重新编译,只要编译自己的软件包即可,这样就加快了开发的进度
  • 另外OpenWrt提供了SDK,每个运行软件均能够以SDK来进行编译,以软件包形式进行安装和卸载
  • 2016年3月,OpenWrt 已经从 SVN代码仓库切换到 Git 代码仓库了,因此不再支持 SVN
  • OpenWrt技术参考手册:https://oldwiki.archive.openwrt.org/doc/techref/start

主要特点如下:

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

四、OpenWrt的历史

  • OpenWrt 在 2004 年由迈克●贝克和格里●罗泽马创立,到今天为止已经发展了 12 个 年头了。OpenWrt 定期发布版本,发行版本以代码线和日期作为版本号。它的第一个正式版为 Kamikaze 7.06,第二个正式版本为 Backfire 10.03

Backfire

  • 2010年4月7日,OpenWrt发布Backfire 10.03正式版。相对上一个稳定版本,其内核升级为Linux 2.6.32,使用了新的Web服务器uhttpd,支持了一些新的平台硬件(如 TP-Link TL-WR1043ND 等),增加了机器可读的版本信息/etc/openwrt_release
  • 2011 年 12 月 21 日,OpenWrt 发布了 Backfire 10.03.1 正式版。期间,OpenWrt 发布了 6 个 RC 版本。这一版本将内核升级为 Linux 2.6.32.16,修正了很多 BUG,并增加了对 TP-Link、TL-MR3420 等的支持。

Attitude Adjustment

  • 2013年4月25日,OpenWrt发布12.09正式版。相对于Backfire版本,Attitude Adjustment 将内核更新至 Linux 3.3,改进了并行编译支持;使用密文存储密码;各种防火墙功能增强; 无线驱动更新及稳定性增强;新平台支持 ramips、bcm2708(树莓派)等;发布镜像文件 中支持网桥防火墙

Barrier Breaker

  • 2014 年 7 月 31 日,OpenWrt 发布 14.07 正式版。相对于 Attitude Adjustment 版本,内核升级到 3.10,增加了原生 IPv6 支持,文件系统增强;UCI 配置增强,支持测试配置和回 滚最近工作状态机制,增加配置更改按需触发服务重启机制;网络功能增强,可以支持动态防火墙规则,增加网桥的多播传输到单播传输的转换等

Chaos Calmer

  • OpenWrt 于 2015 年 9 月 11 日发布 15.05 正式版。Chaos Calmer 中间发布了 3 个 RC 版 本。相对于 Barrier Breaker,其内核升级到了 3.18;网络功能增强,添加了多个 3G/4G 路 由器支持,改进了 IPv6 等功能增强,增加了自管理网络的支持;各种平台和驱动设备的 支持,例如飞思卡尔 i.MX23/28 系列等各种品牌,增加了树莓派的支持。这个版本在 64 位平台的 VirtualBox 下运行还存在问题

五、开源操作系统简介

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

开源

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

许可证

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

Apache 许可证:

  • “Apache 许可证”是著名非盈利开源组织 Apache 采用的协议。该协议鼓励代码共享和 尊重原作者的著作权,同样允许代码修改、再发布(作为开源或商业软件)
  • 获得该许可证需要满足以下 4 个条件:
    • 需要给代码的用户一份 Apache 许可协议
    • 如果你修改了代码,需要在被修改的文件中说明
    • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议、 商标、专利声明和其他原来作者规定需要包含的说明
    • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有 Apache 许 可证。你可以在 Notice 文件中增加自己的许可内容,但不可以表现为对 Apache 许可证构成更改
  • Apache许可协议是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布和销售

GNU GPL许可证:

  • 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与其他开源操作系统的比较

与Android的比较

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

OpenWrt开发:03---OpenWrt简介_第1张图片

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

与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。

它有一些明显缺点,例如仅有发布说明,没有详细修改记录;最近不再更新等。

与DD-WRT的比较

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

下表为开源路由器各种发行版本的对比

OpenWrt开发:03---OpenWrt简介_第2张图片

比较结果

  • OpenWrt 相对于其他几个无线路由器操作系统来说,版本管理最为规范,社区最活跃, 是最适合选为基础来进一步开发的。当然,OpenWrt 也适合初学者来学习。本书中采用了 OpenWrt 来论述智能路由器的开发过程,非常有利于初学者快速上手

七、参考资料

  • OpenWrt官方网站(https://openwrt.org/)
  • OpenWrt 版本历史(http://wiki.openwrt.org/about/history [2015-10-07])
  • DD-WRT 介绍(http://dd-wrt.com/site/content/about [2015-07-12])
  • GNU 通用公共许可证(http://www.copu.org.cn/node/24 [2016-01-23])。
  • Apache 许可协议(2.0 版)(http://www.copu.org.cn/node/366 [2016-01-23])。
  • 5 种开源协议的比较(http://www.copu.org.cn/node/25 [2016-01-23])。

你可能感兴趣的:(OpenWrt开发)