lihang111
(TTY lihang)
1
问题描述
DC cycle稳定性测试,出现一块nvme硬盘温度丢失现象,且后续一直没有恢复。
查看后台发现Scanner状态异常,导致Connector未加载,相应的Nvme对象没有创建。
直接访问Chip,是正常的;用Scanner访问,会报错(看错误描述是打开通道失败):
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/sd_bus/object.lua:990: bus: I2c_6, chip: Pca9545_i2c6_E2_5_E4_0101 open channel(5) failed, error: ./opt/bmc/apps/hwproxy/lualib/chip.lua:657: ./opt/bmc/apps/hwproxy/lualib/stream/i2c.lua:120: response error, i2c write fail, ret: 5, input:{“addrWidth”:1,“addr”:228,“is_trace”:false,“has_error”:false,“offset”:0,“name”:“Pca9545_i2c6_E2_5_E4_0101”,“len”:1,“offsetWidth”:0,“type”:1,“rw_type”:0,“requestor”:“bmc.kepler.hwproxy”,“buffer”:"20 ",“mask”:255}[times:3]
CSR配置如下:
环境信息
openUBMC 2512 SP1版本
hwproxy/1.110.0@openubmc/stable#eacdf0c7950e3a3af3bf25a249beb756%1769571447.712
hwdiscovery/1.100.11@openubmc/stable#b5d8c822cd96d23d589cc5f6f18f3a26%1768459019.306
答案内容由AI生成,仅供参考:
三、结论与建议
结论:本次问题最可能的根因是 CSR配置文件中的I2cMux通道号(ChannelId)配置错误,或者是由 DC cycle测试引发的初始化时序/对象残留问题。
建议排查步骤:
-
重点审查CSR配置:
- 检查您提供的CSR中,Pca9545对象下所有
I2cMux子对象的ChannelId属性。确保其值严格在 0 到 3 之间,尤其是在报错的I2c_6总线上。
- 对比报错日志中的
channel(5),确认是否有通道号被错误地写为 4 或 5,或是否存在配置与硬件原理图不符的情况。
-
检查对象初始化流程:
- 参照 《Nvme盘加载调速失败问题分析》 的处理逻辑,检查Pca9545对象及其通道对象(
I2cMux)的析构函数(dtor())。确认在对象卸载时,是否已正确释放或关闭了已打开的I2C通道,以避免残留。
-
硬件与底层驱动验证:
- 使用
I2C Scanner and Reader Tool 手动在I2c_6总线上执行通道切换操作。验证能否正常切换并读写Pca9545后的设备,以排除硬件链路间歇性问题。
- (可选) 联系硬件团队,确认NVMe背板的CPLD版本是否满足该硬件版本的需求。文档 《V3 上适配nvme盘个人总结》 提到,CPLD版本过旧可能导致Chip通信失败。更新CPLD固件可能解决问题。
-
优化系统鲁棒性:
- 建议在
Scanner初始化逻辑中增加防抖处理或重试机制,避免因一次瞬态错误就永久放弃加载对象。
- 参考 《器件资源协作接口新增属性器件访问状态》 方案,为Pca9545等中继器件添加硬件访问状态监控属性。这可以帮助在故障时更精确地定位是末端硬盘问题,还是中间链路(如Pca9545)的问题。
点击此处查看详细分析解答
好的,根据您提供的问题描述和系统上下文信息,我对“Scanner打开9548通道失败”导致NVMe硬盘温度丢失的问题进行了综合分析。
该问题的核心是:在DC cycle测试后,Scanner对象因无法成功打开Pca9545多路复用器的通道而创建失败,进而导致NVMe温度传感器对象缺失,最终表现为硬盘温度丢失。
以下是对该问题的详细分析、可能原因及建议。
一、问题根因分析
根据您提供的日志和上下文,问题的直接触发点是:
bus: I2c_6, chip: Pca9545_i2c6_E2_5_E4_0101 open channel(5) failed
结合知识库中的信息,分析如下:
-
通道号配置错误是最大嫌疑:
- 知识库文档 《扩展板CSR配置指导书》 和 《IEU CSR配置指导书》 均明确指出:Pca9545 的通道配置建议是
0-3,不允许配置 1-4。
- 报错日志中尝试打开的是 channel(5),这明显超出了Pca9545的有效通道范围(0-3)。这是导致Scanner访问失败最直接、最可能的原因。
- 因此,首要排查点在于您提供的CSR配置中,
I2cMux 对象下的 ChannelId 属性是否被错误地配置为 5 或 4(某些系统内部映射可能导致偏移)。
-
初始化时序或对象残留问题:
- 文档 《Nvme盘加载调速失败问题分析》 描述了一个非常类似的场景:NVMe盘拔出时,与VPD Connect对象关联的定时任务未被正确停止(
dtor()中缺少停止任务的代码)。当同一槽位重新插入硬盘时,旧任务残留,导致同名任务创建失败,从而使调速策略无法加载。
- 您的场景中,DC cycle测试可能导致系统状态在断电上电过程中出现异常。如果前一次运行中,Scanner或Pca9545对象的析构函数未能正确清理其与I2C通道的上下文(例如,未释放通道锁定),那么在下一次上电时,新的Scanner初始化可能会因为与残留的、未释放的通道状态冲突而失败。
-
硬件链路瞬态或配置漂移:
- 知识库案例 《Scanner加载失败》 中提到,I2C读失败(
i2c read fail, ret: 5)通常与硬件链路相关,如对端设备不存在或链路不通。但用户反馈“重启就恢复了”,排除了永久性硬件故障。
- 在DC cycle这种反复上下电的测试中,可能存在以下瞬态问题:
- 电源时序问题:NVMe盘与BMC的供电顺序不一致,导致BMC尝试访问I2C设备时,NVMe盘或其背板上的Pca9545尚未完全上电初始化。
- I2C总线锁死:在频繁断电过程中,I2C总线(本例为I2c_6)可能会陷入错误状态,需要一次干净的复位才能恢复。您的日志显示直接访问Chip正常但通过Scanner访问失败,这符合总线锁死或通道切换逻辑出错的典型表现。
- 硬件故障:虽然“重启恢复”降低了概率,但不能完全排除Pca9545器件本身或I2C链路上有虚焊、接触不良等间歇性故障,在特定电压或温度条件下才触发。
二、与上下文信息的关联
c_nvme 对象与 Chip_Temp:知识库指出 c_nvme 通过 Chip_Temp 监控温度。您的场景中,Scanner因打不开Pca9545通道而失败,导致Chip_Temp(即 Scanner_Temp)对象无法创建,最终c_nvme对象因缺少依赖的温度传感器而无法生成,温度数据丢失。
Board_Name_OpenUBMC 和 BMC.BMCAccessI2CDeviceFailure:此问题发生在OpenUBMC平台上,是一个典型的I2C设备访问失败的案例(BMC.BMCAccessI2CDeviceFailure事件)。这与知识库中描述的该事件类型完全吻合。
Disk6 和 Event_NVMeTempHighMinor:虽然您的场景是温度丢失(低温),但知识库中记录了Disk6存在高温事件(Event_NVMeTempHighMinor)。这体现了温度监控的双向性(高温报警/低温丢失),其底层原因都可能与Scanner_Temp对象加载失败有关。
三、结论与建议
结论:本次问题最可能的根因是 CSR配置文件中的I2cMux通道号(ChannelId)配置错误,或者是由 DC cycle测试引发的初始化时序/对象残留问题。
建议排查步骤:
-
重点审查CSR配置:
- 检查您提供的CSR中,Pca9545对象下所有
I2cMux子对象的ChannelId属性。确保其值严格在 0 到 3 之间,尤其是在报错的I2c_6总线上。
- 对比报错日志中的
channel(5),确认是否有通道号被错误地写为 4 或 5,或是否存在配置与硬件原理图不符的情况。
-
检查对象初始化流程:
- 参照 《Nvme盘加载调速失败问题分析》 的处理逻辑,检查Pca9545对象及其通道对象(
I2cMux)的析构函数(dtor())。确认在对象卸载时,是否已正确释放或关闭了已打开的I2C通道,以避免残留。
-
硬件与底层驱动验证:
- 使用
I2C Scanner and Reader Tool 手动在I2c_6总线上执行通道切换操作。验证能否正常切换并读写Pca9545后的设备,以排除硬件链路间歇性问题。
- (可选) 联系硬件团队,确认NVMe背板的CPLD版本是否满足该硬件版本的需求。文档 《V3 上适配nvme盘个人总结》 提到,CPLD版本过旧可能导致Chip通信失败。更新CPLD固件可能解决问题。
-
优化系统鲁棒性:
- 建议在
Scanner初始化逻辑中增加防抖处理或重试机制,避免因一次瞬态错误就永久放弃加载对象。
- 参考 《器件资源协作接口新增属性器件访问状态》 方案,为Pca9545等中继器件添加硬件访问状态监控属性。这可以帮助在故障时更精确地定位是末端硬盘问题,还是中间链路(如Pca9545)的问题。