运行NS2仿真.tcl文件遇段错误及dpkg锁权限问题求助
问题解决:NS2仿真段错误与dpkg权限错误
1. NS2仿真出现Segmentation fault (core dumped)
你的.tcl代码存在多处语法和逻辑错误,这些是导致段错误的核心原因,以下是具体修正点和修正后的完整代码:
关键错误点说明:
- Tcl语法大小写敏感,
Set/Proc需改为小写set/proc - 变量引用与命名错误:比如
val (x)需改为$val(x),trace fd需合并为tracefd,node _($i)需改为node_($i) - NS2命令选项错误:比如
node-config-ad hoc routing需改为node-config -adhocRouting,选项名需符合NS2规范 - Mac层参数设置语法错误:比如
Mac /802_11需改为Mac/802_11,参数名如Slot Time _需修正为SlotTime_ - 循环逻辑错误:部分节点创建和颜色设置的循环范围不匹配
修正后的完整代码:
# define options set val(chan) Channel/WirelessChannel ;# channel type set val(prop) Propagation/TwoRayGround ;# radio propagation model set val(netif) Phy/Wireless ;# network interface type set val(mac) Mac/802_11 ;# MAC type set val(ifq) Queue/DropTail/PriQueue ;# interface queue type set val(ll) LL ;#Link layer type set val(ant) Antenna/OmniAntenna ;# antenna model set val(ifqlen) 50 ;# max packet in ifq set val(nn) 50 ;# number of mobile nodes set val(rp) MDAOMDV ;# Routing protocol set val(x) 800 ;# X dimension of topography set val(y) 800 ;# Y dimension of topography set val(stop) 50 ;# time of simulation end set val(energymodel) EnergyModel ; set val(n_ch) chan_1 #------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ #remove-all-packet-headers #add-packet-header IP LL Mac AODV AOMDV ATR DSDV DSR OLSR UDP TCP CBR FTP ;# needed headers Mac/802_11 set CWMin_ 31 Mac/802_11 set CWMax_ 1023 Mac/802_11 set SlotTime_ 0.000020 ;# 20us Mac/802_11 set SIFS_ 0.000010 ;# 10us Mac/802_11 set PreambleLength_ 144 ;# 144 bit Mac/802_11 set ShortPreambleLength_ 72 ;# 72 bit Mac/802_11 set PreambleDataRate_ 1.0e6 ;# 1Mbps Mac/802_11 set PLCPHeaderLength_ 48 ;# 48 bits Mac/802_11 set PLCPDataRate_ 1.0e6 ;# 1Mbps Mac/802_11 set ShortPLCPDataRate_ 2.0e6 ;# 2Mbps Mac/802_11 set RTSThreshold_ 3000 ;# bytes Mac/802_11 set ShortRetryLimit_ 7 ;# retransmissions Mac/802_11 set LongRetryLimit_ 4 ;# retransmissions Mac/802_11 set newchipset_ false ;# use new chipset , allowing a more recent packet to be correctly received in place of the first sensed packet Mac/802_11 set DataRate_ 2Mb ;# 802.11 data transmission rate Mac/802_11 set BasicRate_ 1Mb ;# 802.11 basic transmission Mac/802_11 set aarf_ false # creating simulation: set ns [new Simulator] #use colors to differentiate the traffics $ns color 1 Green # creating nam and trace file: set tracefd [open mdaomdv.tr w] set namtrace [open mdaomdv.nam w] $ns trace-all $tracefd $ns namtrace-all-wireless $namtrace $val(x) $val(y) #set up topography object set topo [new Topography] $topo load-flatgrid $val(x) $val(y) set god_ [create-god $val(nn)] #configure the nodes $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace ON \ -channel $val(n_ch) \ -energyModel $val(energymodel) ## creating node object for {set i 0} {$i < 20} { incr i } { set node_($i) [$ns node] } for {set i 0} {$i < 20} {incr i } { $node_($i) color blue $ns at 0.0 "$node_($i) color blue" } for {set i 20} {$i < 30 } { incr i } { set node_($i) [$ns node] } for {set i 20} {$i < 30 } { incr i } { $node_($i) color cyan $ns at 1.0 "$node_($i) color cyan" } for {set i 30} {$i < 50 } { incr i } { set node_($i) [$ns node] } for {set i 30} {$i < 50 } { incr i } { $node_($i) color red $ns at 2.0 "$node_($i) color red" } ##provide initial location of mobile nodes. for {set i 0} {$i < $val(nn) } { incr i } { set xx [expr rand()*800] set yy [expr rand()*800] $node_($i) set X_ $xx $node_($i) set Y_ $yy } # Define node initial position in nam for {set i 0} {$i < $val(nn)} { incr i } { # defines the node size for nam $ns initial_node_pos $node_($i) 30 } proc stop {} { global ns tracefd namtrace $ns flush-trace close $tracefd close $namtrace exec nam mdaomdv.nam & } $ns run
2. dpkg清理损坏包时的权限错误
你执行的命令存在锁文件占用和格式错误两个问题,解决步骤如下:
步骤1:释放dpkg锁文件
先关闭所有正在运行的包管理进程(如apt、synaptic),再执行:
sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/apt/lists/lock sudo rm /var/cache/apt/archives/lock
步骤2:修复dpkg状态
sudo dpkg --configure -a
步骤3:正确清理损坏包
原命令无法直接传递包名,改用以下命令:
sudo dpkg -l | grep ^..r | awk '{print $2}' | sudo xargs apt-get purge -y
内容的提问来源于stack exchange,提问作者Pom Hertom
相关产品推荐
相关产品推荐

