在线升级CPU模组CPLD失败 lchown on file failed

问题描述

模组升级的链路切换smc命令已实现并且在sr文件中已经配置
下面是在线升级CPU模组CPLD失败时hard_ware的相关日志

    行 6038: 2026-05-22 02:06:49.959504 general_hardware NOTICE: fw_upgrade.lua(118): [cpld]get cpld_valid :nil
    行 6039: 2026-05-22 02:06:49.959796 general_hardware NOTICE: fw_upgrade.lua(53): cpld cold upgrade, upgrade list = 1,
    行 6040: 2026-05-22 02:06:49.960707 general_hardware NOTICE: fw_cfgs.lua(70): check fw uid(00000001020302041496) id(255) id_ex(4294967295) exist success
    行 6041: 2026-05-22 02:06:50.238725 general_hardware NOTICE: fw_init.lua(163): get fw version 1.01
    行 6042: 2026-05-22 02:06:50.239136 general_hardware NOTICE: fw_upgrade.lua(95): [cpld]get verion[1.01]
    行 6050: 2026-05-22 02:06:51.492025 general_hardware NOTICE: upgrade_subject.lua(88): [on_upgrade_process] start upgrade BP_Cpld
    行 6051: 2026-05-22 02:06:51.492507 general_hardware NOTICE: signal.lua(121): [cpld]Start the system[1] BP_Cpld upgrade process phase
    行 6052: 2026-05-22 02:06:51.600302 general_hardware NOTICE: upgrade_subject.lua(95): [on_upgrade_process] end upgrade BP_Cpld
    行 6053: 2026-05-22 02:06:51.601485 general_hardware NOTICE: fw_cfgs.lua(70): check fw uid(00000001020302041496) id(255) id_ex(4294967295) exist success
    行 6054: 2026-05-22 02:06:51.602082 general_hardware NOTICE: process.lua(38): cpld fw matched, system_id = 1, fw.uid = 00000001020302041496, fw.csr.Name = BCU_CPLD1
    行 6055: 2026-05-22 02:06:51.684125 hardware ERROR: tar.c(664): __extract_file: lchown on file(cpld01.vme) failed!
    行 6056: 2026-05-22 02:06:51.684776 hardware ERROR: tar.c(664): __extract_file: lchown on file(valid01.vme) failed!
    行 6057: 2026-05-22 02:06:51.700066 hardware ERROR: tar.c(664): __extract_file: lchown on file(cpld02.vme) failed!
    行 6058: 2026-05-22 02:06:51.700939 hardware ERROR: tar.c(664): __extract_file: lchown on file(valid02.vme) failed!
    行 6059: 2026-05-22 02:06:51.715778 hardware ERROR: tar.c(664): __extract_file: lchown on file(cpld03.vme) failed!
    行 6060: 2026-05-22 02:06:51.716730 hardware ERROR: tar.c(664): __extract_file: lchown on file(valid03.vme) failed!
    行 6061: 2026-05-22 02:06:51.717532 general_hardware NOTICE: process.lua(295): [cpld]get cpld packages successful
    行 6062: 2026-05-22 02:06:55.311901 general_hardware NOTICE: process.lua(201): [cpld]_____load_cpld_multi_supplier_mode_____
    行 6067: 2026-05-22 02:07:06.451722 general_hardware NOTICE: process.lua(179): [cpld]get cpld device info failed
    行 6093: 2026-05-22 02:07:40.044559 general_hardware NOTICE: unit_manager.lua(615): unit_manager:on_dump_cb start.
    行 6094: 2026-05-22 02:07:40.250019 general_hardware NOTICE: unit.lua(486): CpuBoard1 collect finish
    行 6095: 2026-05-22 02:07:40.437649 general_hardware ERROR: unit.lua(462): SMC read (get dfx info) fail
    行 6096: 2026-05-22 02:07:40.439319 general_hardware ERROR: unit.lua(478): ExpBoard1 get_dfx_info fail
    行 6097: 2026-05-22 02:07:40.897659 general_hardware ERROR: unit.lua(462): SMC read (get dfx info) fail
    行 6098: 2026-05-22 02:07:40.898462 general_hardware ERROR: unit.lua(478): DiskBP1 get_dfx_info fail
    行 6099: 2026-05-22 02:07:40.901494 general_hardware NOTICE: unit_manager.lua(695): EXP board info  collect finish
    行 6100: 2026-05-22 02:07:40.903665 general_hardware NOTICE: unit_manager.lua(695): CPU board Info  collect finish
    行 6101: 2026-05-22 02:07:40.905614 general_hardware NOTICE: unit_manager.lua(695): HDD Backplane Info  collect finish
    行 6102: 2026-05-22 02:07:40.908372 general_hardware NOTICE: mcu_service.lua(170): mcu info collect finish

从日志中可以看到,cpld fw matched, system_id = 1, fw.uid = 00000001020302041496, fw.csr.Name = BCU_CPLD1,已经成功识别到要升级的CPLD为模组CPLD,但是出现了 tar.c(664):__extract_file: lchown on file(cpld01.vme) failed!,搜索了下,并没有在hard_ware组件找到这个tar.c,请问下出现这个问题可能是什么原因导致的?升级失败的根本原因是否是这里引起的?

答案内容由AI生成,仅供参考:

总结:根据上下文,lchown 错误不是升级失败的直接原因,升级失败可能与硬件链路不通或CPLD设备信息获取失败有关。建议优先排查硬件通信链路及CPLD芯片状态。

点击此处查看详细分析解答

根据您提供的日志和问题,我将基于提供的Context(知识图谱和文档片段)进行分析。请注意,回答严格限定在上下文信息内,不引入外部知识。


1. lchown on file(cpld01.vme) failed 错误分析

  • 错误来源:该错误来自 tar.c(664) 文件中的 __extract_file 函数。在知识图谱中,tar.c 被描述为“Tar C utility”,负责提取固件文件时修改文件所有权(lchown)失败。用户提到“在hard_ware组件没有找到这个tar.c”,但日志中明确标注了 hardware ERROR: tar.c(664),说明 tar.chard_ware 组件的一部分(文档片段1中多次出现类似格式的硬件错误日志,如 hardware ERROR: tar.c(664): ...)。
  • 错误影响:在多个已知案例中(文档片段1、2、4),lchown 错误出现后,后续仍然能正常获取固件包(get cpld packages successful)并继续升级流程。例如文档片段1中,尽管有大量 lchown 错误,但最终日志显示 update success!。因此,lchown 错误本身通常不会导致升级失败。知识图谱中 chenghaoyang 也指出,lchown 错误在沙箱环境中属于正常现象。

2. 用户日志中的关键失败点

您的日志中,在 lchown 错误之后出现了:

行 6067: 2026-05-22 02:07:06.451722 general_hardware NOTICE: process.lua(179): [cpld]get cpld device info failed

这一行表明获取CPLD设备信息失败。在知识图谱中,没有直接描述该错误的原因,但可以参考其他升级失败案例:

  • 在文档片段2(话题ID 1977)中,类似升级流程(lchown 错误 + ioctl(CPLD_CMD_LOAD_CPLD) failed: 21)导致 Upgrade BP_Cpld process failed, ret=-1。该问题的根本原因是硬件链路不通(最佳答案:630版本升级失败的原因是因为硬件链路不通)。并且指出,在330版本中该错误未被软件检测到,升级实际上未生效。
  • 在您的日志中,虽然没有出现 ioctl 失败,但 get cpld device info failed 可能同样指向硬件通信问题(例如I2C或JTAG链路不通、CPLD芯片未响应等)。

3. 升级失败的根本原因判断

根据上下文,lchown 错误不是导致升级失败的根本原因。更可能的原因是:

  • 硬件链路不通:导致后续的 get cpld device info failed,从而使升级流程无法完成。
  • 或者 CPLD固件验证失败:日志中 get cpld_valid :nil(行6038),表明固件有效性检查返回空(nil)。但知识图谱中该状态为 “fw_upgrade.lua checks the validity of the CPLD firmware, which is nil”,未说明其是否导致失败。

4. 建议与结论

  • lchown 错误可忽略:多个案例证明该错误不影响升级流程的继续执行。
  • 关注硬件链路和CPLD设备信息获取:您需要检查模组(CPU模组)与BMC之间的硬件通信链路(如JTAG、I2C)是否正常,以及CPLD芯片是否处于可访问状态。
  • 对于“模组升级的链路切换SMC命令已实现并且在sr文件中已经配置”这一点,本上下文未提供其正确性的验证,但您可参考类似JTAG选路问题(文档片段5)确保切换逻辑正确。

总结:根据上下文,lchown 错误不是升级失败的直接原因,升级失败可能与硬件链路不通或CPLD设备信息获取失败有关。建议优先排查硬件通信链路及CPLD芯片状态。

咨询框架组同事,此处tar.c报错是解压时权限不够或者只读模式,但这里只是记录日志并未影响解压结果。失败原因还是在于process.lua(179): [cpld]get cpld device info failed这个日志。看你在另一个帖子的最新回复,似乎环境上定义了多个Cpld对象,但是他们的position不一样。检查一下:当前待升级的cpld固件是在哪一个position呢,这个position上的Cpld扫链结果如何?

关于两个Cpld对象扫链结果不一样的问题,请检查下这两个Cpld对象的配置。如果他们指的是同一个器件,则可能是其中一个对象的链路配置还有问题。如果是指两个器件,那么未返回结果的那个Cpld,链路配置或硬件可能有问题。建议再检查下这一点

请问下资源树上的CPLD对象是不是依赖硬件啊,我现在相同的包,在不同的机器上现象不一样,有机器上面分发了CPLD对象,另一台却没有

image
image

关于您提到的多个定义了多个CPLD对象的问题,确实是这样,一个是0101,在EXU下的Jtag_1下面配置,另一个是010101,在BCU下的JtagOverLocalBus_1下配置,现在升级的是CPU模组CPLD,走的应该是BCU的JtagOverLocalBus_1下的CPLD对象,但是这个对象调用GetChipIdcode为空,也没有报错,您提到的 链路配置或硬件可能有问题,应该如何查看链路配置是否有误?硬件应该从什么方向排查?能详细说明下吗,感谢

目前在没有CPLD对象的机器上在线升级载板CPLD,按理来讲,资源树上没有分发EXU的CPLD_0101对象,升级不应该成功啊,但是现在升级成功了,日志如下


