当前版本:2603
web界面固件升级的时候,会弹窗升级失败,但是实际升级成功
上图的结果详情是:升级成功,但是等待一会,界面会弹窗升级失败
实际固件是升级成功的,这个问题如何定位?弹窗在哪个组件屏蔽
当前版本:2603
web界面固件升级的时候,会弹窗升级失败,但是实际升级成功
上图的结果详情是:升级成功,但是等待一会,界面会弹窗升级失败
实际固件是升级成功的,这个问题如何定位?弹窗在哪个组件屏蔽
答案内容由AI生成,仅供参考:
根据您提供的信息,结合知识库中的相关内容,针对“实际升级成功,但 Web 界面弹窗‘升级失败’”的问题,定位思路和屏蔽建议如下。
升级失败弹窗的本质是升级任务被某个环节上报为“失败”,尽管固件实际已经写入并生效。从知识库看,通常与 firmware_mgmt 收到的非零返回值 或 任务状态上报异常 有关。
/var/log/app.log(新版)或 /var/log/app_debug_log_all(旧版)| 关键字 | 含义 |
|---|---|
Upgrade <某固件> process failed, ret=<非0返回值> |
firmware_mgmt 明确收到了来自多样硬件组件的升级失败信号,说明是“固件组件返回失败” |
Update task failed, task_id: xxx, res: -9 |
任务服务返回错误,但任务状态可能已到达 COMPLETED,容易导致“实际成功、界面报失败”的假象 |
upgrade failed, set_stage: DIFF_FINISH -> COMPLETED |
任务状态被置为 COMPLETED,但日志中同时出现 failed 记录 |
Upgrade ... failed |
操作日志中记录的失败事件,可用于定位失败发生时间点 |
升级流程由 firmware_mgmt 管理,典型阶段包括:
INITIALIZE → DIFF_PREPARE → COMMON_PREPARE → PROCESS → COMMON_FINISH → COMPLETED
可在日志中搜索 set_stage 记录,确认任务实际走到了哪个阶段。如果固件实际已生效,但界面报失败,问题很可能发生在 finish 阶段或任务状态上报阶段。
知识库中有一个非常接近您场景的案例:
general_hardware 组件的 signal.lua 会调用 UpdateServiceUpdateServiceFinishReply 函数,向 firmware_mgmt 返回该阶段的返回值。-1,firmware_mgmt 就会判定升级失败。g_upgrade_ret 赋值;如果 process 阶段成功,该值应为 0,finish 阶段不应失败。UpdateServiceUpdateServiceFinishReply 附近增加打印 g_upgrade_ret 的值,确认是哪一环返回了非零值。知识库没有明确给出“屏蔽弹窗”的具体代码文件或配置项,但可以确认以下事实:
UpdateProgress:包含任务名、目标/当前版本、进度百分比、状态、错误码等信息;firmwareUpgradeDetailedResults:提供升级的详细结果文本。因此,Web 界面弹窗中的“升级失败”提示,大概率来源于 firmware_mgmt 上报的任务失败状态或错误码。若要在界面屏蔽该弹窗,可从两条链路入手:
UpdateProgress 或 firmwareUpgradeDetailedResults 返回状态的处理逻辑,不将已确认成功的任务渲染为“升级失败”。由于知识库未给出屏蔽弹窗的具体修改位置,建议结合日志定位到具体返回非零值的组件(例如 general_hardware 的 finish 阶段),并与对应组件负责人确认如何修正返回值,或直接咨询 firmware_mgmt 开发人员确认弹窗判断逻辑。
firmware_mgmt组件没开源
还是得看一下日志,提示升级失败的原因,关注firmware_mgmt和general_hardware这两个组件的日志