项目十二--MESH network on microWRT

来自Microduino Wikipedia
跳转至: 导航搜索

本教程主要介绍一下无线MESH网络,以及在microWRT上的实现。

无线MESH技术简介

在传统的无线局域网(WLAN)中,每个客户端均通过一条与AP(Access Point)相连的无线链路来访问网络,形成一个局部的BSS(Basic Service Set)。 用户如果要进行相互通信的话,必须首先访问一个固定的接入点(AP),这种网络结构被称为单跳网络。而在无线Mesh网络中, 任何无线设备节点都可以同时作为AP和路由器,网络中的每个节点都可以发送和接收信号,每个节点都可以与一个或者多个对等节点进行直接通信。 这种结构的最大好处在于:如果最近的AP由于流量过大而导致拥塞的话,那么数据可以自动重新路由到一个通信流量较小的邻近节点进行传输。 依此类推,数据包还可以根据网络的情况,继续路由到与之最近的下一个节点进行传输,直到到达最终目的地为止。这样的访问方式就是多跳访问。 其实人们熟知的Internet就是一个Mesh网络的典型例子。例如,当我们发送一份E-mail时,电子邮件并不是直接到达收件人的信箱中, 而是通过路由器从一个服务器转发到另外一个服务器,最后经过多次路由转发才到达用户的信箱。在转发的过程中,路由器一般会选择效率最高的传输路径, 以便使电子邮件能够尽快到达用户的信箱。

与传统的交换式网络相比,无线Mesh网络去掉了节点之间的布线需求,但仍具有分布式网络所提供的冗余机制和重新路由功能。 在无线Mesh网络里,如果要添加新的设备,只需要简单地接上电源就可以了,它可以自动进行自我配置,并确定最佳的多跳传输路径。 添加或移动设备时,网络能够自动发现拓扑变化,并自动调整通信路由,以获取最有效的传输路径。

无线MESH具有部署安装简便,稳定性高,结构灵活,高带宽等特点,是一种比较先进的无线网络技术,在室外和公共场所有着光放的应用前景。


QMP介绍

QMP(Quick Mesh Project)是一个可以方便部署MESH网络的开源系统。它提供基于Openwrt的固件,可以方便的应用与多种嵌入式设备。使用这个系统可以方便的 搭建MESH网络。它提出了一种无线社区模式,能快速的创建一个无线覆盖的区域,并提供高质量的网络服务。

下面是一个MESH Comunity Mode 的原理图:

更难能可贵的是,QMP是一个开源软件,玩家可以做二次开发,并编译适合自己设备的固件。当然它也对市面上一些主流路由器提供了稳定的固件版本。 详细信息可以访问QMP的官方网站。

http://qmp.cat/Home

固件编译

1. 设置环境变量 在我们编译openwrt的时候,您的系统应该已经安装了编译所需的软件包,但是为了保险起见,可以把下面的软件包在安装一下。 基于Debian的系统,如ubuntu,需要安装下面的软件包:

 sudo aptitude install git subversion zlib1g-dev gawk flex unzip bzip2 gettext build-essential \
 libncurses5-dev libncursesw5-dev binutils cpp psmisc docbook-to-man

如果您的机器是x86_64系统,还需要下面的软件包:

Debin/Ubuntu:

 sudo aptitude install gcc-multilib
 

CentOS/Fedora/RHEL:

 gcc.i686, libgcc.i686, and glibc-devel.i686
 

2. 下载源码并编译 通过下面的命令下载源码

 git clone git://qmp.cat/qmpfw.git qmpfw

进入到源码目录:

 cd qmpfw

check out 特定的分支:

 make .checkout_qmp QMP_GIT_BRANCH=branch_name

制定Traget并编译,例如:

 make build T=alix
 

编译完成后,你可以在下面目录下找到相应设备的固件。

 qmpfw/images/
 

添加新设备支持

QMP作为一个开源项目,已经制作了很多稳定的固件针对流行的路由器,如果对于一些新的嵌入式设备,如何对它进行定制,编译特定的固件呢? 下面我们来介绍添加对新设备的支持。

1.下载源码

 git clone git://qmp.cat/qmpfw.git

2. 执行menuconfig来获取相应的source code并启动openwrt 的menuconfig。

 make T=NEW_DEVICE_NAME menuconfig

配置menuconfig中相应的选项,一定要使能 base/qmp-small-node 或者qmp-big-node。

3. 编译

 make T=NEW_DEVICE_NAME build

在这一步中,应该会遇到错误,提示信息可能是(when trying to copy the output binaries into images/ directory). 不用担心, 确定生成的二进制文件名字是: build/NEW_DEVICE_NAME/bin/*/, 然后修改targets.mk 文件,添加类似下面的新设备的编译条目。

 ifeq ($(T),nsm5)
  NAME:=NanoStation M5
  ARCH:=ar71xx
  IMAGE:=bin/$(ARCH)/openwrt-ar71xx-ubnt-nano-m-squashfs-factory.bin
  SYSUPGRADE:=bin/$(ARCH)/openwrt-ar71xx-ubnt-nano-m-squashfs-sysupgrade.bin
 endif 

4. 重新编译

make T=NEW_DEVICE_NAME build

5. 如果能正确编译,复制临时的config文件

 cp -rf build/configs/NEW_DEVICE_NAME configs/

6. 生成patch文件

 git add configs/NEW_DEVICE_NAME
 git add targets.mk
 git commit -m 'Support for new device NEW_DEVICE_NAME'
 git diff > ../NEW_DEVICE_NAME.patch

7. 提交Patch 文件给qmp的开发list:qmp-dev@mail.qmp.cat