2000-01-01 00:09:26.725778 general_hardware NOTICE: upgrade_subject.lua(71): [on_upgrade_prepare] start upgrade Cpld
2000-01-01 00:09:26.726568 general_hardware NOTICE: signal.lua(100): [cpld]Start the system[1] Cpld upgrade prepare phase
2000-01-01 00:09:26.816137 general_hardware NOTICE: upgrade_subject.lua(78): [on_upgrade_prepare] end upgrade Cpld
2000-01-01 00:09:26.818980 general_hardware NOTICE: fw_upgrade.lua(118): [cpld]get cpld_valid :nil
2000-01-01 00:09:26.819382 general_hardware NOTICE: fw_cfgs.lua(70): check fw uid(000000141BKHX00200100000) id(255) id_ex(4294967295) exist success
2000-01-01 00:09:27.136311 general_hardware NOTICE: fw_init.lua(163): get fw version 1.07
2000-01-01 00:09:27.136535 general_hardware NOTICE: fw_upgrade.lua(95): [cpld]get verion[1.07]
2000-01-01 00:09:28.374633 general_hardware NOTICE: upgrade_subject.lua(88): [on_upgrade_process] start upgrade Cpld
2000-01-01 00:09:28.374901 general_hardware NOTICE: signal.lua(121): [cpld]Start the system[1] Cpld upgrade process phase
2000-01-01 00:09:28.474384 general_hardware NOTICE: upgrade_subject.lua(95): [on_upgrade_process] end upgrade Cpld
2000-01-01 00:09:28.475295 general_hardware NOTICE: fw_cfgs.lua(70): check fw uid(000000141BKHX00200100000) id(255) id_ex(4294967295) exist success
2000-01-01 00:09:28.475861 general_hardware NOTICE: process.lua(38): cpld fw matched, system_id = 1, fw.uid = 000000141BKHX00200100000, fw.csr.Name = EXU_CPLD
2000-01-01 00:09:28.545939 hardware ERROR: tar.c(664): __extract_file: lchown on file(cpld.vme) failed!
2000-01-01 00:09:28.556907 hardware ERROR: tar.c(664): __extract_file: lchown on file(valid.vme) failed!
2000-01-01 00:09:28.557516 general_hardware NOTICE: process.lua(295): [cpld]get cpld packages successful
2000-01-01 00:09:28.557899 general_hardware NOTICE: process.lua(193): [cpld]_____load_cpld_single_____
2000-01-01 00:09:28.558123 general_hardware NOTICE: process.lua(56): load file[0x145a1e]
2000-01-01 00:10:26.727383 general_hardware WARNING: init.lua(574): service[bmc.kepler.web_backend] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Cpld/Cpld_1_0101], interface[bmc.kepler.Chip.BlockIO], method[Write], used time[58s]
2000-01-01 00:10:26.727803 general_hardware NOTICE: process.lua(82): [cpld]/dev/shm/upgrade/2767372996/cpld.vme update success!
2000-01-01 00:10:26.747697 general_hardware NOTICE: valid.lua(228): [cpld]set system_id = 1 ValidatingCpldFlag = 1
2000-01-01 00:10:27.962145 general_hardware NOTICE: upgrade_subject.lua(105): [on_upgrade_finish] start upgrade Cpld
2000-01-01 00:10:27.962517 general_hardware NOTICE: signal.lua(241): [cpld]Start the system[1] Cpld upgrade finish phase
2000-01-01 00:10:28.053233 general_hardware NOTICE: fructl_handler.lua(58): get_host_type: get host type Singlehost
2000-01-01 00:10:28.055702 general_hardware NOTICE: fructl_handler.lua(77): get_power_state: system[1] get power power ON
2000-01-01 00:10:28.056748 general_hardware NOTICE: signal.lua(161): upgrade_single_host system_id[1] firmware_type[Cpld] power_state[ON]
2000-01-01 00:10:28.058081 general_hardware NOTICE: valid.lua(223): [cpld]get system_id = 1 ValidatingCpldFlag = true
2000-01-01 00:10:28.060822 general_hardware NOTICE: fructl_handler.lua(58): get_host_type: get host type Singlehost
2000-01-01 00:10:28.062082 general_hardware NOTICE: signal.lua(36): [CPLD]Register Active Action start firmware_id = CPLD_ResetAC active_condition = PowerOff
2000-01-01 00:10:28.202587 general_hardware NOTICE: upgrade_subject.lua(112): [on_upgrade_finish] end upgrade Cpld

可以看到有一个警告:general_hardware WARNING: init.lua(574): service[bmc.kepler.web_backend] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Cpld/Cpld_1_0101], interface[bmc.kepler.Chip.BlockIO], method[Write], used time[58s],但是没有失败,这有关系吗

看上去这段日志和你描述的“没有CPLD对象”不一致,因为按照你下面看到的警告信息,升级的底层接口找到了/bmc/kepler/Chip/Cpld/Cpld_1_0101这个对象,还是有cpld对象的。能否确认这环境是不是真的没有cpld?

对于你前面的两个问题:

  1. 咨询框架同事,CPLD对象分发本身不依赖硬件,只要你CSR里面配了,就能分发这个对象,当然对象能不能正常用就看环境了。结合你升级操作实际成功了这一点来看,会不会是对象稍微慢了点?建议再检查下
  2. 链路配置有问题,指的是你的CSR配置有误,比如说这个cpld实际上在jtag_2链路上但是误写成了jtag_1,可以检查下软件上是否有该问题。
    硬件可能有问题,就需要由硬件同事直接来看这条实际的链路是否正常了。