




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux下的NS2安装+LEACH及错误修改Linux下的NS2安装+LEACH及错误修改1、 安装前的准备说明为了方便实验和使用,采用的实在虚拟机上安装,安装和配置过程与实体无异。环境:Redhat9.0+ns-allinone-2.29.tar.gz准备:在安装编译之前确保Linux中已经安装了gcc+编译工具,以及 XFree86-devel and XFree86-libs两个组件。分别为:X 软件开发 KDE桌面环境,可以在添加删除程序中进行安装。2、 安装过程1. 本实验安装环境:完全安装的RedHat 9.0操作系统,ns-allinone-2.29安装包。2. 到官方下载网址下载NS2安装软件包ns-allinone-2.29.tar.gz.3. 以root登录RH9,在/home下建立ns2文件夹,将ns-allinone-2.29.tar.gz放在该文件夹下,在终端运行cd /home/ns2,使用解压命令tar xvfz ns-allinone-2.29.tar.gz,即生成/home/ns2/ ns-allinone-2.9.4. 修改/home/ns2/ ns-allinone-2.9/nam-1.11/agent.h中的第73行,将NULL改为0.5. 在/home/ns2/ ns-allinone-2.9/下运行。/install6. 根据安装结束后结尾处的提示,将某些路径复制下来,或者直接按照以下修改(可以对照提示理解):7. 修改/root/.bashrc(注意该文件为隐藏文件),在该文件末尾加上以下三句话:exportPATH=$PATH:/home/ns2/ns-allinone-2.29/bin:/home/ns2/ns-allinone-2.29 /tcl8.4.11/unix:/home/ns2/ns-allinone-2.29/tk8.4.11/unixexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ns2/ns-allinone-2.29/otcl-1.11: /home/ns2/ns-allinone-2.29/libexportTCL_LIBRARY=$TCL_LIBRARY:/home/ns2/ns-allinone-2.29/tcl8.4.11/library在root路径下输入命令:source .bash_profile进行环境变量的更新8. 这时,如果以上设置正确,直接运行ns会出现%,或者可以运行软件自带的例子,在 /home/ns2/ns-allinone-2.29/ns-2.29/ns-tutorial/examples下运行ns example2.tclLEACH协议的安装准备:获取LEACH的源码文件:mit.tar.gz 1. 进入到目录/home/ns2/ns-allinone-2.29下解压LEACH协议源文件mit.tar.gz rootlocalhost root# cd /home/ns2/ns-allinone-2.29rootlocalhost ns-2.29# tar -xzcf mit.tar.gz ./2. 修改MakeFile文件1) 添加-DMIT_uAMPS到DEFINE中DEFINE = -DTCP_DELAY_BIND_ALL.-DMIT_uAMPS2) 添加 -I./mit/rca -I./mit/uAMPS到INCLUDE中INCLUDES = -I./diffusion3/filter_core -I./asim/ -I./qs -I./diffserv -I./satellite -I./wpan -I./mit/rca -I./mit/uAMPS 3) 添加以下代码在gaf/gaf.o 之前mit/rca/energy.o mit/rca/rcagent.o mit/rca/rca-ll.o mit/rca/resource.o mac/mac-sensor-timers.o mac/mac-sensor.o mit/uAMPS/bsagent.o 注:添加过程中使用TAB键代替空格。否则编译会出错。4) 将MakeFile文件中的mit/mit.o mit/mit注销掉(有的话)。3. 进入ns-2.29目录下,输入make cleanrootlocalhost ns-2.29# make clean注:若出现Makefile:1: * missing separator. Stop.错误,查看MakeFile文件添加修改的代码是否使用空格代替了TAB,是的话改过来。4. 编译make5. 修改test文件如下:#!/bin/bash cd tcl/ex ns wireless-demo-csci694.tcl sleep 2 cd ./././leach_test6. 修改leach_test文件,ns tcl/ex/wireless.tcl 前添加以下代码RCA_LIBRARY=mit/rcaexport RCA_LIBRARYuAMPS_LIBRARY=mit/uAMPSexport uAMPS_LIBRARY7. 修改.bashrc文件(rootlocalhost root# vim .bashrc ),在文件最后添加以下环境变量。export RCA_LIBRARY=/home/ns2/ns-allinone-2.29/ns-2.29/mit/rcaexport uAMPS_LIBRARY=/home/ns2/ns-allinone-2.29/ns-2.29/mit/uAMPS8. mit MPSsims mps.tcl文件。将代码source $env(RCA_LIBRARY)/ns-ranode.tclsource $env( MPS_LIBRARY)/ns-bsapp.tclsource $env( MPS_LIBRARY)/extras.tclsource $env( MPS_LIBRARY)/stats.tcl#Uncomment these lines to use gdb to debug the c code#source mit/ MPS/ns-bsapp.tcl#source mit/ MPS/extras.tcl#source mit/ MPS/stats.tclsource $env(RCA_LIBRARY)/resources/ns-resource-manager.tclsource $env(RCA_LIBRARY)/resources/ns-energy-resource.tclsource $env(RCA_LIBRARY)/resources/ns-neighbor-resource.tcl修改成代码source mit/rca/ns-ranode.tclsource mit/ MPS/ns-bsapp.tclsource mit/ MPS/extras.tclsource mit/ MPS/stats.tclsource mit/rca/resources/ns-resource-manager.tclsource mit/rca/resources/ns-energy-resource.tclsource mit/rca/resources/ns-neighbor-resource.tcl9. 验证结果rootlocalhost ns-2.29# ./testnum_nodes is set 3Loading connection pattern.Loading scenario file.Starting Simulation.channel.cc:sendUp - Calc highestAntennaZ_ and distCST_highestAntennaZ_ = 1.5, distCST_ = 89.8SORTING LISTS .DONE!NS EXITING.10查看rootlocalhost mit# cd leach_sims/rootlocalhost leach_sims# cat leach.errINITIALIZE THE LIST xListHeadchannel.cc:sendUp - Calc highestAntennaZ_ and distCST_highestAntennaZ_ = 1.5, distCST_ = 222.8SORTING LISTS .DONE!表明LEACH安装成功!rootlocalhost leach_sims# cat leach.outCreating sensor nodes.0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 (100 = BS)* NOTE: no connection pattern specified.Loading scenario file.Node 0: (65.745973803916002,92.581722416254564)Node 1: (21.008649990432268,92.380389195112684)Node 2: (37.201202259027028,40.606367467253641)Node 3: (71.218022131928251,61.297971318148988)Node 4: (35.003944130150579,11.288995440718249)Node 5: (34.146372151629237,98.076752432657756)Node 6: (75.978135678906995,64.526355389750734)Node 7: (94.45503554048716,5.7823289678349754)Node 8: (83.602962402441989,14.98909784247591)Node 9: (21.767438492629417,45.338745622587737)Node 10: (8.2976788321033492,59.088131160982016)Node 11: (94.220422624713009,62.643053551503947)Node 12: (41.80104012684945,50.081411958710021)Node 13: (18.290790039250062,13.30818967582108)Node 14: (70.743881524886874,92.416788773805266)Node 15: (48.968921345178465,20.661048414493468)错误锦集及修改1 编译出错1.pt_xcp的问题在/home/ns2/ns-allinone-2.29/ns-2.29/common/packet.h 文件中,enum packet_t下添加 PT_XCP,接着在p_info()里添加name_PT_XCP=xcp;/home/ns2/ns-allinone-2.29/ns-2.29/mac /channel.cc中:WirelessPhy *wifp = (WirelessPhy *)tifp;之后加入:distCST_ = wifp-getDist(wifp-getCSThresh(), wifp-getPt(), 1.0, 1.0,highestZ , highestZ, wifp-getL(),wifp-getLambda(); ns-2.29/mac下面的wireless-phy.h文件中 WirelessPhy()下添加double getDist(double Pr, double Pt, double Gt, double Gr,double hr, double ht, double L, double lambda);然后在wireless-phy.cc的最后添加double WirelessPhy:getDist(double Pr, double Pt, double Gt, double Gr,double hr, double ht, double L, double lambda) if (propagation_) return propagation_-getDist(Pr, Pt, Gt, Gr, hr, ht, L,lambda); return 0;2.mac/mac-802_11.cc:DROP_MAC_COLLISION在cmu-trace.h文件中#define DROP_MAC_COLLISION COL之后加入/ BUGFIX UKA: capture/ packet drop in case of a packet capture#define DROP_MAC_CAPTURE CAP/ BUGFIX UKA END: capture3.mac/mac-tdma.cc:node_sleep没有定义(说明leach函数少了好多呀,从原来的ns里找到函数,复制过来)wireless-phy.cc里添加这两个函数。voidWirelessPhy:node_wakeup() if (status_= IDLE) return; if (em() = NULL) return; if ( NOW update_energy_time_ & (status_= SLEEP) ) /the power consumption when radio goes from SLEEP mode to IDLE mode em()-DecrTransitionEnergy(T_transition_,P_transition_); em()-DecrSleepEnergy(NOW-update_energy_time_, P_sleep_); status_ = IDLE; update_energy_time_ = NOW; / log node energy if (em()-energy() 0) (MobileNode *)node_)-log_energy(1); else (MobileNode *)node_)-log_energy(0); voidWirelessPhy:node_sleep()/ node_on_= FALSE;/ if (status_= SLEEP) return; if (em() = NULL) return; if ( NOW update_energy_time_ & (status_= IDLE) ) /the power consumption when radio goes from IDLE mode to SLEEP mode em()-DecrTransitionEnergy(T_transition_,P_transition_); em()-DecrIdleEnergy(NOW-update_energy_time_, P_idle_); status_ = SLEEP; update_energy_time_ = NOW; / log node energy if (em()-energy() 0) (MobileNode *)node_)-log_energy(1); else (MobileNode *)node_)-log_energy(0); 同时在wireless-phy.h文件中void node_off(); 之后加入 void node_wakeup(); void node_sleep() ;4.comm/mobilenode.cc:POSITION_UPDATE_INTERVAL没有定义mobilenode.h中加入#define POSITION_UPDATE_INTERVAL 30.05.mac/wireless-phy.cc中SLEEP、P_sleep_、P_transition_ 、T_transition_ 及没有定义:在wireless-phy.h中修改enum ChannelStatus SLEEP, IDLE, RECV, SEND ;在double P_idle_; 之后加入 double P_sleep_ ; double P_transition_; double T_transition_ ;6.satellite/sat-hdlc.h:HDR_HDLC没有定义?在packet.h中加入#define HDR_HDLC(p) (hdr_hdlc*)hdr_ll:access(p)enum packet_t 中加入PT_HDLCclass p_info public:中加入name_PT_HDLC=HDLC;7.大端小端的问题注释掉#ifndef和#mon/mobilenode.cc: In member function void MobileNode:update_position():common/mobilenode.cc:477: warning: unused variable double oldY注释掉:9.mac/wireless-phy.cc: In member function virtual void WirelessPhy:sendDown(Packet*):mac/wireless-phy.cc:320: min undeclared (first use this function)把min改成MIN说明:具体的错误修改可以参考其他版本(如:ns-2.35)的对应文件进行修改。2 测试出错1.rootlocalhost ns-2.29# ./testnum_nodes is set 3warning: Please use -channel as shown in tcl/ex/wireless-mitf.tclwarning: no class variable Phy/WirelessPhy:alive_ see tcl-object.tcl in tclcl for info about this warning.warning: no class variable Phy/WirelessPhy:Efriss_amp_warning: no class variable Phy/WirelessPhy:Etwo_ray_amp_warning: no class variable Phy/WirelessPhy:EXcvr_warning: no class variable Phy/WirelessPhy:sleep_。解决方法:ns-allinone-2.29ns-2.29tcllibns_default.tcl文件第692行加入7个初始值如下:Phy/WirelessPhy set alive_ 1Phy/WirelessPhy set Efriss_amp_ 100 * 1e-12Phy/WirelessPhy set Etwo_ray_amp_ 0.013 * 1e-12Phy/WirelessPhy set EXcvr_ 50 * 1e-9Phy/WirelessPhy set sleep_ 0Phy/WirelessPhy set ss_ 1Phy/WirelessPhy set dist_ 0具体的初始值应该对照ns-allinone-2.29ns-2.29macwireless-phy.cc输入(第95行,第97-99行,第104-105行,第107行)注意:提示code omitted because of length 错误, 错误在set Efriss_amp_ 100*1e-12;原因是:不能设置表达式,要改成set Efriss_amp_ *1e-10, 同理改_amp_ 0.013*1e-12; set EXcvr_ 50*1e-9 )。修改之后,要重新编译。即先执行make clean,再执行make。成功后,再次运行./test,得到第一次的结果。2.rootlocalhost leach_sims# cat leach.out .Warning dst_ is no longer being supported in NS. dst_ 0xffffffffUse dst_addr_ and dst_port_ insteadWarning dst_ is no longer being supported in NS. dst_ 0xffffffffUse dst_addr_ and dst_port_ insteadWarning dst_ is no longer being supported in NS. dst_ 0xffffffffUse dst_addr_ and dst_port_ insteadWarning dst_ is no longer being supported in NS. dst_ 0xffffffffUse dst_addr_ and dst_port_ insteadBS Received data 80 , 21.642348039596602 from 80 at time 21.684012239774891This represents data from nodes: 33 80Warning dst_ is no longer being supported in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农业用地的租赁合同模板
- 临床营养学理论与实践
- 大医精诚演讲课件
- 酒店餐饮精细化管理体系构建与实施
- 湖北省重点高中智学联盟2024-2025学年高一下学期5月联考生物试题
- 2025年河南省平顶山市鲁山县部分中学九年级4月联考数学试卷
- 护理查房互动环节设计与实施
- 2025年现场急救知识试题
- 北师大4下一双手教学设计配课件
- 腹泻患者健康教育
- 进行性肌营养不良新进展
- 幼儿园故事课件:《狼来了》
- Unit4WhereIsMyShirt-Lesson15(课件)北京版英语二年级下册
- 电力工程隐患隐患排查治理实施方案(三篇)
- 市政工程投资估算编制办法(建标2007164号)
- 大众朗逸2014款说明书
- 左宗棠课件完整版
- 2022肝豆状核变性诊疗指南
- 建筑工地事故应急救援演习记录表范本
- 厨房清洁记录表范本模板
- 互联网金融对大学生消费行为的影响研究
评论
0/150
提交评论