// 此模板仅供参考,如果不适用可以修改
问题描述
升级riser卡的cpld到95%时失败了
环境信息
重现步骤
-
通过web升级riser卡的cpld固件S950X00-IEU(BC85PRUE)-CPLD_1.12.hpm
-
升级到95%时失败
期望结果
升级成功
实际结果
尝试过的解决方案
ac服务器
分析结论
在app日志中有
fw_upgrade.lua(176): [CPLD] i2c upgrade failed, error:…alib/unit_manager/class/logic_fw/upgrade/iic_process.lua:181: bad argument #1 to ‘sub’ (string expected, got table)
control.lua(205): Upgrade IEUCpld process failed, ret=-1
请问这种情况可能是什么原因呢
请确认以下两个点:
- 当前CPLD升级的拓扑场景是否为紫光CPLD级联场景?
- 如果是1的场景,general_hardware组件版本是否为1.100.51以上?
general_hardware组件版本较低时,不支持紫光CPLD级联场景的升级,这种情况下报错日志和提供的日志内容一致。请先尝试确认这两个点。
报错原因确实是这个场景。
咋们通过最新的bmc升级不会报错了,但是出现升级cpld版本号不更新,请问是cpld固件本身版本没有变,还是升级异常?
general_hardware ERROR: hook.lua(79): database process commit list failed: ./opt/bmc/libmc/lualib/mc/context.lua:203: ./opt/bmc/libmc/lualib/mc/signal.lua:310: ./opt/bmc/libmc/lualib/mc/orm/object.lua:591: attempt to call field ‘create_mdb_object’ (a nil value)
general_hardware NOTICE: fw_info_collector.lua(37): insert_uid [IEUCpld] 00000001040302084151 ok
firmware_mgmt NOTICE: info_mgmt.lua(220): info_key(1_IEUCpld_3173550658) upgrade set_stage: PROCESS → COMMON_FINISH, 95
上面的那个报错信息和升级无关。这边看日志升级流程应该是没问题的。建议先确认下cpld固件的版本和环境版本是否一致?
如果两者不一致的话那需要仔细看下具体流程。当时调试I2C紫光级联升级场景时,紫光cpld要求一次每次写入都要写满256字节,但是级联场景没法一次写入这么多。于是解决方案为每次写入动作先写入前128字节,然后间隔30ms,再写入后128字节(后写入的数据不包含本次写入的数据头,从而让cpld认为两次写入是同一次写入动作)。如果固件版本号和环境不一致,那就需要找硬件确认下这种写入动作和其中的延时是否有影响。