版本:2509
当前BMC直出I2C,直连NVME,没有SMC命令字去扫描,应该是怎么样的适配流程呢,有没有直出sr的适配参考
版本:2509
当前BMC直出I2C,直连NVME,没有SMC命令字去扫描,应该是怎么样的适配流程呢,有没有直出sr的适配参考
答案内容由AI生成,仅供参考:
结论:
尽管未使用SMC命令字,仍可通过标准SR配置 + I2C直连 + NVMe-MI协议完成NVMe适配。重点在于准确的SR文件配置和I2C通信调试。可参考已有14140224_PROTOCOL_0.sr模板进行移植。如需长期兼容性与可维护性,建议后续引入SMC统一接口。
在当前场景中,BMC通过I2C总线直接连接NVMe设备,且不经过SMC(System Management Controller)或CPLD转发,也没有使用SMC命令字进行通信。这属于一种简化或特殊设计的硬件拓扑结构,常见于某些定制化或轻量级服务器架构中。
您提到的版本为2509(可能指OpenUBMC 25.09),结合上下文和可用知识库内容,以下是对该场景下适配流程的完整解析与建议。
在这种架构中:
注意:标准“天池架构”中普遍采用SMC作为统一接口,地址为
0x60,用于管理扩展板、风扇、电源等。但在此场景中,SMC被绕过,属于非标准设计或特定模组定制。
虽然未使用SMC,但在openUBMC系统中仍需完成硬件发现、对象建树、属性采集等流程。以下是适配的关键步骤:
确保以下信息明确:
I2c_4)0x50 用于VPD EEPROM,0x3c 用于NVMe-MI管理){
"Chip": "Eeprom_NVMe0",
"Type": "EEPROM",
"Bus": "I2c_4",
"Address": "0x50"
}
*.sr)SR(System Resource)文件是openUBMC中描述硬件拓扑的核心配置文件,必须为每个NVMe设备创建对应的SR文件。
[Id]_[AuxId].sr
例如:14140224_0.sr → 对应某NVMe背板或模组
{
"Connector_NVMe0": {
"Type": "NVMe",
"Bom": "14140224",
"Id": "NVMe0",
"AuxId": "0",
"IdentifyMode": 3,
"Buses": [
{ "Name": "I2c", "BusId": "I2c_4" }
],
"Chips": [
{
"Name": "Chip_VPD",
"Type": "Eeprom",
"Bus": "I2c_4",
"Address": 80,
"Offset": 0,
"Size": 256
},
{
"Name": "Chip_NVMeMI",
"Type": "SMBusChip",
"Bus": "I2c_4",
"Address": 60,
"Protocol": "NVMe-MI"
}
]
}
}
来源依据:
- 文档 #7《V3 上适配nvme盘个人总结》中提到:“框架会根据Bom、Id和AuxId进一步加载”
- 文档 #8《扩展板CSR配置指导书》指出EEPROM地址为
0xAE(读地址0xAF)为标准,但实际可根据硬件调整
NVMe设备的管理信息(如温度、健康状态、固件版本)通过 NVMe-MI over I2C/SMBus 获取。
0x0a读取SMART信息)busctl手动调试):# 读取NVMe设备SMART数据(假设Chip路径已定义)
busctl --user call \
bmc.kepler.hwproxy \
/bmc/kepler/Chip/SmbusChip/Chip_NVMeMI_0 \
bmc.kepler.Chip.BlockIO Read a{ss}uu 0 10 1
参考来源:
- 文档 #7 提到:“mdbctl读取固件版本时出现链路不通” → 表明可通过
mdbctl或busctl工具直接调试- KM关系:
NVMe-MI Protocol依赖于SMBus/I2C Subsection
由于未使用SMC命令字,以下功能需通过其他方式实现:
| 功能 | 替代方案 |
|---|---|
| 设备发现 | 依赖SR文件中的Bom/Id/AuxId自发现机制 |
| 状态监控 | 直接通过I2C读取NVMe-MI寄存器 |
| LED控制 | 若支持I2C控制LED,需单独定义GPIO或I2C命令;否则不可控 |
| 故障上报 | 由storage组件定期轮询并触发SEL/Redfish事件 |
提示:
若未来需兼容天池架构,建议后续引入一个中间CPLD/SMC芯片,统一管理多块NVMe,提升扩展性。
# 扫描I2c_4总线上的设备
i2cdetect -y 4
预期输出应显示NVMe相关设备地址(如0x50, 0x3c等)
# 使用busctl读取EEPROM数据
busctl --user call \
bmc.kepler.hwproxy \
/bmc/kepler/Chip/Eeprom/Eeprom_NVMe0_VPD \
bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 32
busctl --user tree bmc.kepler.storage
检查是否有Drive、NVMe等对象生成。
有参考案例,但多基于背板形式,可借鉴其结构:
14140224_PROTOCOL_0.srChip_Virtual_SSD、Chip_SSD、Chip_Temp等对象,适用于直连场景。VPDChip读取失败问题也表明该场景已在社区存在适配实践。
建议做法:
可复制此SR模板,修改Bus、Address、Bom等字段适配您的硬件。
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| I2C总线挂死 | 从设备未正确响应 | 检查电源、地址、上拉电阻 |
| VPD读取失败 | 地址错误或EEPROM损坏 | 用i2cdump验证 |
| 温度/固件版本无法获取 | NVMe-MI协议不兼容 | 确认命令字和偏移 |
| 无法识别NVMe盘 | SR配置错误或IdentifyMode不匹配 | 检查Bom/Id/AuxId |
| 无LED控制能力 | 无SMC/CPLD介入 | 添加GPIO控制或放弃 |
1. 确认硬件连接 → I2C总线 + 地址
↓
2. 编写SR文件(.sr)→ 定义Connector与Chip
↓
3. 配置Chips类型 → Eeprom(VPD)、SMBusChip(NVMe-MI)
↓
4. 加载SR并重启BMC或触发发现
↓
5. 使用busctl/i2cdetect验证通信
↓
6. storage组件自动采集数据并上树
↓
7. Redfish/IPMI暴露NVMe信息
若您计划长期维护该方案,建议补充以下文档:
结论:
尽管未使用SMC命令字,仍可通过标准SR配置 + I2C直连 + NVMe-MI协议完成NVMe适配。重点在于准确的SR文件配置和I2C通信调试。可参考已有14140224_PROTOCOL_0.sr模板进行移植。如需长期兼容性与可维护性,建议后续引入SMC统一接口。