基于ARM的Ad Hoc网络平台的实现

最新更新时间:2011-09-03来源: chinaaet关键字:Hoc  网络无线网卡  ARM平台  无线网卡 手机看文章 扫描二维码
随时随地手机看文章
  功能概述

  由于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存在自动变化的情况。

关键字:Hoc  网络无线网卡  ARM平台  无线网卡 编辑:探路者 引用地址:基于ARM的Ad Hoc网络平台的实现

上一篇:无线传感器网络:一种低功耗、无线型应用
下一篇:基于优化神经网络的FIR滤波器的设计方案

推荐阅读最新更新时间:2023-10-18 15:38

ARM视频监控平台
  如图1所示是视频监控应用系统的开发平台。ARM的系统扩展槽和设备扩展槽,用于为ARM系统添加如以太网接口、海量数 据存储接口和PCMCIA等接口,或者用于其他功能开发板,为ARM系统扩展了CMOS图像获取功能和VGA显示功能。  图1 ARM视频监控开发平台   其中,VGA接口是通过电阻网络实现4096色彩色显示。与SRAM访问相关的寄存器有:SDRAM控制寄存器、读地址低16位、读地址高16位、读出数据寄存器、写地址低16位、写地址高16位、写入数据寄存器;与CMOS图像采集有关的寄存器有 CMOS采集控制寄存器、CMOS采集状态寄存器;与VGA显示有关的寄存器是VGA显示控制寄存器。
[单片机]
<font color='red'>ARM</font>视频监控<font color='red'>平台</font>
AD7751的典型应用
由AD7751和89C51单片机构成电能计量系统的简化电路如图所示.C1~C4为+5V电源的退耦电容.R端经上拉电阻R1接UDD使R=1,令复位端失效.由3.579545MHZ的石英晶体与电容器C3、C6构成晶振电路,向AD7751提供时钟。C7为UREF端的消噪声电容。89C51中P1口的P1.0~P1.5分别用来设定G0、G1、S0、S1和SCF端的逻辑电平。P2口接键盘。 由AD7751输出的FC信号,同时送给89C51的TO定时器、T1定时器的输入端。现利用TO定时器测量频率FC+T1定时器则对FC脉冲进行累加计数,再通过程序计算出有功功率和在一定时间内所消耗的电能。P、W的串行数据通过TXD端分别发送给显示卡、接口卡
[单片机]
<font color='red'>AD</font>7751的典型应用
基于STCl2C5410AD的电动车无刷电机控制器检测
0 引言 伴随着城市化进程,人们生活的交通距离不断扩大,代替燃油汽车和自行车的电动车的普及大幅度的提高了电力资源的利用效率,促进了国民经济的健康发展。电动自行车以电力作动力,骑行中不产生污染,无损于空气质量。从改善人们的出行方式、保护环境和经济条件许可情况等因素综合来看,电动自行车目前乃至今后都有着广阔的发展空间。电动自行车所用直流电机分为有刷电机和无刷电机两种。其中有刷电机控制较简单。但其易磨损的电刷带来维修保养工作量相对较大、使用寿命相对较短等缺点。而直流无刷电机本身没有易磨损部件,电机寿命长,维修保养工作量小。但直流无刷电机采用电子换向原理工作,其控制过程比有刷电机复杂得多,因此对控制器质量的要求也高得多。 目前电动
[工业控制]
基于STCl2C5410<font color='red'>AD</font>的电动车无刷电机控制器检测
基于AD9858宽带雷达信号源的设计及应用
现代雷达面临着综合性电子干扰、反辐射导弹、低空和超低空突防以及目标隐身技术的等4大威胁,这就要求现代雷达具有反地物、抗积极和消极干扰、反隐身和自身生存的能力,其信号具有频率捷变、波形参数捷变以及自适应跳频的能力。因此对雷达信号产生器提出了越来越高的要求,要求具有宽频带、高精度、高稳定以及快速跳变的能力。随着现代电子技术的发展,高性能直接数字合成DDS(Direct DigitalSynthesis)技术、数字信号处理DSP(Digital Signal Processing)技术及大规模可编程逻辑器件技术和电子计算机的应用为此类问题的解决提供了一种新的途径。AD9858是ADI公司推出的一款高性能,工作频率高达1 GHz,杂散
[模拟电子]
AD1549的LCD12864液晶显示程序
AD1549的 LCD 12864液晶显示程序 #include reg52.h #include intrins.h sbit AD_CS = P3^7; sbit AD_DAT = P3^5; sbit AD_CLK = P3^4; sbit RS=P3^6; //RS= H ,表示DB7--DB0为显示数据, //RS= L ,表示DB7--DB0为显示指令数据 sbit WRD = P2^5; //R/W= H ,E= H ,数据被读到DB7--DB0 //R/W= L ,E= H→L , DB7--DB0的数据被写到IR或DR sbit E = P2^6; //使能
[单片机]
STC12C5A60S2中的AD转换
逐次逼近原理 AD里面包含da,当输入电压Vin时,da的最高位是1,即为0.5Vref与输入信号比较,如果输入大于0.5Vref则比较器输出为1,同时da的最高位为1,反之DA最高位则为0,通过8次比较后得到8个01数据即完成ad转换。 现在说下程序中用到stc12单片机两个寄存器 ADC_CONTR;主要用来配置ad启动的工作模式;还有个result的寄存器 程序中的注意点:配置完ADC_CONTR后要延时4个时钟周期 先把程序附上 #include stc12.h #include intrins.h #include ad.h uint ad;
[单片机]
STC12C5A60S2中的<font color='red'>AD</font>转换
PIC16f877A AD转换LED显示8位值
简介:本文为大家提供一个PIC16f877A AD转换LED显示8位值的代码。 ;**************** list p=16f877A ; list directive to define processor #include p16f877A.inc ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;--------------------- COUNTER EQU 20H
[单片机]
具有16通道的8位DAC芯片AD860016-Channel,8-BitMultiplyingDACAD8600
     摘要:AD8600是含有16个可独立寻址的电压输出型D/A转换器芯片,每一个DAC都具有各自的DAC 寄存器和输入寄存器,但所有的DAC共用一个基准输入电压。该芯片采用单片CBCMOS技术,因而综合了CMOS在逻辑电路和双极性在速度与精度方面的性能。本文介绍了AD8600的工作原理及应用电路。     关键词:数字/模拟转换器;数字接口;读回缓冲器;AD8600     1. 引言     AD8600是包含16个可各自独立寻址的电压输出型D/A转换器芯片,这些DAC共用一个外部基准输入电压,但每一个DAC都具有各自的DAC寄存器和输入寄存器,以实现双缓冲功能。芯片(其功能方框图如
[应用]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved