资源描述
Aodv移植过程
平台:linux Ubuntu 10.04
安装Ubuntu
编译内核
Ubuntu 原本内核版本为 2.6.32.14,aodv-uu是基于linux内核中netfilter功能框架,由此需要将netfilter模块编译进内核。
下载内核
下载最新的内核版本 2.6.34.12 。解压缩至 /usr/src/kernel/2.6.34.12 。
安装编译环境
为保证编译过程的顺利进行,首先需安装编译的基本环境。使用命令apt-get install build-essential kernel-package libncurses5-dev libqt3-headers。其中build-essential 为基本的编程库(gcc, make等)。
kernel-package 为Debian 系统里生成 kernel-image 的一些配置文件和工具。libncurses5-dev 为meke menuconfig要调用的。
配置内核
在编译内核之前首先要配置内核,也就是决定哪些功能编入内核,哪些功能编入模块。编入内核的功能可以直接被内核调用,编成模块的功能使用前需将模块挂载入内核。未编入内核和模块的功能将不能使用。
在linux中配置内核的方法共5种,常用的只有两种,menuconfig和xconfig。Menuconfig配置使用的是图形界面。Xconfig配置时使用文字界面。这次我们使用的是图形界面的menuconfig。
在终端中首先进入 /usr/src/kernel/2.6.34.12目录。输入 make menuconfig,将netfilter 编入内核,按如下步骤:Networking ---> Networking options ---> [*] Network packet filtering framework (Netfilter) ---> IP: Netfilter Configuration ---> <*> IP Userspace queueing via NETLINK (OBSOLETE) 最后保存设置然后退出。
编译内核
配置内核的功能之后是编译内核及模块。共分成如下数步:
编译内核,make bzImage;
编译模块,make modules;
安装内核,make install;
安装内核模块,make modules_install;
最后需要生成一个内核的镜像文件,来指明内核模块,功能之间的相互依赖关系,update-initramfs -k 2.6.32-29 –c,注意若在这里使用mkintiramfs命令,则可能在重启的时候出现如下的错误:FATAL: Could not load /lib/modules/2.6.34.12/modules.dep
修改启动项
至此,linux中就存在至少两个内核,如何在开机时选择希望启动的那个内核?linux使用的是grub的开机启动菜单。方法为进入/boot/grub/,修改其中的grub.cfg文件,添加如下字段:menuentry '(QoS)Ubuntu,Linux 2.6.34.12' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,9)'
search --no-floppy --fs-uuid --set 501d3a42-1d52-4438-99bf-e679da605867
linux /vmlinuz-2.6.32-29 root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro quiet splash
initrd /initrd.img-2.6.32-29
}
原内核启动项为:
menuentry 'Ubuntu,Linux 2.6.32-24-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,9)'
search --no-floppy --fs-uuid --set 501d3a42-1d52-4438-99bf-e679da605867
linux /vmlinuz-2.6.32-24-generic root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro quiet splash
initrd /initrd.img-2.6.32-24-generic
}
也就是在原内核启动项的基础上修改内核名字,内核文件目录,内核镜像文件的目录。除此之外还可使用下面的方法使系统自动修改开机启动菜单:
在终端中输入:update-grub。该命令会使系统自动寻找系统系统中所有的开机启动选项,不用人为的设定。
至此,内核的编译安装就全部完成了,重启系统之后,选择正确的开机启动项就可进入新编译的内核。
Aodvd 一般必须运行在无线网络端口,系统必须带有无线端口,没有无线端口的可以安装使用无线网卡。
安装无线网卡
安装无线网卡根据无线网卡芯片的不同选择不同的驱动和安装方式。
水星系列 MU450
该款芯片使用的是型号为ath9k_htc芯片,安装使用wireless-compact软件。下载wireless-compact软件,按照README中方式安装驱动。
首先,下载MU450在linux下的驱动,htc_9271.fw。将htc_9271.fw复制到/lib/firware 文件夹下。
然后,解压缩wireless-compact;在终端输入 ./drive-select ath9k_htc ;make ; make install。
最后,重启系统即可。在终端输入 ifconfig 就可以看到该网卡。
Ralink 3070
该网卡使用的是型号为rt2080的无线网卡芯片。可使用ndiswrapper 软件安装驱动。Ndiswrapper软件是一款将windows系统下的驱动转换为linux 系统下驱动的软件。适合一些对linux不提供支持的网卡。但是,经过尝试,该款软件运行时有时会不稳定,在虚拟机的情况下则尽量不要使用该款软件。
安装驱动的方法比较简单。下载网卡在windows下的驱动,下载包中应该有三个文件,.inf,,sys,.cat。下载ndiswrapper软件,解压缩,安装软件,在终端输入make ;make insall。安装Windows下的驱动:
nidswrapper -i [inf_file]
.inf文件就是Windows的驱动信息文件,这步将适当的文件安装到/etc/ndiswrapper/[driver]下,你可以执行如下操作以检查确认ndiswrapper:
ndiswrapper -l
它将会列示出你刚才安装过的驱动,针对这点,加载ndiswrapper核心模块:
modprobe ndiswrapper
这是加载驱动并确保它在系统中可用,你需要安装无线工具包来配置无线界面,确定系统可以看到这个网卡,输入ifconfig,它将会作为一个网络接口显示出来。(如果系统中只有一个无线网卡,它通常是显示wlan0).
安装aodv路由协议
下载最新版本的aodv-uu-0.9.6,解压缩。
编译:make ;
安装:make install;
安装后生成 aodvd.ko 模块,和 aodvd 程序。Aodvd会自动放入/bin,/sbin 中作为系统的一个命令,可以直接在终端运行,但是必须以管理用户的权限运行。
aodvd命令后可以添加参数。详情可以使用 aodvd –h查看。想要在某个端口上运行aodv,可以输入如下命令: aodvd –i 【端口名】
在多台系统上运行aodv
运行aodv程序作为路由协议,比根据该路由工作。至少有两个系统必须首先连接到同一网络中且网络应该选择成为ad hoc模式,网络子网掩码可以选成一致的,如 1.1.1.1。系统的IP地址可以选在不在同一子网中,对结果不会产生影响。
为了排除其他因素的干扰,在小范围内达到测试的目的,可以将两台系统之间的链路层断开,从而达到通过第三台系统转接的目的。断开链路层使用iptables 的命令方式,具体如下:
禁止接受MAC地址为xx:xx:xx:xx:xx:xx的系统,命令如下:
iptables –A INPUT –m –mac-source xx:xx:xx:xx:xx:xx –j DROP
只接受MAC地址为xx:xx:xx:xx:xx:xx的系统,命令如下:
iptables –P DROP;
iptables –A INPUT –m –mac-source xx:xx:xx:xx:xx:xx –j ACCEPT
查看iptables 中内容条目时使用:iptables –L;
删除iptables 中内容条目时使用:iptables –F;
另外 iptables的执行机制是逐条执行,所以设置时必须注意其中的条目顺序。
Aodv网关模式
Aodv网关模式是将一台系统作为接入点,允许同一网络中所有的系统访问外网。作为接入点的系统必须有两个以上的无线网卡。最好一个为有线网卡,一个为无线网卡。将有线网卡通过双绞线连至外网,无线网卡连至ad hoc 网络。为了使ad hoc网络中系统可以正常上网,在接入点系统上还必须运行NAT服务,为了简化问题,可以将接入点直接连至具有NAT功能的路由器上来达到相同的效果。在接入点系统上运行 aodvd –w 即可使ad hoc 网络中所有系统访问外网。
语音传输
Linux的录音,放音本质上都是从 /dev/dsp 或 /dev/audio 中存取数据。使用函数
sd=open("/dev/dsp" , O_RDWR)打开/dev/dsp设备。当打开成功时返回 sd>0,失败时返回sd<0。如果打开失败,则检查是否有权限打开设备。权限共有三种,分别为w,r,x(可写,可读,可执行)。可以通过使用chmod命令改变设备的权限。从设备中读取数据后通过使用套接字编程将数据传输至另一台系统,写入设备中即完成语音的传输。
展开阅读全文