简介
 
     本文档说明如何识别总线错误崩溃,以及如何根据您的Cisco路由器的处理器类型来诊断并排除这些故障。
 
      
     先决条件
 
      
     要求
 
     Cisco建议您在阅读本文前先阅读路由器崩溃故障排除。
 
      
     使用的组件
 
     本文档中的信息基于以下软件和硬件版本:
 
      
      -  
所有的 Cisco IOS® 软件版本
   
      -  
所有 Cisco 路由器
   
     
 
     注意:本文档不适用于Cisco Catalyst交换机或MGX平台。
 
     本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
 
      
     规则
 
     有关文档约定的更多信息,请参考 Cisco 技术提示约定。
 
      
     识别总线错误崩溃
 
     当处理器尝试访问不存在(软件错误)、或者没有正确回应(硬件问题)的存储位置时,系统遇到总线错误。如果路由器如果没重新启动或手工重新载入,总线错误可以通过路由器所提供的show version命令的输出结果来进行识别。
 
     如果您有来自Cisco设备的show version或show technical-support命令(从启用模式)的输出,您可以使用它显示潜在问题和解决方法。要使用该工具,您必须是注册客户、已登录并已启用JavaScript。
 
      
      Router uptime is 2 days, 21 hours, 30 minutes 
System restarted by bus error at PC 0x30EE546, address 0xBB4C4 
System image file is "flash:igs-j-l.111-24.bin", booted via flash 
.........
 
     
 
     在控制台提示符处,总线错误期间也会出现以下错误消息:
 
      
      *** System received a Bus Error exception *** 
signal= 0xa, code= 0x8, context= 0x608c3a50
PC = 0x60368518, Cause = 0x20, Status Reg = 0x34008002
.........
 
     
 
     之后,路由器重新加载。但是,在某些情况下,路由器会进入崩溃和重载循环,需要手动干预才能打破这种循环。
 
     另外一个相关问题是通用接口处理器(VIP)故障。如果出现此问题,则会记录类似于下面的错误消息:
 
      
      %VIP2 R5K-1-MSG: slot0 System reloaded by a Bus Error exception
%VIP2 R5K-1-MSG: slot0 caller=0x600BC974
%VIP2 R5K-1-MSG: slot0 System exception: sig=10, code=0x408,
context=0x605B51E0
 
     
 
     最后,另外一种总线错误造成系统崩溃类型是Cisco 12000系列互联网路由器上的线路卡崩溃。如果出现这个问题,则类似于下面的错误消息将会记录在show context输出中:
 
      
      Router#show context
