Openwrt 整体功能组件介绍

1. OpenWrt简介

OpenWrt是一个嵌入式设备的Linux发行版,以GPL许可协议发行,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中,可以非常容易地从零开始构建出全功能的智能路由或服务器设备。

OpenWrt项目始于2004年1月,其第一个版本采用了LinkSys的源码。在LinkSys的代码收费后,2005年改为采用正式发布的Linux内核(2.4.30)来集成,并将OpenWrt完全模块化,不断推出补丁和网络驱动。

OpenWrt的主要特点在于其高扩展性,并且文件系统可写,开发者无需在每一次修改后完全重新编译,只要编译自己的软件包即可,这样就加快了开发的进度,令它更像一个小型的Linux 电脑系统,到目前为止已经提供了100多个已编译好的软件,而且数量还在不断增加。另外OpenWrt提供了SDK,每个运行软件均能够以SDK来进行编译,以软件包形式进行安装和卸载。

1.1 主要特点

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

1.2 开源嵌入式操作系统

1.2.1 嵌入式系统概念

嵌入式系统,是指嵌入到硬件系统内部,为特定应用功能而设计的专用软件系统。与个 人计算机的通用操作系统不同,嵌入式系统通常只针对特殊的用途。因此可以对它进行优化, 并裁剪到最小。现在通用的硬件系统发展非常迅速,因此出现了在通用硬件系统上的嵌入式操作系统。目前在嵌入式领域广泛使用的操作系统有:Linux、Windows Embedded和VxWorks 等。

1.2.2 嵌入式系统分类

根据用途,操作系统又可以分为:

  • 针对防火墙的操作系统:IPFire;
  • 针对智能路由器领域的嵌入式操作系统:Tomato、OpenWrt等;
  • 针对个人桌面领域操作系统:Ubuntu、Fedora 等;
  • 针对智能终端如手机:Android 、Firefox OS等。

它们均是基于 Linux 内核的操作系统。

1.2.3 嵌入式系统——安卓

安卓系统和我们生活紧密联系,也为大家所熟知,下面介绍下安卓系统,用于与Openwrt进行对比:

  1. Android 是谷歌研发的一款智能终端操作系统,是一种基于 Linux 的开放源代码的操 作系统,主要使用于移动设备,如智能手机、平板计算机、智能电视等。它由谷歌公司和开放手机联盟领导开发。
  2. Android 操作系统最初由安迪·鲁宾开发,最初目的是用于数码相机的操作系统。
  3. 2005年8月谷歌全资收购了Android 操作系统。
  4. 2007年11月,谷歌与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android 系统。随后谷歌以Apache开源许可协议的授权方式发布了Android的源代码,Android以 JAVA 层封装了系统层提供给应用开发者统一的API接口。
  5. 第一部 Android 智能手机发布于 2008年10月。
  6. 目前,Android已逐渐扩展到平板计算机及其他领域,如电视、智能手表、数码相机和游戏机等。
  7. 2015年,Android以85%的市场占有率占据移动操作系统市场之首。
  8. Android 操作系统已经演化为一个移动设备开发平台,其软件层次大体上分为 4 层, 即操作系统内核、中间层、应用程序框架层和应用程序。应用程序框架层为应用程序开发者提供了功能强大的 API,包括图形显示的各种组件,如视图、列表、文本框、按钮以及嵌入式的Web浏览器等。
AndroidOpenWrt
内核Linux 内核Linux 内核
许可协议Apache2.0GNU License
使用场景面向终端用户,手持设备。用户接口采用JAVA 提供图形用户界面GUI服务器、家庭路由器等,用户接口默认为 UCI 命令行提供,也支持通过 Web 方式来管理
开发主导模式由谷歌公司主导开发由 OpenWrt.org 社区主导,社区由个人组成,更开放

1.2.4 嵌入式系统的对比

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

在这里插入图片描述

2 OpenWrt整体功能组件

2.1 整体架构

路由器的典型架构划分为:管理平面、控制平面、数据转发平面。
在这里插入图片描述

  1. 管理平面
    管理平面是提供网络管理人员使用UCI、Web、SNMP和TR069等方式来管理路由器,以及执行这些管理功能所需的配置命令等,管理平面提供了控制平面正常运行所需的配置参数。
  2. 控制平面
    控制平面用于控制和管理所有网络协议的运行,例如 ARP、DHCP、DNS 及组播协议的管理和控制。
  3. 转发平面
    转发平面用于处理和转发不同网络接口上各种类型的数据,例如进行网络地址转换、路由、ACL等。典型路由器在数据转发平面占用最多的系统资源。转发平面使用控制平面提供的路由信息进行数据报文的接收、网络地址转换、查找路由表、以及从接口发出报文等工作。如果找不到路由,则发送ICMP不可达消息,我们可以使用route命令查看路由信息。

