社区最新manifest构建成功,上机会重启回退

问题描述

使用最新的社区版本进行构建,构建成功,但是上机验证发现会重启回退

环境信息

  • 软件版本:openUBMC2603

  • 硬件配置:1711

重现步骤

  1. [第一步]
    使用社区最新manifest结合高可用出包
  2. [第二步]
    上机验证,发现会多次重启后回退,debug和release包都会回退
  3. [第三步]

期望结果

正常升级不回退

实际结果

会回退

尝试过的解决方案

根据BMC串口日志进行调试,删除tpcm的相关启动配置,仍然报错,下图是对比分析正常日志和重启日志的差异


[com COM3] (2026-03-12_150253) COM3 (USB Serial Port (COM3)).txt (54.4 KB)
[com COM3] (2026-03-12_153802) COM3 (USB Serial Port (COM3)).txt (61.6 KB)
150253是正常BMC串口日志,153802是会回退的日志

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

:pushpin: 总结

项目 内容
核心问题 新构建版本引入 Secure LiFWtpqm 模块,导致关键服务(如 iam)启动失败,触发系统自动回退机制
根本原因 安全模块与当前硬件平台或配置不兼容,且分区挂载顺序异常加剧系统不稳定
解决方案 移除 tpcm/tpqm/LiFW 相关组件 → 修复分区挂载逻辑 → 检查 iam 服务状态 → 调试期间关闭回退机制
预防建议 在 CI 构建阶段增加“服务完整性检测”脚本,确保 bmc.kepler.iam 等核心服务可注册并启动
点击此处查看详细分析解答

openUBMC社区版本构建后上机重启回退问题分析与解决方案

根据您提供的问题描述、环境信息、日志对比及上下文数据,以下是对“使用社区最新manifest构建成功但上机验证时出现重启回退”问题的全面分析与解决方案


:magnifying_glass_tilted_left: 问题概述

  • 问题现象:使用社区最新 manifest 构建的 openUBMC 固件(debug/release)在实际设备(硬件型号1711)上部署后,系统反复重启并最终自动回退到旧版本
  • 软件版本openUBMC2603
  • 硬件平台1711
  • 关键线索:BMC串口日志中显示存在 Secure LiFW Start 启动项、tpqm 配置错误、分区挂载顺序异常等差异。

:puzzle_piece: 根本原因分析

结合日志对比与知识库内容,可归纳出以下核心问题点:

1. Secure LiFW 模块引入导致启动异常

  • 日志显示回退版本启动时输出:
    S12345678!Secure LiFW Start!
    
  • 正常版本无此模块。
  • 推断:新构建版本可能误引入了安全可信执行环境(如TPM/TCM相关模块),而当前硬件环境或启动流程未正确配置支持该模块,导致关键服务验证失败或初始化超时。

:white_check_mark: 相关证据:tpqm(可信平台模块管理服务)报错为 unknown deployConfig,说明配置文件缺失或格式不兼容。


2. 启动配置中 tpcm/tpqm 组件未正确适配

尽管您已尝试删除 tpcm 启动配置,但日志仍提示 tpqm 错误。这表明:

  • 构建系统中仍然保留了与可信计算相关的二进制组件或依赖项
  • deployConfig 加载失败,意味着这些组件尝试运行但因配置缺失而崩溃,进而影响 devmon 或核心服务(如 iam)启动。