... 
CRASH INFO: Slot 1, Index 1, Crash at 11:27:15 utc  Wed May 16 2001
 VERSION: 
 GS Software (GLC1-LC-M), Version 12.0(16.5)S, EARLY DEPLOYMENT MAINTENANCE 
 INTERIM SOFTWARE 
 TAC Support: http://www.cisco.com/pcgi-bin/ibld/view.pl?i=support    
 Compiled Thu 29-Mar-01 17:12 by ninahung 
 Card Type: 3 Port Gigabit Ethernet, S/N 
 System exception: SIG=10, code=0x2008, context=0x40D8DF44 
 System restarted by a Bus Error exception 
 STACK TRACE: 
 -Traceback= 40165800 4038D0FC 4025C7BC 4026287C 4029581C 402EECF8 400C0144    
 CONTEXT: 
 $0 : 00000000, AT : 00000000, v0 : 00000044, v1 : 0FE00020 
 a0 : 00000000, a1 : 0FE00000, a2 : 00000000, a3 : 39EC6AAB 
 t0 : 00000030, t1 : 34008D01, t2 : 34008100, t3 : FFFF00FF 
 t4 : 400C01E8, t5 : 00000001, t6 : 00000001, t7 : 00000001 
 s0 : 40DCDD20, s1 : 0FE00000, s2 : 00000000, s3 : 000005DC 
 s4 : 00000000, s5 : 0FE00020, s6 : 00000004, s7 : 414CF120 
 t8 : 41680768, t9 : 00000000, k0 : 00000000, k1 : FFFF8DFD 
 gp : 40CB9780, sp : 4105BFE8, s8 : 41652BA0, ra : 4038D0FC 
 EPC : 0x40165800, SREG : 0x34008D03, Cause : 0x00002008 
 ErrorEPC : 0xBFC22B94
 -Process Traceback= No Extra Traceback
 
     
 
     要了解更多细节,请参见 “Cisco 12000系列互联网路由器上的线路卡崩溃故障排除”
 
     如果您有思科设备的show context命令输出,可以使用思科CLI分析器揭示潜在问题并进行修复。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
 
      
     排除总线错误崩溃故障
 
     第一件要做的事就是找出当总线错误发生的时候路由器试图访问的存储位置(也称为“地址”或者“地址操作数”)。利用这条信息,您就能够得到提示,判断故障到底是出在Cisco ISO软件还是路由器硬件。在示例“System restarted by bus error at PC 0x30EE546, address 0xBB4C4”中,路由器尝试访问的内存位置是0xBB4C4。不要将它同上面的程序计数器(PC)值混淆。
 
     第二件需要做的事情就是确定路由器中的处理器类型。路由器的内存地址位置根据处理器和类型的不同而不同。Cisco路由器中主要有两类处理器:
 
      
     一旦确认了地址和处理器类型之后,您就可以开始进行更详细的故障诊断与排除处理。
 
      
     解决 68000 处理器平台上的总线错误崩溃
 
     知道总线错误时路由器所访问的地址之后,就可以使用 show region 命令来确定地址所对应的存储器位置。如果总线错误崩溃所报告的地址并不落在show region输出中所显示的范围之内,则这意味着路由器试图访问一个无效的地址。这就表明是Cisco IOS软件的问题。使用思科CLI分析器(仅限于注册客户)对show stacks命令的输出进行解码并识别导致总线错误的Cisco IOS软件bug。
 
     从另一个角度来说,如果地址落在show region输出的范围内,则意味着路由器访问了一个有效的内存地址,但是对应于该地址的硬件却没有正确响应。这就意味着出现了硬件问题。
 
     这里是 show region 输出的一个例子:
 
      
      Router#show region 
Region Manager: 
     Start         End     Size(b)  Class  Media  Name 
