答案内容由AI生成,仅供参考:
私有签名构建报错问题分析与解决方案
根据您提供的配置修改及错误日志,当前在进行 OpenUBMC 自签名构建时出现了多个关键错误。以下是详细的分析与解决方案。
问题核心
您已在 manifest.yml 中正确配置了自签名所需的证书路径:
signature:
certificates:
rootca_der: ${product}/ca/rootca.der
signer_pem: ${product}/ca/signer.pem.enc
timestamp_signer_pem: ${product}/ca/ts_signer.pem.enc
timestamp_signer_cnf: ${product}/ca/tsa.cnf
rootca_crl: ${product}/ca/rootca.crl
但构建过程仍失败,报错信息如下:
不能从 yaml 文件中获取到键值
base/vendor,没有相关配置
不能从 yaml 文件中获取到键值
base/signature/simple_signer_server,没有相关配置
不能从 yaml 文件中获取到键值
base/signature/signserver,没有相关配置
ERROR: 任务 work.task_buildgppbin 执行失败,打开了自签名模式但未找到待签名的 uboot 文件
问题一:YAML 配置缺失关键字段
缺失字段列表:
| 字段 | 说明 |
|---|---|
base/vendor |
标识厂商信息,必选字段 |
base/signature/simple_signer_server |
指定签名服务器地址 |
base/signature/signserver |
(旧版兼容)签名服务端点 |
解决方案:补全 base 配置项
在 manifest.yml 的顶层 base 字段中添加以下内容:
base:
version: "1.00.00.00.B001" # 示例版本号
customization: "customization/prototype.py"
rtos_version: 208.8.0
rtos_kernel: 5.10_ek_preempt_pro
dependency_buildtools: dependency/dependency_buildtools.xml
vendor: "your_company_name" # 必须添加!如:Aaeon, Changjiang_Computing
signature:
simple_signer_server: http://localhost:8080/sign # 自建签名服务地址
# 或使用 local 模式(若支持):
# simple_signer_server: local
certificates:
rootca_der: ${product}/ca/rootca.der
signer_pem: ${product}/ca/signer.pem.enc
timestamp_signer_pem: ${product}/ca/ts_signer.pem.enc
timestamp_signer_cnf: ${product}/ca/tsa.cnf
rootca_crl: ${product}/ca/rootca.crl
注意:
base/vendor是 必选项,缺失会导致解析失败。base/signature/simple_signer_server是签名流程的核心配置,必须存在(即使使用本地签名)。- 若不使用远程签名服务器,可设为
local或指向一个本地脚本处理程序。
问题二:未找到待签名的 U-Boot 文件
报错信息:
ERROR: 任务 work.task_buildgppbin 执行失败,打开了自签名模式但未找到待签名的uboot文件
原因分析(来自知识库):
- 自签名模式需要 原始未签名的 U-Boot 二进制文件(如
Hi1711_boot_4096.bin)。 - 如果 SDK 中只包含了已签名的版本,则
task_buildgppbin无法提取原始文件进行再签名。 - 根据文档和用户反馈,该文件通常位于 SDK 目录下,命名如:
Hi1711_boot_4096_debug.binHi1711_boot_pmode_debug.bin
解决方案:
-
确认 SDK 包含未签名的 U-Boot 文件
- 检查 SDK 路径(通常是
${sdk_path})下是否有如下文件:Hi1711_boot_4096.bin Hi1711_boot_pmode.bin - 若没有,请联系 PAE(平台支持工程师) 获取含原始镜像的 SDK 包。
- 检查 SDK 路径(通常是
-
在
manifest.yml的gpp字段中正确引用文件(参考知识库示例)
gpp:
files:
- file: ${sdk_path}/Hi1711_boot_4096.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: release
- file: ${sdk_path}/Hi1711_boot_4096_debug.bin
dst: Hi1711_boot_4096.bin
condition:
build_type: debug
- 确保环境变量或路径定义正确
${sdk_path}应指向有效的 SDK 解压目录。- 可通过日志确认路径是否被正确解析。
问题三:为何旧版本能成功而新版本失败?
可能原因:
| 原因 | 说明 |
|---|---|
| 构建工具(bingo)版本不同 | 新版本加强了配置校验,强制要求 base/vendor、simple_signer_server 等字段存在 |
| SDK 内容差异 | 旧环境使用的 SDK 包含原始 U-Boot 镜像,新环境可能遗漏 |
| 签名逻辑变更 | 新版本可能移除了默认值或放宽策略,改为严格模式 |
参考知识库信息:
- 用户 Aaeon 在使用链接 https://discuss.openubmc.cn/t/topic/215/9 构建时也遇到了类似问题。
- 官方回答明确指出:“如果打开了自签名模式,需要未签名的 uboot 原始文件,若确需签名的请找 PAE 获取专用文件。”
总结:完整解决步骤
第一步:完善 manifest.yml 配置
base:
vendor: "YourCompany" # 必填
signature:
simple_signer_server: local # 或具体 URL
# 其他签名配置...
第二步:确认 SDK 含有原始 U-Boot 文件
- 查看路径:
~/sdk或${sdk_path} - 检查文件是否存在:
Hi1711_boot_4096.binHi1711_boot_pmode.bin
- 如无,请联系 PAE 获取完整 SDK
第三步:验证文件引用路径正确
确保在 gpp/files 中正确引用上述文件,并设置合适的 condition
第四步:清理缓存并重新构建
# 清除 conan 缓存(如有必要)
conan remove "*" -c
# 重新执行构建
bingo build -b openUBMC
参考资料
如按以上步骤操作后问题仍未解决,请提供以下信息以便进一步排查:
manifest.yml完整base和gpp配置片段ls ${sdk_path}输出结果bingo -v和conan -v版本号
相关链接: