目录

简介

先决条件

要求

使用的组件

规则

识别总线错误崩溃

排除总线错误崩溃故障

解决 68000 处理器平台上的总线错误崩溃

解决 RISC 处理器平台上的总线错误崩溃

总线错误崩溃的特殊类型

更多的关于总线错误异常启动环路故障排除技术

加载的Cisco IOS软件不支持已安装的硬件

软件故障

硬件装配错误

硬件故障

开立服务请求时要收集的信息

相关信息

简介

本文档说明如何识别总线错误崩溃，以及如何根据您的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系列互联网路由器上的线路卡崩溃故障排除”

如果从Cisco设备获得show context命令的输出，则可以使用Cisco CLI Analyzer显示潜在问题和修复方法。要使用思科 CLI 分析器，您必须是注册客户、已登录并已启用 JavaScript。

排除总线错误崩溃故障

第一件要做的事就是找出当总线错误发生的时候路由器试图访问的存储位置（也称为“地址”或者“地址操作数”）。利用这条信息，您就能够得到提示，判断故障到底是出在Cisco ISO软件还是路由器硬件。在示例中，“System restarted by bus error at PC 0x30EE546, address 0xBB4C4”，路由器尝试访问的内存位置为0xBB4C4。请勿将其与上面的程序计数器(PC)值混淆。

第二件需要做的事情就是确定路由器中的处理器类型。路由器的内存地址位置根据处理器和类型的不同而不同。Cisco路由器中主要有两类处理器：

- 68000处理器

以下是show version输出的一部分，该输出表示路由器具有68000处理器：

cisco 2500 (68030) processor (revision D) with 8192K/2048K bytes of memory.

带有68000处理器的路由器平台包括：

- Cisco 1000 系列路由器

- Cisco 1600 系列路由器

- Cisco 2500 系列路由器

- Cisco 4000 系列路由器

- Cisco 7000(RP)系列路由器上的路由处理器（RP）模块

- 精简指令集运算（RISC）处理器

以下是show version输出的一部分，该输出表明路由器具有RISC处理器：

cisco 3640 (R4700) processor (revision 0x00) with 49152K/16384K bytes of memory.

R（在R 4700内）指示RISC处理器。

具有RISC处理器的路由器平台包括

- 思科 3600 系列路由器

- Cisco 4500 系列路由器

- Cisco 4700 系列路由器

- 在Cisco 7500系列和Cisco 7000（RSP 7000）系列路由器上的路由交换机处理器（RSP）模块

- Cisco 7200系列路由器上的网络处理器引擎（NPE）模块

- Cisco 7600系列路由器或者Catalyst 6000交换机上的多层交换机特性卡（MSFC）

- Cisco 10000系列互联网路由器上的性能路由引擎（PRE）模块

- Cisco 12000系列互联网路由器上的千兆路由处理器（GRP）模块

一旦确认了地址和处理器类型之后，您就可以开始进行更详细的故障诊断与排除处理。

解决 68000 处理器平台上的总线错误崩溃

知道总线错误时路由器所访问的地址之后，就可以使用 show region 命令来确定地址所对应的存储器位置。如果总线错误报告的地址不在show region输出中显示的范围内，这意味着路由器尝试访问无效地址。这就表明是Cisco IOS软件的问题。使用Cisco CLI Analyzer(仅注册客户)对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-0x007FEFF的范围内。正如前面所提到的，“main”对应于主存储器或者DRAM，因而需要检查DRAM芯片。

如果是一个新的路由器，或者如果路由器被从一个位置移到另外一个位置，则存储器芯片常常会丢失。重新安装存储器芯片或者将存储器稳固地推入插槽内可能是一个较好的办法。大多数情况下，这样做就可以解决这一类型的故障。

对于总线错误崩溃且地址不在show region 地址范围内，请使用Cisco CLI分析器解码show stacks 命令的输出，并识别导致总线错误的Cisco IOS软件Bug。如果您不能确认哪个bug ID可以匹配或者哪个Cisco IOS软件版本含有针对该问题的解决方法，则将您的Cisco IOS软件升级到您的版本系列中最新的版本也是一个办法，这常常可以解决问题，因为最新版本中常常已经包括了对大量bug的修复程序。

如果从Cisco设备获得show stacks或show technical-support（从启用模式）命令的输出，则可以使用Cisco CLI Analyzer来显示潜在问题和修复方法。要使用思科 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并非一个有效的虚拟地址，从而可以判定总线错误是由于软件问题所导致。使用Cisco CLI Analyzer(仅限注册客户)对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 命令来校验总线错误崩溃所指示的地址是否在路由器所使用的地址范围内。

- 如果地址落入一个虚拟地址范围内，则根据这个范围更换硬件。

- 如果地址不在虚拟地址范围内，请使用Cisco CLI Analyzer（仅限注册客户）解码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导致的问题。

如果路由器不能够启动，则您可以跳过配置，而是不是配置导致的问题。执行下列步骤：

1. 在启动的前60秒钟向路由器发送中断序列以进入ROMMON。

2. 从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发送出去。
注意：在收集上述信息之前，请勿手动重新加载或重新启动路由器，除非对总线错误异常进行故障排除时需要这样做，因为这可能导致确定问题根本原因所需的重要信息丢失。

相关信息

- 路由器崩溃故障排除

- 多功能接口处理器系统崩溃的故障诊断及排除

- Cisco 12000 系列互联网路由器线卡崩溃故障排除

- Cisco CLI Analyzer(仅限注册客户)

- 技术支持 - Cisco Systems