通过自定义Eeprom格式进行厂商板卡加载 - 交流互助区 - openUBMC 论坛
如之前的话题所讲,新增板卡需要确认FRU的格式。用我们自己的格式会比较麻烦,解析FRU内容会比框架加载板卡晚的多,导致板卡可能加载失败。
目前想的是通过软件打包sr文件,然后Eeprom头还是按天池标准来,那样即使不将sr文件保存在硬件上,也可以通过软件的方式加载,不影响加载流程。
然后之前SR出包生成HPM包的,只有天池头以及sr的部分。在bingo代码仓看了下也没有生成Elabel相关的内容。想确认这部分是否有工具提供?比如输入Product域的某些字段、UID等信息,然后生成.bin文件。这个之前了解到硬件领域应该是有的。
答案内容由AI生成,仅供参考:
四、总结与建议
| 问题 | 结论 | 建议 |
|---|---|---|
| 自定义EEPROM格式是否可靠? | 否,存在加载时序问题 | 不推荐用于生产环境 |
| 是否可软件打包SR文件? | 是 | 使用bingo build集成SR到HPM |
| 是否支持“天池”标准头? | 是 | 设置StorageType="TianChi" |
| 是否有工具生成Elabel.bin? | 无独立工具,但可通过CSR+构建链生成 | 使用BMC Studio或手动编写CSR模板 |
点击此处查看详细分析解答
关于通过自定义EEPROM格式进行厂商板卡加载的问题分析与解答
根据您提出的问题,核心诉求是:在不修改硬件EEPROM格式的前提下,实现新增板卡的可靠识别与加载。您希望通过软件方式打包SR(Configuration and Service Record)文件,并沿用“天池”标准的EEPROM头部结构,从而避免因自定义FRU解析延迟导致的板卡加载失败问题。
以下将结合知识库中的实体、关系及文档内容,系统性地为您解答此问题。
一、问题背景与挑战
1. 自定义EEPROM格式的局限性
- 如[文档参考5]所示,某些厂商采用自定义编码方式存储板卡信息(如CDR偏移、域内偏移等),通过特定偏移位置读取8字节编码来识别SR对象。
- 这种方式存在以下问题:
- Accessor/Scanner不支持动态Offset:目前框架中
Accessor_PcbID等组件的读取地址为静态配置,无法动态变更。 - 类型转换限制:
Accessor的值类型为无符号整数,需组件自行转换为字符串,直接强转失败可能导致加载异常。 - Presence与ID获取时序问题:可能出现板卡已上电(Presence检测到),但ID尚未读取完成,导致Connector对象创建失败或加载失败。
- Accessor/Scanner不支持动态Offset:目前框架中
结论:依赖自定义EEPROM格式进行识别,存在加载时序风险,易引发稳定性问题。
二、解决方案分析:沿用“天池”标准 + 软件打包SR
您提出的思路非常合理:保持EEPROM头部遵循“天池”标准格式,通过软件方式生成并注入SR数据。这样可以确保BMC系统在启动初期即可正确识别板卡,避免因自定义解析逻辑过晚执行而导致的加载失败。
1. “天池”标准EEPROM结构说明
根据知识图谱和文档中的多处描述:
- 当
StorageType="TianChi"时,EEPROM前100字节为“天池头”,从第101字节开始才是标准FRU数据。 - 天池头包含关键字段如:
- Board ID(
BoardId) - UID(Unique Identifier)
- Product Name、Serial Number等
- Board ID(
- 此结构被openUBMC框架原生支持,在系统初始化阶段由
frudata服务自动解析。
优势:使用标准天池头,可保证BMC在
硬件自发现阶段即能正确枚举并加载板卡。
2. 软件打包SR文件的可行性
您希望将SR文件通过软件方式打包进HPM固件,而非烧录到硬件EEPROM中。这一方案完全可行,且已被openUBMC生态广泛支持。
(1)SR文件的构建与集成流程
- SR文件通常以
.sr为后缀,存储于/opt/bmc/sr/目录下。 - 构建过程中,SR文件会被包含在
rootfs_openUBMC.hpm固件包中。 - 如[文档参考1]所示,用户可通过
bingo build流程将自定义SR文件编译进镜像:./temp/build_openUBMC_debug_dev/conan_install/vpd/opt/bmc/sr/14100513_00000001020302071127.sr - 构建完成后,HPM包内已包含所有SR文件,无需额外烧写。
(2)工具链支持情况
openUBMC提供了完整的SR出包与签名工具链:
- BMC Studio 工具支持“CSR出包”功能(见[搜索结果4、8]),可生成包含SR数据的HPM包。
- 支持格式包括:HPM、二进制bin、JSON文件。
- 可上传OEM定制信息(.bin或.ini格式,≤4KB),用于补充Product域字段。
结论:已有工具支持SR文件的打包与HPM生成,无需手动拼接二进制文件。
三、关于生成含Elabel信息的.bin文件的工具支持
您提到:“想确认是否有工具可以输入Product域字段、UID等信息,生成包含Elabel的.bin文件?”
1. Elabel与EEPROM的关系
Chip_Dmini_Elabel是一个EEPROM标签文件,用于存储NPUCard_1的识别与配置数据。- 它通过I2C接口挂载,支持读写操作(WriteRetryTimes=2,ReadRetryTimes=216)。
- 其数据来源于
FruData_NPUCard,并与CSR文件关联。
2. 是否有现成工具生成Elabel格式的.bin?
虽然openUBMC本身未提供独立的“Elabel生成器”工具,但可通过以下方式实现:
推荐方案:使用Conan + CSR模板机制
- 在
vpd组件中配置board_name=openUBMC(见KG关系)。 - 利用
conan lock create命令指定构建参数,注入BoardId、Product Name等:conan lock create . -pr=profile.luajit.ini -o vpd/:board_name=openUBMC -o help/:board_name=openUBMC - 在CSR(Control & Status Register)文件中定义
Fru_PCIeCard或Fru_NPUCard对象,明确指定:{ "FruData_NPUCard": { "FruId": "NPUCard_1", "BoardProductName": "Atlas 300I Pro", "BoardSerialNumber": "KS007910N802000002", "BoardId": 175, "StorageType": "TianChi" } } - 构建系统会自动根据CSR生成对应的SR文件,并打包进HPM。
替代方案:脚本化生成Elabel头 + SR数据
若需手动合成完整EEPROM镜像,可编写Python脚本实现:
# 示例:生成带天池头的EEPROM镜像
header = bytes([0x70, 0x82, 0x00, 0x00]) + b"TianChi Header..." # 天池头100字节
fru_data = open("fru.bin", "rb").read() # 标准FRU数据
sr_data = open("my_card.sr", "rb").read() # SR记录
with open("output.elabel.bin", "wb") as f:
f.write(header)
f.write(fru_data)
f.write(sr_data)
建议:优先使用CSR+HPM构建机制,避免手动操作二进制文件。
四、总结与建议
| 问题 | 结论 | 建议 |
|---|---|---|
| 自定义EEPROM格式是否可靠? | 否,存在加载时序问题 | 不推荐用于生产环境 |
| 是否可软件打包SR文件? | 是 | 使用bingo build集成SR到HPM |
| 是否支持“天池”标准头? | 是 | 设置StorageType="TianChi" |
| 是否有工具生成Elabel.bin? | 无独立工具,但可通过CSR+构建链生成 | 使用BMC Studio或手动编写CSR模板 |
五、参考资源链接
如需进一步协助生成CSR模板或调试加载流程,建议在OpenUBMC Discuss Forum发布具体案例,社区开发者(如FrankLiu0007、Larry_Li等)可提供针对性支持。
网络上有开源的生成fru.bin的工具,比如 GitHub - genotrance/fru-tool:fru-tool 是一个用于生成 IPMI FRU 二进制数据文件的命令行工具 ·GitHub。
不过这样生成的fru.bin自然是不包含天池头的,需要手动或者写脚本把天池头打进去。
有个疑问,后续应该还要重新刷写FRU信息吗(比如制造时间,序列号之类的)?为什么要在出.bin文件中直接加入这部分信息呢?
生产加工的时候要写一些信息进去,如果卡不是固定的,需要用FRU信息进行识别的。识别到以后BMC进行管理了,可以再通过其它方式继续写信息。
我的理解是,天池头就已经包含了UID,只要eeprom中有天池头+csr中版本号,就能加载上来,然后BMC可以接管控制写入。不过当前天池架构感觉对生产没那么友好,每一个板卡需要单独刷新(部分板卡依赖其他板卡上来),比之前更新要多很多步骤
嗯,那也可以。有UID刷进去然后也能通过天池的方式加载识别。