前言:本篇主要从多样化的角度出发,对经常遇到的CSR相关问题或调试经验进行总结
一、基础小知识
板卡是一级一级加载的,加载的顺序可以通过position来判断,同时通过资源树后缀的postion可以判断是在哪一个CSR上的对象: 例firmware_mgmt的对象:
上一级通过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生效