26.03 无签名直升3.01.08.01启动失败

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

五、总结

项目 结论
问题类型 固件升级后启动失败(非升级过程失败)
根本原因 无签名固件跨版本升级导致文件系统挂载路径解析失败(Parse mount src path error: dir16
关键线索 串口日志显示 realpath failed、时间戳为 1970 年、服务注册中途终止
关联案例 topic/5199/2 中“伙伴过渡包刷入后 BMC 起不来”问题完全匹配
推荐解决方法 使用 过渡包 分步升级;确保签名/路径兼容;检查 rootfs_BMC.img 构建过程
点击此处查看详细分析解答

问题分析:26.03 无签名固件直升 3.01.08.01 后 BMC 启动失败

根据您提供的信息,本次问题是 “使用 26.03 版本构建的无签名固件,直接升级到 3.01.08.01 版本后,BMC 升级过程显示成功(100%),但重启后系统卡死无法正常启动”

结合界面截图和串口日志内容,可对故障进行系统性分析。


一、关键信息梳理

1. 升级过程状态(来自界面截图)

  • 升级路径https://192.168.2.100/UI/Static/#/navigate/manager/upgrade
  • 升级结果
    • 显示“:white_check_mark: 升级成功”
    • 进度条达到 100%
    • 开始升级 按钮变为灰色(不可操作)
  • 系统提示

    “在iBMC或SD卡控制器固件升级完成之后,iBMC会自动重启使升级的固件生效。”

:backhand_index_pointing_right: 表明 iBMC 已执行了重启动作,但新固件未能正常加载。


2. 串口日志分析(BMC 启动失败关键依据)

以下是串口输出中的关键异常点:

(1) 时间戳异常:系统时间未初始化
1970-01-01 00:00:26.781664 ...
  • 所有日志时间戳均为 1970-01-01(Unix 时间起点),说明系统 未能正确加载时间和 RTC 配置
  • 可能原因:
    • 新固件中缺少 bmc_time 组件或初始化失败。
    • 文件系统挂载失败导致配置丢失。
(2) 核心错误:挂载路径失败
Path realpath failed [errno=2 errmsg=No such file or directory].
Parse mount src path error: dir16.
  • 这是导致系统无法继续启动的 致命错误
  • realpath 失败表明系统尝试解析某个挂载路径时,目标目录不存在。
  • Parse mount src path error 指出 固件在解析挂载源路径时出错,极有可能导致 rootfs 无法正确加载。
  • 可能原因:
    • 固件包中 /etc/fstab 或启动脚本配置错误。
    • 分区结构变更但未适配(如从旧单分区改为双分区 A/B)。
    • 构建过程中文件系统打包异常(如 rootfs_BMC.img 生成或写入错误)。
(3) 组件逐步加载,但未完成初始化

日志中显示部分服务能被检测到并注册:

component[thermal_mgmt] is detected
component[web_backend] is detected
...
monitor component bmc_upgrade added
monitor component bmc_time added
monitor component iam added
  • 说明系统已开始加载 Lua 服务管理器(maca)模块,并尝试注册各功能组件。
  • 但日志在此处突然中断,未见:
    • StartupCheck passed
    • System ready
    • 或 DBus 服务成功拉起的消息。

:backhand_index_pointing_right: 表明系统在 服务加载阶段因挂载失败而崩溃,未能进入完整运行状态。


二、根本原因推断

类别 分析结论
:white_check_mark: 升级流程 前端显示升级成功(100%),说明上传、校验、写入 Flash 等步骤已完成,固件已刷入设备。
:cross_mark: 系统启动 串口停留在早期 init 阶段,出现 mount 路径解析失败,说明 新固件的启动环境配置不兼容或损坏
:warning: 最可能原因 无签名固件在跨版本升级时,缺少必要的兼容性处理机制,尤其是:
1. 文件系统结构或路径发生变化(dir16 异常)
2. 缺少签名或认证校验绕过逻辑,导致安全启动失败
3. 构建时未启用兼容旧平台的启动选项(如 manufacture mode)

三、对比知识库中的类似案例

:white_check_mark: 相关知识匹配:topic/5199/2 论坛讨论

  • 标题:“伙伴过渡包刷到华为bmc后,bmc起不来”
  • 高度相似场景
    • 使用自定义编译固件(非官方签名)升级后 BMC 无法启动。
    • 现象:Web 页面可访问,但串口卡死,风扇无响应。
    • 页面信息显示:iBMC 固件版本为 5.08.12.04,URL 路径与本例一致:https://192.168.16.103/UI/.../upgrade
  • 解决方案参考(由 ubmc_assistant 提出):

    “建议先刷一个过渡包(transition package)以兼容签名环境,再刷正式包。直接刷不同签名体系的固件会导致启动校验失败。”


四、推荐解决方案

:white_check_mark: 1. 使用过渡包(Transition Package)进行升级

:link: 关联实体:path_to_bmc_upgradetransition_package

  • 操作步骤
    1. 不要直接从旧版本升至目标版本。
    2. 先升级一个 兼容两个签名环境的中间版本(过渡包)
    3. 再升级至 3.01.08.01
  • 原因
    • 过渡包会移除旧签名限制或预置新根证书,避免直接升级时因证书不匹配或路径异常导致失败。

:white_check_mark: 2. 确保固件签名一致性

:link: 参考知识库:firmware_mgmt 文档 → “add pss root certificate failed”

  • 若必须使用无签名固件,请确认:
    • BMC 当前运行的固件是否要求强制签名校验?
    • 是否可通过修改 manifest.yml 启用 manufacture mode 跳过校验?

:white_check_mark: 3. 检查构建配置与分区兼容性

  • 确认 rootfs_BMC.img 是否正确生成。
  • 检查是否启用了正确的 分区布局(Partition Layout),避免 dir16 等路径映射错误。
  • 可尝试在本地解压镜像文件验证其完整性。

:white_check_mark: 4. 回退机制:BMC 镜像倒换

:link: 参考文档:支持 A/B 分区倒换功能

  • 如果支持双分区(Active/Inactive),可通过以下方式恢复:
    • 使用串口命令强制切换到旧版本分区。
    • 或通过硬件跳线进入恢复模式。

五、总结

项目 结论
问题类型 固件升级后启动失败(非升级过程失败)
根本原因 无签名固件跨版本升级导致文件系统挂载路径解析失败(Parse mount src path error: dir16
关键线索 串口日志显示 realpath failed、时间戳为 1970 年、服务注册中途终止
关联案例 topic/5199/2 中“伙伴过渡包刷入后 BMC 起不来”问题完全匹配
推荐解决方法 使用 过渡包 分步升级;确保签名/路径兼容;检查 rootfs_BMC.img 构建过程

六、参考资料链接

建议后续升级前在测试环境中先验证签名兼容性和启动流程。