2512LTS编译装备包失败

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

2512LTS 编译 manufacture 包失败问题分析与解决方案

根据您提供的编译日志和错误信息,以下是针对 2512LTS 版本编译 manufacture 包失败 问题的详细分析与解决建议。


:magnifying_glass_tilted_left: 问题描述

  • 编译命令

    bmcgo build -t publish -b openUBMC -z 0502TEST -r openubmc_opensource
    
  • 工具版本

    • bingo version: 0.6.120
    • bmcgo version: 0.7.51
  • 关键错误日志片段

    aarch64-target-linux-gnu-g++: internal compiler error: Killed (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See https://gcc.gnu.org/bugs/ for instructions.
    ERROR: Exiting with code: 3
    
  • 现象特征

    • 多个构建任务长时间等待(如 work.build.app, work.task_build_rootfs_img 等),最终超时。
    • 实际编译过程中 aarch64-target-linux-gnu-g++ 编译器进程被系统终止(Killed)。
    • 错误发生在 component_drivers/1.2.3@openubmc/stable 的 C++ 文件编译阶段。

:firecracker: 根本原因分析

:cross_mark: Internal Compiler Error: Killed (program cc1plus)

该错误表示 交叉编译器 g++ 在编译 C++ 源码时被操作系统强制杀死(Killed),通常不是代码本身的问题,而是 环境资源限制 所致。

结合上下文,可能原因如下:

1. 内存不足(OOM - Out of Memory)

  • cc1plus 是 GCC 的 C++ 前端编译器进程,对内存消耗较大。
  • 当前构建使用 -j12(12线程并行编译),在资源受限环境下极易导致内存耗尽。
  • 操作系统触发 OOM Killer 机制,主动终止高内存占用进程(如 cc1plus),表现为 “Killed”。

:white_check_mark: 这是最可能的根因。

2. 交叉编译工具链不完整或环境缺失

  • 日志中出现路径 /opt/RTOS/.../opt/hcc_arm64le/...,说明依赖华为定制的 RTOS SDK 与交叉编译工具链。
  • 若以下目录不存在或权限异常,可能导致工具链无法正常工作:
    • /opt/RTOS
    • /opt/hcc_arm64le

3. Conan 依赖解析阻塞导致任务卡死

  • 多个 work.build.appwork.task_sign_and_pack_hpm 等任务处于 等待状态,持续超时,提示构建流程卡顿。
  • 可能因远程 Conan 仓库(openubmc_opensource)响应缓慢或依赖未命中,导致后续任务无法启动。

:white_check_mark: 解决方案

:white_check_mark: 方案一:增加构建机内存或限制并行编译数

适用场景:构建主机内存 ≤ 16GB

# 修改构建命令,降低并行线程数,减少内存压力
bmcgo build -t publish -b openUBMC -z 0502TEST -r openubmc_opensource -j4

-j4 表示最多使用 4 个并行编译线程,显著降低内存峰值使用。

:wrench: 建议

  • 构建环境建议配置至少 32GB 内存 + 16 核 CPU
  • 可临时关闭其他服务,释放内存资源。
  • 使用 htopdmesg | grep -i kill 查看是否触发 OOM Killer。

:white_check_mark: 方案二:检查交叉编译工具链和 SDK 安装

确保以下路径存在且可访问:

ls /opt/RTOS/
ls /opt/hcc_arm64le/

若目录缺失,请参考文档重新安装 BMC SDK:

# 示例:下载并解压 bmc_sdk(需权限)
wget https://your-sdk-repo.com/bmc_sdk.zip -O bmc_sdk.zip
unzip bmc_sdk.zip -d /opt/

:warning: 注意:aarch64-target-linux-gnu-g++ 必须位于 $PATH 中,并能正常执行。


:white_check_mark: 方案三:确认 Conan 远程仓库配置正确

您使用了 -r openubmc_opensource,请确保该远程已正确定义:

# 查看当前 Conan 远程
conan remote list

# 应包含类似:
# openubmc_opensource: https://conan.openubmc.cn/conan_opensource VERIFY

如有问题,重新添加:

conan remote add openubmc_opensource https://conan.openubmc.cn/conan_opensource --insecure

若网络不稳定,可尝试在公司内网镜像仓库或启用代理。


:white_check_mark: 方案四:启用详细日志排查具体卡点

使用 VERBOSE=ON 输出更详细的构建日志:

VERBOSE=ON bmcgo build -t publish -b openUBMC -z 0502TEST -r openubmc_opensource -j4

此变量可由 xuhaijun 等专家推荐用于诊断构建问题,有助于定位具体失败模块。


:books: 相关知识支持(来自上下文)

实体 说明
bmcgo build 用于构建 OpenUBMC 固件的核心命令,支持 -b openUBMC 目标和远程仓库 -r 参数
openubmc_opensource Conan 远程仓库,用于获取开源组件依赖
Internal Compiler Error: Killed (program cc1plus) 典型的内存不足导致编译器崩溃
xuhaijun 社区技术专家,曾建议通过 VERBOSE=ON 查看详细日志辅助调试
Task_Build_Conic / Work.Build Conan 构建流程中的 Conan 并行任务,可能因依赖冲突或网络问题卡住

:white_check_mark: 附加建议

  1. 避免在容器中低资源构建

    • 若使用 Docker,需确保分配足够内存(>24GB)。
  2. 定期清理 Conan 缓存

    conan remove "*" --builds --force
    

    防止缓存污染导致构建异常。

  3. 检查组件版本兼容性

    • component_drivers/1.2.3@openubmc/stable 是否与 2512LTS + hal 基线兼容?
    • 可尝试切换到 @openubmc.dev/dev 或更新版本。
  4. 更换构建主机

    • 若本地机器资源紧张,建议使用高性能构建服务器。

:white_check_mark: 总结

问题 原因 解决方案
编译报 internal compiler error: Killed (cc1plus) 内存不足导致 OOM Killer 终止进程 降低 -j 并行数,升级构建机内存
构建任务长时间等待超时 Conan 依赖拉取慢或缺失 检查 openubmc_opensource 远程配置
编译器无法运行 交叉工具链缺失 确保 /opt/RTOS/opt/hcc_arm64le 存在

:white_check_mark: 推荐操作顺序

  1. 执行 dmesg | grep -i kill 确认是否 OOM。
  2. 改用 -j4 重试构建。
  3. 检查 /opt/RTOS/opt/hcc_arm64le 是否存在。
  4. 使用 VERBOSE=ON 获取完整日志。
  5. 如仍失败,联系 xuhaijun 或社区提交完整日志进行深入分析。

如问题仍未解决,请提供完整 task.logdmesg 输出以便进一步诊断。

相关链接:

  1. 高可用组件编译报错
  2. 新增组件出包报错ERROR: Version conflict: Conflict between
  3. 执行bmcgo build -b openUBMC -r openubmc_dev构建版本失败
  4. 【storage】release出包编译libplatform_open.so报错
  5. manufacture | 文档中心 | openUBMC