0x00000000  0x007FFFFF     8388608  Local  R/W    main 
0x00001000  0x0001922F       98864  IData  R/W    main:data 
0x00019230  0x000666B3      316548  IBss   R/W    main:bss 
0x000666B4  0x007FEFFF     7965004  Local  R/W    main:heap 
0x007FF000  0x007FFFFF        4096  Local  R/W    main:flhlog 
0x00800000  0x009FFFFF     2097152  Iomem  R/W    iomem 
0x03000000  0x037FFFFF     8388608  Flash  R/O    flash 
0x0304033C  0x037A7D3F     7764484  IText  R/O    flash:text 
     
 
     注意:在某些早期的Cisco IOS软件版本中,此命令不可用。show region 输出是Cisco IOS 软件版本 12.0(9)中 show tech-support 输出的一部分。
 
     地址以十六进制格式显示。“开始”和“结束”范围内的地址是有效的内存地址。
 
     Main对应于主存储器或者是动态RAM(DRAM)。
 
     iomem对应于输入/输出(I/O)内存,这意味着不同平台使用不同的部件。例如,DRAM用于Cisco 2500,而共享的RAM(SRAM)则用于Cisco 4000。
 
     仍然以前面的示例为例, System restarted by bus error at PC 0x30EE546, address 0xBB4C4,这个总线错误崩溃来自Cisco 2500路由器,输出显示show region。0xBB4C4相当于0x000BB4C4。使用show region输出,此地址在“main”的范围内,或者更具体地说,在“main:heap”或0x000666B4-0x007FEFFF的范围内。正如前面所提到的,“main”对应于主存储器或者DRAM,因而需要检查DRAM芯片。
 
     如果是一个新的路由器,或者如果路由器被从一个位置移到另外一个位置,则存储器芯片常常会丢失。重新安装存储器芯片或者将存储器稳固地推入插槽内可能是一个较好的办法。大多数情况下,这样做就可以解决这一类型的故障。
 
     对于那些地址没有落入show region地址范围的总线错误崩溃,请使用思科CLI分析器对show stacks命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。如果您不能确认哪个bug ID可以匹配或者哪个Cisco IOS软件版本含有针对该问题的解决方法,则将您的Cisco IOS软件升级到您的版本系列中最新的版本也是一个办法,这常常可以解决问题,因为最新版本中常常已经包括了对大量bug的修复程序。
 
     如果您有思科设备的show stacks或show technical-support(从启用模式)命令的输出,可以使用思科CLI分析器揭示潜在问题并进行修复。要使用思科 CLI 分析器,您必须是注册客户、已登录并已启用 JavaScript。
 
      
     解决 RISC 处理器平台上的总线错误崩溃
 
     在继续阅读本部分之前,建议您先阅读对68000处理器平台上的总线错误崩溃进行故障排除部分。
 
     在RISC处理器上,Cisco IOS软件使用虚拟地址,通过使用转换旁路缓冲器(TLB)可以将虚拟地址翻译为物理地址。因而,RISC处理器上所报告的总线错误地址是虚拟地址,而不是68000处理器上所使用的物理地址。
 
     show region命令的输出必须用于检查总线错误所报告的地址。为了解释这个情况,让我们看一看下面的例子:
 
      
      System was restarted by bus error at PC 0x60104864, address 0xC
 
     
 
     采用下面的 show region 命令的输出,您就可以校验0xC并非一个有效的虚拟地址,从而可以判定总线错误是由于软件问题所导致。使用思科CLI分析器(仅限于注册客户)对show stacks或show technical-support(从启用模式)命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。
 
     使用show region 命令的另外一个优势是,存储器映像取决于安装在路由器中的存储器的大小。例如,如果您有64 MB的DRAM(64 x 1024 x 1024 = 67108864字节= 0x4000000字节),则64M DRAM的范围就是0x60000000-0x63FFFFFF。这可以用 show region 命令加以确认:
 
      
      Router#show version | i of memory 
cisco RSP2 (R4700) processor with 65536K/2072K bytes of memory. 
Router#show region 
Region Manager: 
     Start         End     Size(b)  Class  Media  Name 
0x40000000  0x40001FFF        8192  Iomem  REG    qa 
0x40002000  0x401FFFFF     2088960  Iomem  R/W    memd 
0x48000000  0x48001FFF        8192  Iomem  REG    QA:writethru 
0x50002000  0x501FFFFF     2088960  Iomem  R/W    memd:(memd_bitswap) 
0x58002000  0x581FFFFF     2088960  Iomem  R/W    memd:(memd_uncached) 
0x60000000  0x63FFFFFF    67108864  Local  R/W    main 
0x60010908  0x60C80B11    13042186  IText  R/O    main:text 
0x60C82000  0x60F5AF1F     2985760  IData  R/W    main:data 
0x60F5AF20  0x610E35FF     1607392  IBss   R/W    main:BSS 
0x610E3600  0x611035FF      131072  Local  R/W    main:fastheap 
0x61103600  0x63FFFFFF    49269248  Local  R/W    main:heap 
0x80000000  0x83FFFFFF    67108864  Local  R/W    main:(main_k0) 
0x88000000  0x88001FFF        8192  Iomem  REG    QA_k0 
0x88002000  0x881FFFFF     2088960  Iomem  R/W    memd:(memd_k0) 
0xA0000000  0xA3FFFFFF    67108864  Local  R/W    main:(main_k1) 
0xA8000000  0xA8001FFF        8192  Iomem  REG    QA_k1 
0xA8002000  0xA81FFFFF     2088960  Iomem  R/W    memd:(memd_k1) 
     
 
     如果在0x65FFFFFF出现总线错误造成系统崩溃,则 show region 输出就会将内存大小考虑进去,并告诉您它是一个非法地址(软件bug)。
 
     小结:
 
      
      -  
使用 show region 命令来校验总线错误崩溃所指示的地址是否在路由器所使用的地址范围内。
   
      -  
如果地址落入一个虚拟地址范围内,则根据这个范围更换硬件。
   
      -  
如果地址不落在虚拟地址范围内,则使用思科CLI分析器(仅限注册客户)对show stacks或show technical-support(从启用模式)命令的输出进行解码,并识别导致总线错误的Cisco IOS软件bug。
   
      -  
可以重点考虑安装您目前正在运行的Cisco IOS软件系列最新的维护版本。
   
     
 
      
     总线错误崩溃的特殊类型
 
     特殊类型总线错误崩溃的一种是,当死机是由被已损坏的程序计数器(PC)所导致。PC值是总线错误发生时处理器正在执行的命令的位置。当总线错误是由于被破坏的PC所导致的时候,下述消息就会出现在控制台上:
 
      
      %ALIGN-1-FATAL: Corrupted program counter 
  pc=0x0, ra=0x601860BC, sp=0x60924540, at=0x60224854
 
     
 
     在这种情况下,PC已经跳到地址0x0(可能是因为一个空指针),但是这并非命令所处的位置。这是一种软件问题,因而需要用show region 命令进行检查。
 
     在其它RISC平台上(Cisco 3600、4500等),当跳到非法PC的时候,您会遇到一个SegV异常,而非总线错误。
 
     另外一种常见的总线错误崩溃是PC值等于地址值的情况。例如:
 
      
      System returned to ROM by bus error at PC 0x606B34F0, address 0x606B34F0
 
     
 
     从crashinfo文件:
 
      
      Unexpected exception, CPU signal 10, PC = 0x606B34F0
   
  $0 : 00000000, AT : A001A24A, v0 : 00000000, v1 : 00000000
  a0 : 00000000, a1 : 429CC394, a2 : 00000000, a3 : 62544344
  t0 : 6069F424, t1 : 3400FF00, t2 : FFFFFFFB, t3 : 00000000
  t4 : 606B8E68, t5 : 80000000, t6 : AA5C1022, t7 : 62FDE9D4
  s0 : 62300000, s1 : 6281A1B8, s2 : 80007E20, s3 : 00000001
  s4 : 00000001, s5 : 00000000, s6 : 62310000, s7 : 62544344
  t8 : 62FDEA1C, t9 : 0D0D0D0D, k0 : 623079C0, k1 : 00000014
  gp : 620B9E20, sp : 61E7E300, s8 : 00000000, ra : 606B8E68
  EPC : 606B34F0, ErrorEPC : 606B8E68, SREG : 3400FF02
  Cause 00004018 (Code 0x6): Instruction Bus Error exception
   
  -Traceback= 606B34F0 606B8E68
 
     
 
     注意,k1寄存器的值是0x14(十六进制),用十进制表示等于20。它指向一个缓存奇偶校验异常错误。在这个特殊的例子里,奇偶校验错误并没有被正确处理,并且正被总线错误所遮盖。路由器已经由于软件总线错误而死机,因而不能再处理缓存奇偶校验异常错。
 
     您应该将这种死机考虑为常规处理器奇偶校验错崩溃,并且按照 处理器内存奇偶校验错误(PMPE)建议进行修正。
 
     您还应该考虑将Cisco IOS软件版本升级到可修复CSCdv68388-“Change cache error exception handler to resume not crash”错误的版本,这个bug在Cisco IOS软件12.2(10)以后的版本中都已得到修复。
 
      
     更多的关于总线错误异常启动环路故障排除技术
 
     这一节的重点是总线错误异常的一些通用故障排除技术:
 
      
      -  
