CSR调试与问题定位
更新时间:2025/10/15
在Gitcode上查看源码

前言:本篇主要从多样化的角度出发,对经常遇到的CSR相关问题或调试经验进行总结

一、基础小知识

  1. 板卡是一级一级加载的,加载的顺序可以通过position来判断,同时通过资源树后缀的postion可以判断是在哪一个CSR上的对象: 例firmware_mgmt的对象:

  2. 上一级通过Connector判断板卡的在位情况(Presence,通过SMC命令字获取),读取下一级的CSR,如下是基础板CSR上用于连接riser卡的Connector:

    "Connector_B4c": {
      "Bom": "14100513",
      "Slot": 2,
      "Position": 12,
      "Presence": "<=/Scanner_B4c.Value",
      "Id": "",
      "AuxId": "",
      "Buses": [
        "Hisport_11"
      ],
      "SystemId": 1,
      "SilkText": "CpuBoard${Slot}",
      "IdentifyMode": 3
    },

二、CSR加载相关日志打印

1、framework.log打印

在LogDump/framework.log中搜索对应连接器或CSR的uid即可查看相关打印,以扩展板为例(Connector_EXU,00000001010302057963): 这个打印的意思就是eeprom里的CSR版本format version: 1.00|data version: 1.07,BMC内置的CSR没有找到,所以最终使用eeprom里的CSR(也就是带外升级的CSR)

再来看一个例子: 这个打印的意思就是eeprom里的CSR版本format version: 3.00|data version: 3.02,BMC内置的CSR版本format version: 3.00|data version: 3.03,比较后format version相同,data version内置的比较大,最终环境上加载内置的

2、一键收集获取当前加载CSR

在AppDump/hwdiscovery中可以看到如下文件,可以看到有的文件是.bin,有的文件是.sr,这就代表对应的Connector加载的CSR是从eeprom里来的(.bin)还是内置的(.sr): 点开.sr文件,即为环境上加载的CSR: 点开.bin文件(如果是解压下来,需要把.bin后缀改为.rar),为环境上CSR的压缩包,再点开就是环境上加载的CSR: 使用VSCODE的格式为json,邮件格式化文档:

三、查看自发现分发过来的对象

如果想确定自发现分发过来的对象有没有问题,我们可以通过命令获取对应组件分发过来的对应position的对象,以general_hardware组件收到的position为010101的对象为例: busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/010101 bmc.kepler.ObjectGroup GetObjects a{ss}s 0 general_hardware

四、使用内置CSR方便调试

BMC内置的CSR存放在opt/bmc/sr里,筛选即可找到对应文件

方法:修改DataVersion比Eeprom里的大即可,注意不要修改FormatVersion,当前默认3.00为最大;文件替换后killall skynet生效