由于Ad Hoc网络无中心、动态拓扑等特点,它需要各个节点都具有路由转发功能。本文开发的Ad Hoc网络节点通过在ARM平台上移植路由协议而实现了数据包转发功能。
图1 节点转发
以图1所示的网络进行功能示意,其中A、B、D是普通的移动电脑终端,C是本文开发的ARM平台。A和D是通信的端点,D不在A的一跳范围之内(A的覆盖范围如图中虚线所示)。假设开始时B成为了A和D的中继节点,完成A、D之间的数据转发功能。当B节点出现故障时,C能自动代替B成为新的中继节点,维持A、D之间的通信。
该ARM平台除了路由协议以外,同时完成了ftp、iptables等工具的移植,还可以继续增添语音、视频等服务。
硬件平台
以处理器为核心,无线网卡" title="无线网卡">无线网卡
" title="无线网卡">无线网卡" title="无线网卡">无线网卡" title="无线网卡">无线网卡" title="无线网卡">无线网卡收到数据包后交给上层处理,需要发出的数据包也由处理器控制无线网卡来发出。当然SDRAM、闪存、电源这些模块也是系统不可缺少的。本文采用ARM920T为内核的三星处理器S3C2410A。S3C2410A是32位低功耗RISC处理器,同时支持Thumb 16位压缩指令集,其工作频率为203MHz。S3C2410A有292个管脚,集成了许多片上功能,例如以太网控制器、UART控制器、可编程I/O口及中断控制器等。
考虑到接口体积,该平台选用USB接口的华硕WL-167g无线网卡,提供无线通信功能。
硬件平台设计结构如图2所示。
图2 硬件平台结构图
在硬件调试中一个应该注意的问题就是S3C2410A的nWait引脚在不使用时应接上拉电阻,否则系统在启动模式时将不能正常启动。
软件平台
vivi是韩国MIZI公司开发的Bootloader,适用于ARM9处理器,其作用是初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境设置成一个合适的状态,以便为运行操作系统准备正确的环境。引导程序执行完后会将控制权交给内核(zImage),内核是操作系统的核心,内核需要的各种配置文件、数据及上层软件都存放在根文件系统之中。整个软件平台的结构如图3所示。
图3 软件平台示意图
内核镜像的生成
这里不赘述内核生成方法,需要注意此过程容易遇到三类错误:一是编译出错,应该检查库文件是否齐全,另外gcc版本太高也会导致编译错误,重新安装低版本gcc后即可解决;二是内核配置应将Default kernel command string设置为noinitrd root=/dev/mtdblock3 console=ttySAC0,115200 init=/linuxrc,“console=ttySAC0,115200”使内核启动期间的信息全部输出到串口0上,波特率为115200,“mtdblock3”代表第4个Nand闪存分区,该分区为根文件系统,init是指定启动脚本,“init=/linuxrc”表示启动初始化文件位置;三是应该在drivers/mtd/nand/s3c2410.c中,设置NAND_ECC_SOFT = NAND_ECC_NONE,这样就关闭了ECC校验。因为内核是通过vivi写到Nand闪存中的,vivi使用的软件ECC算法与内核中校验算法不同。
无线网卡驱动的移植
本文使用华硕USB无线网卡WL-167g,其网卡驱动是rt73。
移植步骤如下:
a、下载RT73_Linux_STA_Drv1.0.4.0.tar.gz,解压后生成Module和WPA_Supplicant两个目录,将目录Module中的所有文件都拷贝到内核源码包drivers/usb/net/rt73下,修改Makefile如下编译选项:
KDIR := path/linux-2.6.18
path为内核源码包所在路径。
b、由于要在内核源码包里进行交叉编译,所以修改linux-2.6.18 /drivers/usb/net/Kconfig,加入以下内容:
config RT73
tristate“support for rt73 wireless usb device”
depends on USB && NET && USB_USBNET
c、修改drivers/usb/net/Makefile,加入rt73的编译项:
obj-$(CONFIG_RT73)+= rt73
d、对内核重新进行配置,
将配置界面中新增的“support for rt73 wireless usb device”选为模块。
e、make modules
在drivers/usb/net/rt73目录下生成rt73.ko驱动文件,将rt73.ko放到根文件系统中,再烧写到ARM板上无线网卡即可正常工作。
f、无线网卡的配置
无线网卡有managed、Ad-hoc两种模式。managed模式称为基础设施模式,又称接入点模式;Ad-hoc模式称为点对点模式或无中心模式,用来在无线网卡之间进行一跳通信。Ad Hoc网络就是在Ad-hoc模式基础上通过网络协议使得该网络支持多跳通信,因此该模式的使用和性能对Ad Hoc网络的影响至关重要,以下是Ad-hoc模式配置方法,rausb0表示无线网卡:
1)、ifconfig rausb0 10.0.1.1 up
设置节点IP为10.0.1.1。
2)、iwpriv rausb0 set AdhocOfdm=2
设置rausb0为11g only模式,即54M速率模式,这是802.11g所能支持的最高速率。
3)、iwconfig rausb0 channel 3
设置信道为3。
4)、iwconfig rausb0 mode ad-hoc essid bcnl
设置网卡模式为ad-hoc,essid为“bcnl”。
上述配置过程中使用的“iw”开头的命令都是无线工具集中的命令,其源码包是wireless_tools.29.tar.gz,经过交叉编译后即可使用。
AODV路由协议的移植
本文使用的代码是aodv-uu-0.9.5.tar.gz。AODV分为两个部分,一个是内核态模块kaodv.ko,一个是用户态模块aodvd。AODV主要部分工作在用户态,用于维护内核路由表。
AODV需要内核支持,在内核配置时要选上netfilter选项。先编译内核态模块kaodv.ko,步骤如下:
a、将aodv-uu-0.9.5/lnx目录的内容拷到内核源码包linux-2.6.18/net/ipv4/kaodv目录下,修改linux-2.6.18/net/ipv4/Kconfig,添加如下内容:
config KAODV_UU
tristate "support for aodv-uu adhoc routing protocol"
b、在linux-2.6.18/net/ipv4/Makefile末尾添加如下的编译选项:
obj-$(CONFIG_KAODV_UU) += kaodv/
c、make menuconfig,找到如下的目录项:
Networking --->
[*] Networking support Networking options --->
support for aodv-uu adhoc routing protocol选为模块编译。
d、make modules将生成kaodv.ko。以下介绍用户态aodvd编译:
将aodv-uu-0.9.5/Makefile做适当修改,使其在交叉编译的环境下只编译用户态部分。
将得到的kaodv.ko和aodvd拷贝到根文件系统中,再烧写到ARM板上。
insmod kaodv.ko
./ aodvd
这样aodv协议就运行起来了。在协议移植中有两点需要注意:一是Makefile中ARM_CCFLAGS=-mbig-endian应该注释掉,否则运行时会产生大小端混乱的问题;二是将kaodv.ko和aodvd分开编译,因为同时编译时总是提示编译器缺少文件,甚至用其他交叉编译器依然不能解决问题,而这些错误大多是编译内核模块产生的。
测试和结论
为简单起见,本测试使用两个笔记本和一个ARM平台组建成Ad Hoc网络,如图4所示,A节点IP为10.0.1.1,B节点IP为10.0.1.2,C节点IP为10.0.1.3(经测试将ARM平台做通信端,A或C做中继,网络同样可以正常运行)。
图4 测试拓扑示意图
为了简单地实现C节点不在A节点一跳范围内,可以使用iptables实现过滤。
在A节点执行:
iptables –A INPUT –p ALL –m mac –mac-source C.mac –j DROP
在C节点执行:
iptables –A INPUT –p ALL –m mac –mac-source A.mac –j DROP
以上的C.mac、A.mac是C和A的实际mac地址,这样A节点拒绝C发给它的数据包,C节点也拒绝A发给它的数据包,保证二者一跳不可达。
在C节点ping -R 10.0.1.1,链路不通,说明过滤成功,B没有进行数据包转发。
在各节点上运行AODV后,在C节点ping -R 10.0.1.1,结果如图5所示。
图5 测试结果
可见,B正确地进行了数据包转发,AODV协议正常运行,ARM平台成功运行。
在A节点执行lftp 10.0.1.3,并下载普通文件。这样数据包由中间的ARM平台B转发,下载完成后,查看C节点的日志文件/var/log/vsftpd.log,发现上传和下载的速率基本相同,有将近700kBps的速率,达到5.4Mbps的速率。粗略估算聚合物电池供电能使ARM平台稳定运行8小时。
通过以上测试,搭建一个Ad Hoc网络的ARM平台的目标已经达到。通过对有多个ARM平台的Ad Hoc网络进行测试,发现当某节点感知无线信号很弱时,无线网卡的essid存在自动变化的情况。
上一篇:无线传感器网络:一种低功耗、无线型应用
下一篇:基于优化神经网络的FIR滤波器的设计方案
推荐阅读最新更新时间:2023-10-18 15:38
Vishay线上图书馆
- 选型-汽车级表面贴装和通孔超快整流器
- 你知道吗?DC-LINK电容在高湿条件下具有高度稳定性
- microBUCK和microBRICK直流/直流稳压器解决方案
- SOP-4小型封装光伏MOSFET驱动器VOMDA1271
- 使用薄膜、大功率、背接触式电阻的优势
- SQJQ140E车规级N沟道40V MOSFET
- Vishay推出适用于恶劣环境的紧凑型密封式SMD微调电阻器
- MathWorks 和 NXP 合作推出用于电池管理系统的 Model-Based Design Toolbox
- 意法半导体先进的电隔离栅极驱动器 STGAP3S为 IGBT 和 SiC MOSFET 提供灵活的保护功能
- 全新无隔膜固态锂电池技术问世:正负极距离小于0.000001米
- 东芝推出具有低导通电阻和高可靠性的适用于车载牵引逆变器的最新款1200 V SiC MOSFET
- 【“源”察秋毫系列】 下一代半导体氧化镓器件光电探测器应用与测试
- 采用自主设计封装,绝缘电阻显著提高!ROHM开发出更高电压xEV系统的SiC肖特基势垒二极管
- 艾迈斯欧司朗发布OSCONIQ® C 3030 LED:打造未来户外及体育场照明新标杆
- 氮化镓取代碳化硅?PI颠覆式1700V InnoMux2先来打个样
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况