路由器的3个平面划分仅仅是逻辑意义上的功能划分,在实际的功能模块并没有完全区分。

2.2 功能组件

OpenWrt 是一个基于 Linux 的智能路由器操作系统。它提供各种功能插件,使用户可以自定义安装各种应用软件来管理路由器;默认内置了一些基础功能。其主要功能可以分为3个部分:网络功能、系统管理功能、状态监控功能。

2.2.1 网络功能

网络功能是路由器的核心功能。主要包含以下几项:

  • 网络接口设置和管理;
  • DHCP和DNS协议支持,家庭网内作为 DHCP 服务器,在广域网作为 DHCP 客户端;加快DNS 响应和减少广域网DNS流量;
  • 主机名设置;
  • 静态路由及组播路由功能;
  • 防火墙功能(IPv4网络地址转换、DMZ、报文过滤、端口过滤、mac过滤及防洪水攻击等);
  • 便捷的网络问题诊断工具ping、traceroute和nslookup等;
  • IP带宽控制(QoS);
  • 设备即插即用(UPnP);

下图是MTK750模块openwrt系统原生的Webui网络管理界面,基本涵盖了我们上面刚说的功能配置:
在这里插入图片描述

2.2.2 系统管理

系统管理是路由器除了网络管理之外的其他管理功能:

  • 主机名称设置、日志服务器设置、NTP(网络时间)、语言设置等;
  • 账户密码设置、远程安全登录设置(SSH);
  • 软件管理、配置备份等;
  • 进程启动管理及定时任务管理;
  • 文件系统管理;
  • LED配置;
  • 系统的备份和升级;
  • 重启设置和日志管理。

下图是MTK750模块openwrt系统原生的Webui系统管理界面,基本涵盖了我们上面刚说的功能配置:
在这里插入图片描述

2.2.3 状态监控

状态监控主要用于监控路由器的当前状态,并且只能查看当前的路由器状态。主要包含以下几个功能:

  • 查看系统固件版本、运行时间、平均负载及内存占用等;
  • 网络状态、DHCP用户租赁信息、DNS信息及无线用户等;
  • 防火墙状态统计、路由转发表及 ARP表;
  • 系统日志和内核启动日志;
  • 系统进程负载状态,包括 CPU 使用率及内存使用率;

下图是MTK750模块openwrt系统原生的Webui状态监控界面,基本涵盖了我们上面刚说的功能配置:
在这里插入图片描述

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenWrt 的 Luci 界面开发中,NamedSection 是常用的组件之一。它可以方便地显示一些配置项,并且提供了一些常用的操作,比如添加、删除、修改等。 下面是一个简单的 NamedSection 示例: ```lua m = Map("example") s = m:section(NamedSection, "example", "example", "Example Section") o = s:option(Value, "value", "Example Option") return m ``` 这段代码创建了一个名为 "example" 的配置项,并在 Luci 界面中显示为 "Example Section"。在这个配置项中,我们可以添加一个名为 "value" 的选项。 其中,第一个参数 "example" 是配置项的唯一标识符,必须与配置文件中的标识符一致。第二个参数 "example" 是配置项的标题,用于在界面中显示。第三个参数 "Example Section" 是 NamedSection 的标题,用于在界面中显示。第四个参数是一个可选参数,用于指定 NamedSection 的 ID,如果不指定,则使用配置项的标识符。 在这个例子中,我们使用了一个 Value 组件作为选项。除此之外,还有其他常用的组件,比如 ListValue、Flag、Button 等。 ```lua m = Map("example") s = m:section(NamedSection, "example", "example", "Example Section") o = s:option(ListValue, "list", "Example List") o:value("option1", "Option 1") o:value("option2", "Option 2") o:value("option3", "Option 3") o = s:option(Flag, "flag", "Example Flag") b = s:option(Button, "button", "Example Button") b.inputtitle = "Click me!" b.write = function() luci.http.redirect(luci.dispatcher.build_url("admin/example/example")) end return m ``` 这段代码中,我们添加了一个 ListValue 组件、一个 Flag 组件和一个 Button 组件。ListValue 组件用于显示一个下拉框,Flag 组件用于显示一个勾选框,Button 组件用于显示一个按钮。 在 Button 组件中,我们设置了 inputtitle 属性,用于指定按钮上显示的文字。write 方法用于处理按钮的点击事件,这里我们简单地重定向到当前页面。 通过多次使用 NamedSection 和不同的组件,我们可以轻松地创建一个复杂的配置界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四儿家的小祖宗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值