如何在Yocto镜像配方中指定依赖配方的特定版本?
在Yocto镜像配方中指定依赖配方版本的方法
直接在镜像配方中设置PREFERRED_VERSION
这是最直接的方式,针对每个镜像配方单独配置,不会影响全局。比如在core-image-varA.bb中添加:
PREFERRED_VERSION_somerecipe = "1.0.0"
在core-image-varB.bb中添加:
PREFERRED_VERSION_somerecipe = "2.0.0"
构建对应镜像时,会自动拉取指定版本的somerecipe,完全不需要修改全局conf文件。
用Python函数动态配置(多镜像批量处理)
如果需要针对多个镜像统一管理版本映射,可以在镜像配方(或者所有镜像继承的基础inc文件)中加入Python片段:
python () { image_name = d.getVar('IMAGE_BASENAME') version_map = { 'core-image-varA': '1.0.0', 'core-image-varB': '2.0.0', 'core-image-varC': '1.5.0' } if image_name in version_map: d.setVar('PREFERRED_VERSION_somerecipe', version_map[image_name]) }
这样不同镜像会自动匹配对应版本,无需逐个修改配方。
为什么你之前在local.conf的尝试没生效
local.conf是BitBake启动时最先加载的全局配置,此时IMAGE_BASENAME还未被设置(该变量要在处理具体镜像配方时才会赋值),所以你通过d.getVar('IMAGE_BASENAME')拿到的是空值,导致PREFERRED_VERSION的设置没有作用。而在镜像配方中设置时,上下文已经切换到该镜像的构建环境,IMAGE_BASENAME是正确的,配置自然生效。
备选方案:直接在DEPENDS中指定版本(部分场景适用)
如果你的配方支持,也可以在镜像的DEPENDS里直接指定版本,比如:
DEPENDS += "somerecipe@1.0.0"
不过这种方式兼容性不如PREFERRED_VERSION,部分复杂配方可能不支持,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者acevans
相关产品推荐
相关产品推荐

