热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

组建adhoc网络,通过aodv协议实现互通

这几天一直在做aodv协议的实现与组建ad-hoc网络。根据很多前辈的经验与自己实际操作的结果。做一个自己备份用的小的总结出来。【此教程为第一部分,是在已经配置好开发板aodv的情

这几天一直在做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, makekernel-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并将其添加到路由表中,协议运转正常。


组建ad-hoc网络,通过aodv协议实现互通


推荐阅读
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 在 Mac 上查看隐藏文件和文件夹的详细指南。通过终端命令,您可以轻松地显示或隐藏这些文件。具体步骤如下:输入 `defaults write com.apple.finder AppleShowAllFiles -bool true` 以显示所有隐藏文件,或使用 `defaults write com.apple.finder AppleShowAllFiles -bool false` 以重新隐藏它们。此方法适用于各种版本的 macOS,帮助用户更好地管理和访问系统文件。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
  • 在 iOS 开发中,经常会遇到 `@(YES)`、`@[firstViewController]` 以及 `@{@a:@b}` 这样的语法糖。这些简化的写法分别用于初始化布尔值、数组和字典对象,能够显著提高代码的可读性和编写效率。例如,`@(YES)` 可以快速创建一个布尔值对象,`@[firstViewController]` 则用于创建包含单个元素的数组,而 `@{@a:@b}` 则用于创建键值对字典。理解这些语法糖的使用方法,有助于开发者更加高效地进行编码。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在跨线程调用UI控件方法时,通常使用同步调用机制,如 `控件.Invoke(Delegate, 参数)`。这里需要声明并实现一个委托,因为控件本身并不知道如何处理跨线程操作。通过将具体的实现逻辑封装在委托中,控件可以正确地执行这些操作,确保线程安全性和UI的一致性。此外,为了提高性能和可维护性,建议对频繁的跨线程调用进行优化,例如使用异步调用或批量处理请求。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 在数字图像处理中,Photoshop 的直方图是一个重要的工具,它能够精确地反映图像中不同亮度级别的分布情况。通过分析直方图,用户可以深入了解图像的曝光、对比度和色调范围,从而进行更精细的调整。直方图不仅模拟了物体表面反射光线的原理,还能帮助摄影师和设计师更好地掌握图像的明暗细节,优化视觉效果。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 这是一道涉及数学计算的问题。假设步行速度为 \(a\),车速为 \(b\),总距离为 \(c\)。Teddy 的步行时间为 \(T_1\),WhereIsHeroFrom 的步行时间为 \(T_2\),总时间为 \(T\)。通过分析不同时间段内的速度变化,可以得出最优的车辆使用策略,以最小化总的旅行时间。具体来说,需要计算在不同情况下步行和乘车的时间分配,以确保整体效率最大化。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
author-avatar
dbay0812_1cef5b
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有