Leach协议的安装日记一个月吐血奉献.docx
- 文档编号:11711208
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:12
- 大小:21.16KB
Leach协议的安装日记一个月吐血奉献.docx
《Leach协议的安装日记一个月吐血奉献.docx》由会员分享,可在线阅读,更多相关《Leach协议的安装日记一个月吐血奉献.docx(12页珍藏版)》请在冰豆网上搜索。
Leach协议的安装日记一个月吐血奉献
Leach协议的安装
Leach安装步骤如下:
0.先将~ns(~ns指你的NS2安装的主目录,如我装的是NS2.30,则~ns是指NS2.30目录)目录下的所有文件做个压缩备份,以便以后修改出错时能及时的恢复过来。
1. 在cygwin/home目录下新建一个文件夹leach
命令cd/home ;mkdirleach;cdleach
2. 将Leach源码压缩包mit.tar.gz拷贝到当前目录leach中
3. 解压mit.tar.gz
命令tar–zxvfmit.tar.gz |teemituzip.txt(注意不要用winRAR解压,因会造成部分解压文件不对) mituzip.txt中将保存有解压过程中生成的文件的信息,可用作为下面修改文件时的参考
4. 用文件比较工具,对leach目录下的文件和~ns目录下面相应的文件进行修改
4.1常用的文件比较工具有BeyondCompare(我这里有安装文件可传给大家),ultraEdit的文件菜单中也带有文件比较功能(没有BeyondCompare功能强大)
4.2将下列文件(或文件夹)直接由leach目录下复制到~ns目录下:
mit整个目录复制
leach/mac目录下的mac-sensor-timers.cc,mac-sensor-timers.h,mac-sensor.cc
mac-sensor.h 4个文件复制到~ns/mac目录下
leach/tcl/mobility目录下的leach-c.tcl,leach.tcl ,mte.tcl,stat-clus.tcl 4个文件复制到~ns/tcl/mobility目录下
先将~ns/tcl/ex/wireless.tcl的文件重命名为wireless_1.tcl,再将leach/tcl/ex/wieless.tcl复制到~ns/tcl/中
将leach目录下的test,leach_test ,package_up3个文件复制到~ns中
4.3需要对照修改的文件列表为:
(1)apps/app.cc,app.h(含义为apps文件目录下的文件app.cc,app.h,以下含义相同)
(2)trace/cmu-trace.cc,cmu-trace.h
(3)common/packet.h,packet.cc,mobilenode.cc
(4)mac/channel.cc,ll.h,phy.cc,phy.h,mac.cc,cmu-trace.h,cmu-trace.cc
mac/wireless-phy.cc,wireless-phy.h
修改的方法为:
用BeyondCompare打开两边对应的文件,BeyondCompare会列出两个文件中的不同的地方,将leach目录下的文件代码段以#ifdefMIT_uAMPS开始,以#endif结束的部分复制到~ns目录下相应的文件中,复制是不要覆盖~ns目录下相应的文件中已有的代码!
!
!
保存修改过的文件
mac/wireless-phy.cc,wireless-phy.h这两个文件比较特殊,除了上一步的修改之外还需要如下修改,在wireless-phy.h中约149行添加
//Whyphyhasanode_andthisguyhasitalloveragain?
?
//addedbyhuangyanqing10/March/2007
#ifdefMIT_uAMPS
MobileNode*node_; //MobileNodetowhichinterfaceisattached.
#endif
添加对移动节点的支持
在wireless-phy.cc中约234行将node_=(Node*)obj;改为
//addedbyhuangyanqing10/March/2007
#ifdefMIT_uAMPS
node_=(MobileNode*)obj;
#else
node_=(Node*)obj;
#endif
添加对移动节点的支持
整个修改的过程中可参考mituzip.txt文件看相应的修改有没有做好,不要漏掉了和改错了。
5.修改~ns目录下的MakeFile
(1)将DMIT_uAMPS添加到DEFINE行的最后,即为
DEFINE =-DTCP_DELAY_BIND_ALL……-Drng_test-DMIT_uAMPS
其含义为,定义宏MIT_uAMPS,这样前面所做的修改#ifdefMIT_uAMPS开始,以#endif结束的部分的代码段就能够被编辑
(2) 将I./mit/rca I./mit/uAMPS添加到INCLUDE列的后面,即为
INCLUDES=\
……
-I./diffusion3/lib/main-I./diffusion3/lib\
-I./diffusion3/lib/nr-I./diffusion3/ns\
-I./diffusion3/filter_core-I./asim/-I./qs\
-I./mit/rca-I./mit/uAMPS\
……
目的为添加对路径./mit/rca和./mit/uAMPS的包含
(3)将代码
mit/rca/energy.omit/rca/rcagent.o\
mit/rca/rca-ll.omit/rca/resource.o\
mac/mac-sensor-timers.omac/mac-sensor.omit/uAMPS/bsagent.o\
添加到代码gaf/gaf.o\之前
(4)保存修改,进行编译。
命令为:
makeclean
make
如果做过正确修改的话,编译是能通过的;否则对照出错的提示再次修改。
6.测试
(1) 将~ns目录下的test文件修改为
#!
/bin/bash
cdtcl/ex
nswireless-demo-csci694.tcl
sleep2
cd../../
./leach_test
(2)在.bashrc中加入环境变量
exportRCA_LIBRARY=$(ns的安装目录)/mit/rca
exportuAMPS_LIBRARY=$(ns的安装目录)/mit/uAMPS
(3)shtest看看运行的结果是否正确。
安装后make通不过,原因是以#ifdefMIT_uAMPS开始,以#endif结束的部分添加的位置不对。
一个类中有三种状态private、protect、public,添加时注意位置,否则可能造成原本是protect类型的变成了private的,在编译时产生错误。
再次make,又出现如下错误。
-I/home/wlw927/ns-allinone-2.31/include-I/usr/include
e/pcap-oproxytrace2any.oproxytrace2any.cc
proxytrace2any.cc:
Infunction`intmain(int,char**)':
proxytrace2any.cc:
120:
error:
`IsLittleEndian'undeclared(firstusethisfunction)
proxytrace2any.cc:
120:
error:
(Eachundeclaredidentifierisreportedonlyonce
foreachfunctionitappearsin.)
proxytrace2any.cc:
128:
error:
`ToOtherEndian'undeclared(firstusethisfunction)
make[1]:
***[proxytrace2any.o]Error1
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/we
btrace-conv/dec'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/epa'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/epa'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/nlanr'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/nlanr'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/ucb'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/ucb'
在文件d:
\cygwin\home\Administrator\ns-allinone-2.31\ns-2.31\indep-utils\webtrace-conv\dec\proxytrace2any.cc中的main函数前加入
externintIsLittleEndian(void);
externvoidToOtherEndian(TEntry*e);
没有变化。
我认为导致这个问题发生的原因我认为是肯定是在my_endian.h头文件定义时与别的文件冲突了,也就是说
#ifndef_ENDIAN_H_
#define_ENDIAN_H_
……
#endif
这个定义有冲突,只要将其改为
#ifndef_MY_ENDIAN_H_
#define_MY_ENDIAN_H_
#endif
我这样修改后,就能够成功进行编译了
只是这个还存在,原因不明。
make[1]:
***[proxytrace2any.o]Error1
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/we
btrace-conv/dec'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/epa'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/epa'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/nlanr'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/nlanr'
make[1]:
Enteringdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/ucb'
make[1]:
Nothingtobedonefor`all'.
make[1]:
Leavingdirectory`/home/wlw927/ns-allinone-2.31/ns-2.31/indep-utils/webtrace-conv/ucb'
将三个文件拷贝到d:
\cygwin\home\Administrator\ns-allinone-2.31\ns-2.31目录下。
执行./test
$./test
num_nodesisset3
warning:
Pleaseuse-channelasshownintcl/ex/wireless-mitf.tcl
warning:
noclassvariablePhy/WirelessPhy:
:
alive_
seetcl-object.tclintclclforinfoaboutthiswarning.
warning:
noclassvariablePhy/WirelessPhy:
:
Efriss_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
Etwo_ray_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
EXcvr_
warning:
noclassvariablePhy/WirelessPhy:
:
sleep_
warning:
noclassvariablePhy/WirelessPhy:
:
ss_
warning:
noclassvariablePhy/WirelessPhy:
:
dist_
INITIALIZETHELISTxListHead
warning:
noclassvariablePhy/WirelessPhy:
:
alive_
seetcl-object.tclintclclforinfoaboutthiswarning.
warning:
noclassvariablePhy/WirelessPhy:
:
Efriss_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
Etwo_ray_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
EXcvr_
warning:
noclassvariablePhy/WirelessPhy:
:
sleep_
warning:
noclassvariablePhy/WirelessPhy:
:
ss_
warning:
noclassvariablePhy/WirelessPhy:
:
dist_
warning:
noclassvariablePhy/WirelessPhy:
:
alive_
seetcl-object.tclintclclforinfoaboutthiswarning.
warning:
noclassvariablePhy/WirelessPhy:
:
Efriss_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
Etwo_ray_amp_
warning:
noclassvariablePhy/WirelessPhy:
:
EXcvr_
warning:
noclassvariablePhy/WirelessPhy:
:
sleep_
warning:
noclassvariablePhy/WirelessPhy:
:
ss_
warning:
noclassvariablePhy/WirelessPhy:
:
dist_
原因是在C++中声明的变量没有在tcl中初始化,所以打开d:
\cygwin\home\Administrator\ns-allinone-2.31\ns-2.31\tcl\lib\ns-default.tcl
在这段的下面添加
#InitializetheSharedMediainterfacewithparameterstomake
#itworklikethe914MHzLucentWaveLANDSSSradiointerface
Phy/WirelessPhysetCPThresh_10.0
Phy/WirelessPhysetCSThresh_1.559e-11
Phy/WirelessPhysetRXThresh_3.652e-10
Phy/WirelessPhysetbandwidth_2e6
Phy/WirelessPhysetPt_0.28183815
Phy/WirelessPhysetfreq_914e+6
Phy/WirelessPhysetL_1.0
Phy/WirelessPhysetalive_1
Phy/WirelessPhysetEfriss_amp_1e-12
Phy/WirelessPhysetEtwo_ray_amp_1e-13
Phy/WirelessPhysetEXcvr_1e-9
Phy/WirelessPhysetsleep_0
Phy/WirelessPhysetss_1
Phy/WirelessPhysetdist_0
再次执行./test
出现错误说找不到变量num_clusters,只好修改test文件为
#!
/usr/bin/bash
cdtcl/ex
nswireless.tcl
-scmit/uAMPS/sims/nodescen\
-rp$alg\
-x$x\
-y$y\
-nn$nn\
-stop$stop\
-eq_energy$eq_energy\
-init_energy$init_energy\
-filename$filename\
-dirname$dirname\
-topo$topology_file\
-num_clusters$num_clusters\
-bs_x$bs_x\
-bs_y$bs_y2>$dirname/$filename.err1>$dirname/$filename.out&
sleep2
cd../../
./leach_test
又出现错误,
can'tread"env(RCA_LIBRARY)":
nosuchvariable
whileexecuting
"source$env(RCA_LIBRARY)/ns-ranode.tcl"
(file"mit/uAMPS/sims/uamps.tcl"line9)
invokedfromwithin
"source.origmit/uAMPS/sims/uamps.tcl"
("uplevel"bodyline1)
invokedfromwithin
"uplevelsource.orig[list$fileName]"
(procedure"source"line12)
invokedfromwithin
"sourcemit/uAMPS/sims/uamps.tcl"
(file"tcl/mobility/leach.tcl"line18)
invokedfromwithin
"source.origtcl/mobility/leach.tcl"
("uplevel"bodyline1)
invokedfromwithin
"uplevelsource.orig[list$fileName]"
(procedure"source"line12)
invokedfromwithin
"sourcetcl/mobility/$opt(rp).tcl"
(file"tcl/ex/wireless.tcl"line187)
说环境变量$env(RCA_LIBRARY)找不到,原因是环境变量没有设置好,只是写在bash.bashrc文件中,不过这个文件并没有起作用。
于是手工输入下列代码到命令符下:
exportNS_HOME=`pwd`/ns-allinone-2.31
exportPATH=$NS_HOME/tcl8.4.14/unix:
$NS_HOME/tk8.4.14/unix:
$NS_HOME/bin:
$PATH
exportLD_LIBRARY_PATH=$NS_HOME/tcl8.4.14/unix:
$NS_HOME/tk8.4.14/unix:
$NS_HOME/otcl-1.13:
$NS_HOME/lib:
$LD_LIBRARY_PATH
exportTCL_LIBRARY=$NS_HOME/tcl8.4.14/library
exportRCA_LIBRARY=$NS_HOME/ns-2.31/mit/rca
exportuAMPS_LIBRARY=$NS_HOME/ns-2.31/mit/uAMPS
再次。
/test,命令没有反应,直接又返回了命令提示符。
查看leach.err文件,安装正确。
查看leach.out文件,含有错误信息:
warningdst_isnolongerbeingsupportedinNS.dst_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Leach 协议 安装 日记 一个 吐血 奉献