答案内容由AI生成,仅供参考:
定制仓定制 BMC 版本号逻辑及取消方法
根据您提供的问题描述、环境信息和相关文档内容,以下是关于 定制仓中如何定制 BMC 版本号 以及 如何彻底取消该定制 的详细分析与解决方案。
问题分析
您在使用 OpenUBMC 2512 的定制仓进行客户定制(如 Baidu)时,发现即使注释了相关代码,BMC 的版本号仍被修改为定制值(1.59.01000000),而期望恢复为原始或默认版本号。
从 version.json 文件中可见:
{
"BaseVersion": "25.03.00.01",
"Version": "1.59.01000000"
}
说明:
BaseVersion是基础版本号(来自上游代码);Version是最终生成的版本号,已被定制覆盖。
定制仓中 BMC 版本号的来源与逻辑
1. 版本号定制机制
在 OpenUBMC 架构中,版本号通常通过以下方式被定制:
dataset/version.json 文件
- 此文件是 版本信息的核心配置文件。
- 构建系统会读取此文件中的
"Version"字段作为最终固件的 BMC 版本号。 - 如果定制仓中包含此文件并定义了
"Version",则会优先使用该值。
即使注释了
customization.py中的操作,只要version.json中明确写了"Version",构建系统仍将采用该版本号。
build/customization.py 脚本中的 post_hpm 方法
- 您提供的代码示例中,原逻辑应为:
config.set('Custom', 'VersionBaidu', custom_ver) - 此操作会将定制版本号写入
update.cfg文件,供 HPM 升级包解析。 - 但请注意:
update.cfg只影响 HPM 升级包内部的元数据,不直接影响运行时显示的 BMC 版本号。
因此,update.cfg 并非主版本号的唯一决定因素。真正的决定点是 version.json 中的 Version 字段。
2. 构建流程中的版本号优先级
在 OpenUBMC 的构建流程中,版本号的优先级如下(由高到低):
| 优先级 | 来源 | 是否生效 |
|---|---|---|
| 1 | 定制仓 /dataset/version.json 中的 "Version" |
|
| 2 | 主仓库 version.json 中的 "BaseVersion" |
|
| 3 | manifest.yml 中的 version 字段 |
|
| 4 | update.cfg 中的 VersionBaidu 等字段 |
如何正确取消定制的 BMC 版本号
要恢复 BMC 版本号为非定制状态(如 25.03.00.01),需执行以下步骤:
Step 1:删除或修改定制仓中的 version.json
进入定制仓的路径:
/dataset/version.json
方案 A:删除 Version 字段
保留 BaseVersion,但移除显式设置的 Version:
{
"BaseVersion": "25.03.00.01"
// 删除 "Version": "1.59.01000000"
}
构建系统将自动以
BaseVersion作为最终版本号。
方案 B:彻底移除 version.json
如果您的定制不需要任何版本定制,可直接 删除 /dataset/version.json 文件。
构建流程会回退到主仓库的
version.json使用默认版本。
Step 2:清理构建缓存与中间文件
由于构建系统可能缓存旧版本,建议执行以下清理操作:
# 清理构建输出目录
rm -rf out/ build/ output/
# 清除 Conan 缓存(如有)
conan remove "Hello openUBMC*" -f
# 强制重新构建
bingo build -t publish -b openubmc -bt release --force
Step 3:确认 customization.py 中无其他写版本行为
虽然您已注释 post_hpm 中的版本写入,但仍需确认是否存在其他位置影响版本号:
- 检查是否有脚本修改:
/usr/share/bmcgo/下的.cfg文件;update.cfg;hpm_wbd.config;
- 搜索关键词:
grep -r "VersionBaidu\|Version" . --include="*.py\|*.sh\|*.cfg"
确保没有任何脚本在构建后期强制注入版本号。
Step 4:验证最终生成的镜像版本
构建完成后,检查生成的 version.json 是否正确:
unzip openubmc.img.zip
cat version.json
输出应为:
{
"BaseVersion": "25.03.00.01"
// 不包含 Version 字段,或值为 BaseVersion
}
常见误区澄清
| 误解 | 实际情况 |
|---|---|
注释 customization.py 即可取消版本定制 |
version.json 中仍定义了 Version,则仍会被应用 |
update.cfg 控制主版本号 |
|
删除 update.cfg 即可恢复版本 |
version.json |
总结:正确取消定制版本号的方法
最根本解决办法:
删除或修改定制仓中的/dataset/version.json,移除"Version"字段,保留"BaseVersion"。
操作清单:
删除 /dataset/version.json中的"Version": "1.59.01000000"行;
或直接删除整个 version.json文件(依赖主仓库);
清理构建缓存;
重新构建;
验证输出镜像中的 version.json。
补充建议
- 若需支持多客户差异化版本定制,建议使用 Conan profile + 动态替换机制,避免硬编码版本号;
- 参考文档:白牌包适配与制作指南 中关于
web_custom.xml和动态资源配置的部分; - 开启
--dry-run模式调试构建流程,观察version.json注入时机。
如能按上述步骤操作,重启 BMC 后显示的版本号将不再被强制定制,恢复为预期的 25.03.00.01 或标准版本格式。
相关链接: