这几天一直在做aodv协议的实现与组建ad-hoc网络。
根据很多前辈的经验与自己实际操作的结果。做一个自己备份用的小的总结出来。
【此教程为第一部分,是在已经配置好开发板aodv的情况下,配置PC端AODV,配置开发板aodv在第二部分教程。】
测试目标:
Linux下的pc端与开发板端组建ad-hoc网络,并实现aodv路由协议,相互ping通
测试环境:
1.物理主机ubuntu10.04(kernel: 2.6.25.7)
a) 【虚拟机下ubuntu10.04平台:kernel 2.6.38.7也已测试通过】
2.开发板:FriendlyARM tiny210 V2 (开发板平台:linux 2.6.35.7)
3.Aodv-uu版本:aodv-uu-0.9.6
4.交叉编译工具:arm-linux-gcc 4.5.1
测试过程:
1.首先应编译一个新的内核。
配置内核
在编译内核之前首先要配置内核,也就是决定哪些功能编入内核,哪些功能编入模块。编入内核的功能可以直接被内核调用,编成模块的功能使用前需将模块挂载入内核。未编入内核和模块的功能将不能使用。
(为保证编译过程的顺利进行,首先需安装编译的基本环境。使用命令apt-get install build-essential kernel-package libncurses5-dev libqt3-headers。其中build-essential 为基本的编程库gcc, make等。kernel-package 为Debian 系统里生成 kernel-image 的一些配置文件和工具。libncurses5-dev 为meke menuconfig要调用的。)
-------------------
Make menuconfig
手工定制内核,重新编译内核将netfilter模块加进去。
Networking support --->
Networking options --->
Networking packet filtering framework (Netfilter) --->
IP: Netfilter configuration --->
<*> IP Userspace queueing via NETLINK (OBSOLETE)
然后编译,编译内核过程请参考本人博客教程。
2.编译好内核之后开始编译aodv-uu-0.9.6
a) 解压源代码包
编译前需要改动的信息:
在lnx/kaodv-debug.h程序中添加头文件 #include
在lnx/kaodv-netlink.c中将 static DECLARE_MUTEX(kaodvnl_sem);
改为 static DEFINE_SEMAPHORE(kaodvnl_sem);
b) Make
c) Make install
这之后会把生成的kaodv.ko模块放到/lib/modules/linux-2.6.35.7/aodv下。再以后要启动aodv用户态时,要先加载此目录下的模块到内核中。
3.组建ad-hoc网络
【后来做的时候发现,把wifi模块放到了PC机上,用iwconfig命令能够看到设备,ifconfig wlan1 up也能够起来,但是就是不能够iwlist wlan1 scan搜索到任何网络,或者是ifconfig wlan1 up总提示不正常,资源暂时不能用之类的,这些都是没有装对应无线网卡驱动的问题。装好驱动就没事了。至于说的装驱动,我们测试平台用的无线网卡为rt3070,这个无线网卡用命令lsmod |grep rt* 已经可以看到有rt2870sta的驱动和rt2800usb,所以我们可以用命令加载这个模块,至于为什么会出现这种情况,我暂时还没有研究,可参见文章http://ubuntuforums.org/showthread.php?t=2154070 即可解决此种问题。】
【同样的,之前一直不是很清楚,如果只有两个终端,那么还要aodv协议干嘛用,所以只有两台设备的话,编译aodv确实没什么用处。不用编译aodv,直接组建上ad-hoc网络也可以。】
【这里有一步非常重要,弄了好长时间,一直连不上ad-hoc,原因在于pc端所采用的系统为desktop系统,这里就有了图形用户的界面,而在这个系统下会有两种配置网络的方式,一种为network-manager,一种为/etc/network/interfaces(/etc/init.d/networking),这两种方式不能够同时进行,也就是说再用下边的这种方法设置ip的情况下,要把network-manager禁用掉,不然会冲突。】
停用network-manager即可。具体方法如下:
root@ubuntu :# /etc/init.d/network-manager stop
如之后想继续使用network-manager,则 /etc/init.d/network-manager restart即可。
参考:http://www.linuxidc.com/Linux/2010-10/29031.htm
http://hi.baidu.com/tawnde/item/103a150d1e9abce6f45ba685
1.发起发:
iwconfig wlan0 mode ad-hoc
iwconfig wlan0 essid "aodv-adhoc"
ifconfig wlan0 up
ifconfig wlan0 192.168.1.1
2.接入方:
iwconfig wlan0 mode ad-hoc
ifconfig wlan0 up
ifconfig wlan0 192.168.1.3
iwlist wlan0 scan (确保能搜到aodv-adhoc网络)
iwconfig wlan0 essid aodv-adhoc
iwconfig wlan0 查看cell是否为iwlist搜出aodv-adhoc对应的cell,如果一致,则接入成功。
3.加载aodv模块【两端都需要加载】
insmod kaodv.ko
4.运行aodv协议【两端都需要运行】
./aodvd
20:02:17.416 host_init: Attaching to rausb0, override with -i .
20:02:17.548 aodv_socket_init: RAW send socket buffer size set to 221184
20:02:17.548 aodv_socket_init: Receive buffer size set to 221184
20:02:17.548 main: In wait on reboot for 15000 milliseconds. Disable with "-D".
20:02:17.548 hello_start: Starting to send HELLOs!
20:02:20.217 neighbor_add: 192.168.1.1 new NEIGHBOR!
20:02:20.217 rt_table_insert: Inserting 192.168.1.1 (bucket 0) next hop 192.168.1.1
20:02:20.217 nl_send_add_route_msg: ADD/UPDATE: 192.168.1.1:192.168.1.1 ifindex=3
显示发现邻居192.168.1.1并将其添加到路由表中,协议运转正常。