- 等长修改,打印正常
- 缩短长度,打印也正常
- 增加长度,print打印乱码
答案内容由AI生成,仅供参考:
fru print 显示乱码的问题分析与解决方案在对 FRU(Field Replaceable Unit) 的 Board Extra 字段进行修改时,用户发现当增加字段长度后,使用 ipmitool fru print 命令读取 FRU 信息会出现乱码或“Device not present”错误。而等长或缩短字段时则正常。以下结合知识库中的信息对该问题进行全面分析并提供解决方案。
| 操作类型 | 修改内容示例 | 结果 |
|---|---|---|
| 等长修改 | OPN:0302Y710 → OPN:0302Y710 |
|
| 缩短长度 | OPN:0302Y710 → OPN:0302Y |
|
| 增加长度 | OPN:0302Y702 → OPN:0302Y0345653 |
fru print 显示乱码,部分字段损坏 |
从日志可见,在修改较长字符串时系统提示:
String size are not equal, resizing fru to fit new string
...
Moving Section Product, from 0 to 8
...
Writing new FRU. Done.
尽管写入成功,但后续读取失败或数据异常。
根据知识库内容:
2048 bytes),存储于 EEPROM 中。resizing fru 流程,重新调整各段(Section)的位置和填充(Padding)。来自知识图谱:
Fru Edit是用于修改 Board Extra 字段的命令行工具,当修改 OPN、OSN、PCBA Ver 等字段时,若新旧字符串长度不同,需要对整个 FRU data 进行重排(resize)和重新计算校验和。
在长度增加的日志中可以看到:
Moving Section Product, from 0 to 8
Change multi offset from 0 to 1
Moving Remaining Bytes (Multi-Rec, etc.), from 0 to 8
这说明:
5930333435...),实为 ASCII 编码后的原始字节错译。示例:
5930333435363533对应 ASCII 字符为"Y0345653",正好是OPN:0302Y0345653的一部分 —— 表明数据被当作字节流错位解析。
文档中相关日志显示:
emit properties changed failed, path: /bmc/kepler/System/FrUDatas/FruData FanBoard_010114,
interface: bmc.kepler.Systems.FruData.Board,
err: D-Bus error: append string type utf-8 validate failed
这意味着:
根据知识图谱和文档:
Board Extra 包含多个键值对,常见字段包括:
OPN(Original Product Number):订单产品编号OSN(Original Serial Number):原始序列号PCBA Ver:PCB 装配版本这些字段通常以 Key=Value 形式存储在扩展区域,属于非标准字段,其长度变化会影响整个 Board Info Area 的布局。
由于 fru edit 在长度不匹配时会触发复杂的数据重排流程,极易出错,因此应尽量:
确保新值长度 ≤ 原字段预留长度
例如:
# 原字段为 OPN:0302Y702 (共12字符)
# 修改为相同长度:
ipmitool fru edit 6 field b 5 OPN:0302Y710 # ✅ 安全
# 避免超出原长:
ipmitool fru edit 6 field b 5 OPN:0302Y0345653 # ❌ 易引发乱码
OPN:0302Y702__________(下划线表示空格或空白填充);导出完整 FRU bin 文件
ipmitool fru read 6 fru_6_org.bin
使用专用工具(如 fwupdate, fru-editor)离线修改 Board Extra 字段
整体写入 FRU
ipmitool fru write 6 fru_6_modified.bin
优势:避免在线 Resize 引发的偏移错误,更安全可靠。
根据知识图谱中提到的配置项:
BMCSet_FRUBoardExInfoPcbVer:控制是否自动附加 PCB 版本号;BMCSet_CustomPsuFruProductVersion:控制 Product Version 显示内容;建议检查 BMC 固件中是否有类似机制影响 Board Extra 处理逻辑,必要时关闭自动注入功能,避免字段冲突。
若遇到 D-Bus 报错:
append string type utf-8 validate failed
请尝试以下操作:
重启 FRU 服务:
systemctl restart frudata
或手动触发属性刷新:
busctl call bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru0_010104 \
bmc.kepler.Object.Properties Update ssa{ss} \
"bmc.kepler.Systems.FruData.Board" 1 "MfgDate" "2025/04/05 Fri 10:00:00"
查看当前接口状态:
busctl introspect bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru0_010104
# 示例:修改 Board Manufacturer(通过 D-Bus)
busctl set-property bmc.kepler.frudata \
/bmc/kepler/Systems/1/FruDatas/FruData_Fru0_010104 \
bmc.kepler.Systems.FruData.Board BoardManufacturer s "Huawei"
# 修改 Board Serial Number
busctl set-property bmc.kepler.frudata \
/bmc/kepler/Systems/1/FruDatas/FruData_Fru0_010104 \
bmc.kepler.Systems.FruData.Board BoardSerialNumber s "SN123456789"
优点:自动处理编码、校验、信号通知,规避底层结构风险。
| 项目 | 内容 |
|---|---|
修改 Board Extra 字段时长度变化触发 FRU resize,导致 Section 偏移错乱,后续数据被误读为十六进制乱码 |
|
OPN, OSN, PCBA Ver 属于 Board Extra,修改需谨慎 |
|
| 保持字段等长修改,或离线整体修改 FRU 文件后烧录 | |
直接使用 ipmitool fru edit 增加长字符串,易导致结构错乱 |
|
检查 D-Bus 接口状态,重启 frudata 服务,使用 busctl 安全修改 |
结论:等长修改安全,增减长度需格外小心!建议提前规划字段长度,采用离线编辑或 D-Bus 接口方式更稳妥。
参考资料来源:
Fru Edit, Board Extra, bmc.kepler.Systems.FruData.Boardkunlun_yajingtian 提交的乱码问题及日志相关链接:
您好,FRU写入可能存在偏移错位问题,建议保持字段等长修改,具体根因进一步定位中
请问有进展了吗
zhangbaocun1@huawei.com 请发一键收集到这个邮箱
请问有进展了吗
已提单跟踪
你好 你这个环境是否还保留着的吗
目前看日志是你在写入时校验到了非法字符
当前日志看不出具体的错误字段
如果问题还保留着
对其他域的扩展域尝试 “”增加长度” 的修改,查看是否报错
分析:
缩短和等长的修改不会触发结构偏移等的修改
所以需要排查这个非法字符是bug产生的还是原有自带的
ipmi.txt (30.5 KB)
frudiskChaos.txt (2 KB)
fanboard.txt (120 字节)
frufanChaos2.txt (2 KB)
frufanChaos.txt (2 KB)
fruDiskNormal.txt (2 KB)
收到
你好!这个链接的信息可能对你解决本问题有所帮助,请参考,谢谢!