* .bb文件错误:在yocto sumo中使用if else条件时解析器错误

时间:2018-10-16 17:16:26

标签: python yocto bitbake recipe

我想对目标1使用内核4.14,对目标2使用内核4.9。并且我添加了以下代码,并且同样工作正常。

SRC_URI = "${@oe.utils.conditional('BASEMACHINE', 'target1', 'file://kernel/k-4.14/net/kernel/', '', d)} \
           ${@oe.utils.conditional('BASEMACHINE', 'target2', 'file://kernel/k-4.9/net/kernel/', '', d)}"

S = "${@oe.utils.conditional('BASEMACHINE', 'target1', '${WORKDIR}/kernel/k-4.14/net/kernel/', '', d)} \
     ${@oe.utils.conditional('BASEMACHINE', 'target2', '${WORKDIR}/kernel/k-4.9/net/kernel/', '', d)}"

但是对于所有其他目标,如果存在路径“ kernel / k-3.18 / net / kernel /”,我想使用它。如果不存在,则抛出错误。而且我无法将此条件添加到bb文件中。我已经使用过if else条件并尝试过,但是出现解析器错误。即使我尝试添加python代码,但也无济于事。下面是我尝试过的代码段。

    work_dir = d.getVar("WORKDIR", expand=True)
    KERNEL_3_18_PATH_FILE_CMD = ''
    KERNEL_3_18_PATH  = ''
    python do_package_prepend() {
        if os.path.exists(work_dir+/kernel/k-3.18/net/kernel/):
            KERNEL_3_18_PATH_FILE_CMD = "kernel/k-3.18/net/kernel/"
            KERNEL_3_18_PATH = work_dir + "/kernel/k-3.18/net/kernel/"
}
    SRC_URI = "${@oe.utils.conditional('BASEMACHINE', 'target2', 'file://kernel/k-4.9/net/kernel/', 'file://KERNEL_3_18_PATH_FILE_CMD', d)}"

    S = "${@oe.utils.conditional('BASEMACHINE', 'target2', 'file://kernel/k-4.9/net/kernel/', 'KERNEL_3_18_PATH', d)}"

请您帮忙。我是python和yocto的新手

1 个答案:

答案 0 :(得分:0)

一种更简单的解决方案是为每台计算机的内核配方设置PREFERRED_VERSION。

例如,基于oe-core的BSP执行以下操作:

meta-yocto-bsp/conf/machine/beaglebone-yocto.conf:
PREFERRED_VERSION_linux-yocto ?= "4.18%"