加载的Cisco IOS软件不支持已安装的硬件
   
      -  
软件故障
   
      -  
硬件装配错误
   
      -  
硬件故障
   
     
 
      
     加载的Cisco IOS软件不支持已安装的硬件
 
     校验所有网卡都可以被Cisco IOS软件支持。Software Advisor (仅限注册用户使用) 可以为您提供硬件所需要的最低版Cisco IOS软件。此外,如果您的路由器是Cisco 7200或者Cisco 7500系列路由器等支持根镜像的路由器,则还要校验引导闪存 镜像是否支持安装的硬件。
 
      
     软件故障
 
     在2600和3600路由器上,路由器的I / O内存可以配置为主存储器的一个百分数。如果I / O内存设置对于已经安装的网络模块或者WAN接口卡(WIC)来说不合适,则2600 / 3600平台在启动的时候就可能出现问题,而且可能会因为总线错误而死机。
 
     如果最近对软件配置做了更改,而且路由器正在启动循环中,则可能是因为软件bug导致的问题。
 
     如果路由器不能够启动,则您可以跳过配置,而是不是配置导致的问题。执行下列步骤:
 
      
      -  
在启动的前60秒钟向路由器发送中断序列以进入ROMMON。
   
      -  
从ROM监视器,使用 confreg 命令将配置寄存器更改为某个设置(如0x2142)来忽略路由器的配置:
 
        
        rommon 1 > confreg 0x2142
You must reset or power cycle for new config to take effect
rommon 2 > reset
 
       
   
     
 
     如果路由器启动没有出错,则是因配置问题而导致错误。检查Cisco IOS软件以及硬件是否都能够支持您的配置。如果支持,则使用Bug Tookit(仅限注册用户)来识别您遇到的软件Bug。可以重点考虑安装您目前正在运行的Cisco IOS软件系列最新的维护版本。
 
      
     硬件装配错误
 
     如果因总线错误异常而导致不断重启,则有可能是硬件安装位置错误所导致的。对于低端平台如3600或者4000等路由器,可以重新安装网络模块或者网络处理器。
 
     对于高端平台如7200或者7500等路由器,则重新安装由于总线错误异常而正在重装的处理器、VIP、端口适配器或者线路卡。
 
      
     硬件故障
 
     包含在总线错误中的信息无助于排除硬件故障。这样,取出卡并重新插入以找出问题硬件是非常重要的。这里有一些推荐的步骤来找到问题:
 
     
 
     **以上故障排除步骤完成以后,如果路由器不再经历连续循环,此问题则有可能由网络模块插错位置引起。我们建议您24小时监控路由器,以确保路由器继续运行,而不会再遇到问题。
 
      
     开立服务请求时要收集的信息
 
      
       
        
        | 如果您在采用了上述步骤之后仍然需要支持,并且希望建立Cisco 计时支持案例,请确认已经包括下述针对总线错误或者总线错误异常的信息: |  
       
 
        
         
          
          - 在建立案例前所执行的故障诊断及处理措施
  
          - show technical-support 输出(如果可能,在启动模式下)
  
          - show log 输出或控制台捕获信息(如果可用)
  
          - crashinfo 文件 (如果出现而且还没有包括在 show technical-support 输出内)
  
          - show region 输出(如果还没有包括在 show technical-support 输出内)
  
           请以非压缩的纯文本格式 (.txt) 将收集的数据附加到请求中。通过使用Case Query工具进行上载,您可以将此信息附加到您的案例(仅限于注册用户)。如果不能访问Case Query工具,您可以附上关于案例的相关信息,并在标题栏注明案例编号,然后通过电子attach@cisco.com发送出去。 注意:在收集上述信息之前,除非需要排除总线错误异常,否则请勿手动重新加载路由器或重新启动路由器,因为这可能会导致确定问题根本原因所需的重要信息丢失。   |  
       
 
       
     
 
      
     相关信息