BIOS入门基础------Linux问题定位特殊方法

       前面介绍了一些Linux内核的查看,下载源码,以及编译内核之类的,这里说下作为BIOS工程师,可能会用到的Linux挂死问题定位技巧。

     就是那种OS已经挂死,但是又没有串口日志,可能屏幕还是黑的,你又不敢重启(毕竟重启有极大概率会破坏环境,导致问题不复现)的情况。对于OS工程师而言,可能除了重启没啥办法了,但是对于BIOS工程师而言,还是有方法的。因为我们有ITP(也叫做XDP、PDT,就是Intel Platform Debug Toolkit,俗称“蓝盒子”)。

      具体步骤如下:

(1)找另外一台机器,安装和故障机台相同的系统(只要系统相同即可);

(2)进入系统下的命令行,输入“cd  /boot”,在boot目录下输入ls命令;

(3)找到System.map文件(不同系统,文件名后缀可能不一样,以Redhat7.0为例,就是System.map-3.10.0-123.el7.x86_64)

(4)通过cat命令查看该文件,在文件中查找“_log_buf”的地址,如下所示,可见OS log记录的起始地址就是0xffffffff81c1913c,然后通过下一个模块计算出log的长度(下面这个例子中就是clear_idx的地址减去_log_buf的地址),以下面这个为例,长度就是0x8000,由于启动过程中外设和其他因素的影响,log的长度大小会有变化,但同一系统的起始地址不变(有兴趣的同学可以看下Linux源码,里面有定义的)。

   ffffffff81c19138 b boot_delay

   ffffffff81c1913c b _log_buf

   ffffffff81c9913c b clear_idx

(5)找到_log_buf的地址之后,可以连接ITP工具,打开Cscripts脚本,将CPU hang住(halt命令);

(6)之后输入log("20180322.log")      //里面是文件名,名称可以随便取,主要是为了保存之后dump的日志信息;

(7)输入命令itp.threads[0].memdump("0xffffffff81c1913c","0x20000",1)        //第一个参数是_log_buf的起始地址,第二个参数是log文件的大小(可自行调整),第三个参数默认为1(不用修改)

       这种方法定位问题,本质上是利用ITP工具从内存中dump出log日志信息,主要针对启动过程中系统意外挂死,但是又缺少日志信息,不能重启的情形。

你可能感兴趣的:(OS,IT,BIOS,Linux,debug)