如何在KAS构建Yocto时默认添加${BSPDIR}至bblayers.conf?
使用KAS构建Yocto时自动添加${BSPDIR}的方法
问题场景
我用KAS构建Yocto项目,部分配方里用${BSPDIR}指定本地源码路径,比如:
KERNEL_SRC = "git://${BSPDIR}/local_repos/linux-5.4.142;protocol=file"
不用KAS的话,执行source poky/oe-init-build-env build后,Yocto会自动在bblayers.conf里生成BSPDIR的定义:
BBPATH = "${TOPDIR}" BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
但KAS生成的bblayers.conf里只有TOPDIR相关配置:
${TOPDIR}/../work/poky/meta \ ${TOPDIR}/../work/poky/meta-poky" BBPATH ?= "${TOPDIR}" BBFILES ??= ""
这直接导致构建失败,只能手动把配方里的${BSPDIR}替换成${TOPDIR}/../才能正常构建。
解决方法
有两种方法能让KAS自动添加${BSPDIR}的定义,不用再手动改配方:
方法1:在KAS配置文件中注入到local.conf
打开你的KAS配置文件(比如kas.yml),添加local_conf_header段,直接定义BSPDIR:
local_conf_header: bspdir_def: | BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
这样KAS生成构建配置时,会把这个变量加到local.conf里,和oe-init-build-env的效果完全一致,配方里的${BSPDIR}就能正常识别。
方法2:直接加到bblayers.conf中
如果一定要把BSPDIR放到bblayers.conf里,就在KAS配置文件里用bblayers_conf_header:
bblayers_conf_header: bspdir_def: | BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
这样KAS生成bblayers.conf时会自动带上这个变量定义。
一般更推荐第一种方法,因为Yocto的自定义变量通常放在local.conf里,bblayers.conf主要用来管理层路径。
内容的提问来源于stack exchange,提问作者Aspire
相关产品推荐
相关产品推荐

