总线超时导致的bus hang 相关问题介绍

1、前提背景:

在一些嵌入式机器的系统运行过程中,时常会发生一些bus hang的问题,直接导致的后果是系统卡住或者触发重启,最终整体系统运行异常。

2、什么是bus hang:

简单说,就是系统的某个模块已经停止关闭了工作(关闭了power or clock),但是此时其他模块或者代码还继续对此模块的寄存器进行操作(读or写),由于无法对关闭的模块进行读写,此时在这块进行耗时操作,导致总线超时。

3、分析问题:

针对于此类问题的分析,首先需要对问题进行确认是不是发生了bus hang,不管是拿到系统的trcace,db,log,或者有效的解析信息后,需要确认涉及到上次cpu的 log中是否有异常的地址在被读取,然后再针对于此地址进行详细分析。

eg:针对于如下cpu log:

read = 0 , vaild = 0x0,tid = 0x1 , read id = 0x111, address =0x11111234,data = 0x01, length = 0x0

read = 1 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

read = 2 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

read = 3 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 0 , vaild = 0x0,tid = 0x0 , read id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 1 , vaild = 0x0,tid = 0x2 , wrtie id = 0x222, address =0x22221234,data = 0x2, length = 0x0

write = 2 , vaild = 0x0,tid = 0x0 , wrtie id = 0x0, address =0x0,data = 0x0, length = 0x0

write = 3 , vaild = 0x0,tid = 0x0 , wrtie id = 0x0, address =0x0,data = 0x0, length = 0x0

从上述就可以看到address =0x11111234,address =0x22221234 这两个地址分别在进行读写寄存器的时候发生了bus hang .

4、解决问题:

发生bus hang ,一般两种运行,一个是代码出现问题(栈被踩坏),第二就是硬件不良。

代码问题需要通过对应的寄存器问题去通过机器的固件文件进行分析,有些需要fdt文件,有些需要so等库,然后结合读写的地址进行代码分析。硬件不良需要确认是涉及那个module ,以及分析是否还受其它硬件影响进行分析。

你可能感兴趣的:(android,android,系统架构,bus,hang,cpu)