:fire: 高危风险:若 iam(身份访问管理)组件因依赖缺失无法启动,会触发 BMC 主控进程 bmc_core 主动自杀重启(见知识库文档 chunk #1)。


3. 分区挂载顺序异常引发系统状态混乱

项目 正常 异常
分区挂载顺序 mmcb1k0gp0 → gp1 → gp2 mmcb1k0gp2 → gp0 → gp1

这表明 UBI(Unsorted Block Images)布局或启动参数不一致,可能导致:

  • 关键配置文件加载路径错误(如 /etc, /var/log, /data);
  • 持久化数据读取异常,影响服务状态判断;
  • persistence 任务报错(A storm occurs in table t_fructrl_tb,见知识库);
  • 进一步触发系统判定为“升级失败”,启动自动回退机制。

4. devmon 服务行为异常(反常成功)

项目 正常 异常
devmon 状态 多次 FAILED 启动成功

表面看似“改善”,但结合上下文反推:

  • devmon 是硬件设备监控守护进程。
  • 在正常系统中,它应在所有依赖准备就绪后才成功启动;若提前成功,可能是因为跳过了某些校验步骤(例如因缺少 tpcm 驱动而绕过安全检查)。
  • 此种“伪成功”会导致后续其他组件依赖缺失,最终整体系统不稳定。

5. 系统具备自动回退机制

从知识库中可确认以下机制存在:

:white_check_mark: 自动回退触发条件包括

  • 升级后功能验证失败;
  • 新版本运行异常(如内存泄漏、服务未启动);
  • 兼容性测试不通过;
  • 用户或系统手动触发回退。

如文档 #2 所述:“升级成功后BMC起不来,然后自动回退成原来5月份的版本。重启原因是bmc_core中的event组件存在内存泄漏”。

在本例中,即使构建和烧录成功,但由于关键组件(如 iam)无法稳定运行,系统通过健康检测机制判定升级失败,触发自动回退


:hammer_and_wrench: 解决方案建议

:white_check_mark: 方案一:移除可信模块相关配置与组件

1. 修改构建配置,禁用 tpcm/tpqm/LiFW

manifest.yml 或相应 layer 的 local.conf 中添加:

DISTRO_FEATURES_remove = " tpcm tpqm secure_lifw "
PACKAGE_EXCLUDE += "tpcm-daemon tpqm-utils lifw-loader"

2. 检查并清理启动脚本中的安全模块加载

检查以下文件是否含有自动启动脚本:

  • /etc/init.d/tpcm
  • /lib/systemd/system/tpqm.service
  • 启动脚本中 sourceexecLiFW 相关注入逻辑

若存在且非必要,注释或删除


:white_check_mark: 方案二:校验并修复 UBI 分区映射与挂载逻辑

1. 确认 mtd 分区定义一致性

确保 dts 文件中定义的 flash 分区与实际烧录工具匹配:

partition@0 {
    label = "gp0";
    reg = <0x0 0x800000>;
};
...

2. 检查 fstabubootenv 中的默认启动分区

cat /etc/fstab
# 应明确设定 rootfs 从哪个 MTD 分区挂载

建议强制指定 root=mtd:gp0 或使用 label(如 root=ubi0:rootfs)。


:white_check_mark: 方案三:启用调试模式,捕获 iam 实际启动失败原因

添加调试命令查看 iam 是否真的正常运行:

systemctl status bmc.kepler.iam
journalctl -u bmc.kepler.iam --no-pager

如果日志中出现:

The name bmc.kepler.iam was not provided by any .service files

参考知识库 chunk #1,这是典型的 DBUS 服务注册失败,通常是由于:

  • 二进制文件缺失;
  • 依赖库(如 OpenSSL TPM engine)加载失败;
  • AppArmor/SELinux 限制;
  • 配置文件权限错误。

:play_button: 解决方法

find /usr/lib/systemd/system -name "*iam*"
ls -l /usr/bin/bmc-iam-daemon
ldd /usr/bin/bmc-iam-daemon | grep "not found"

:white_check_mark: 方案四:临时关闭自动回退机制以定位问题

:warning: 注意:仅用于调试,生产环境慎用!

临时禁用回退

ipmcset -d rollback disable

或通过 DBus 调用:

busctl call bmc.kepler.UpdateService /bmc/kepler/UpdateService bmc.kepler.UpdateService SetTimeoutPolicy u 0

如知识库 firmware_mgmt.md 所述,TimeoutPolicy=0 表示超时不采取复位动作。


:test_tube: 验证步骤建议

步骤 操作 目的
1 使用修改后的配置重新构建镜像 排除可信模块干扰
2 刷机后通过串口观察是否仍有 Secure LiFW Start 输出 验证模块是否彻底移除
3 检查 dmesgjournalctl 输出 查看分区挂载是否恢复为 gp0 → gp1 → gp2
4 执行 systemctl list-units --state=failed 检查是否有服务失败
5 查看 bmc_core 是否再次触发 KILL self 判断升级是否通过健康检查

:pushpin: 总结

项目 内容
核心问题 新构建版本引入 Secure LiFWtpqm 模块,导致关键服务(如 iam)启动失败,触发系统自动回退机制
根本原因 安全模块与当前硬件平台或配置不兼容,且分区挂载顺序异常加剧系统不稳定
解决方案 移除 tpcm/tpqm/LiFW 相关组件 → 修复分区挂载逻辑 → 检查 iam 服务状态 → 调试期间关闭回退机制
预防建议 在 CI 构建阶段增加“服务完整性检测”脚本,确保 bmc.kepler.iam 等核心服务可注册并启动

:books: 参考资料

  1. [devmon特性设计说明书] — 自动回退机制说明
  2. [升级常见问题指南] — 提及“升级成功但回退”的案例(ID: #2
  3. firmware_mgmt 接口文档 — Rollback, TimeoutPolicy, UpgradeFinishSignal
  4. openUBMC 社区讨论记录 — 昆仑太科_安阳阳 解决升级失败问题的经验

:speech_balloon: 社区建议:若此问题普遍存在于 openUBMC2603 的社区包,请向社区提 issue,请求将 tpcm/tpqm 设为可选 feature,默认关闭。


如需进一步协助(例如分析完整的 .txt 日志文件),欢迎上传具体内容片段。

社区26年330_Q1构建的包会回退 - 交流互助区 - openUBMC 论坛 看下这个帖子,是不是相同的问题。或者看下本地bingo的版本,有没有什么变更。

1 个赞

参考这个帖子已经解决