Bitbake将配置文件放入错误的软件包中。在我的.bbappend中忽略FILES_指令。寻找下一个地方/如何解决?

时间:2019-01-03 19:18:19

标签: packaging yocto bitbake

我创建了一个bbappend,用于从现有的(已修改的)u-boot编译u-boot fw_printenv / setenv实用程序并将其安装到$ {D}中。一切正常。我在配方中添加了一个额外的程序包,并使用FILES_告诉bitbake哪些程序包应具有哪些文件。 Bitbake似乎忽略了FILES_指令,或者其他方法正在覆盖它。我希望将$ {D} / boot的内容打包到u-boot-imx中,并将$ {D} / sbin和$ {D} / etc的内容打包到u-boot-fw-utils-imx中。 (我正在运行Yocto 2.2)

我尝试了FILES_u-boot-fw-utils-imx += "/sbin/* /etc/*"。 / sbin中的文件使其进入u-boot-fw-utils-imx rpm,但/ etc中的配置文件仍位于u-boot-imx rpm中。然后,我尝试设置FILES_u-boot-imx = "/boot /boot/*"FILES_remove_u-boot-imx = "/etc/fw_env.config",但配置文件保留在软件包u-boot-imx中。

# bitbake -e | grep ^FILES_u-boot
FILES_u-boot-fw-utils-imx=" /sbin/* /etc /etc/fw_env.config"
FILES_u-boot-imx-bin="/usr/bin/* /usr/sbin/*"
FILES_u-boot-imx="/boot /etc"
...

似乎是我后面设置了FILES_u-boot-imx。

我的大部分.bbappend文件:

do_compile_append() {
    # compile fw_printenv/setenv. default oe_runmake options are broken and yield an x86_64 executable. the inline python strips off the leading space in UBOOT_MACHINE.
    make CROSS_COMPILE=arm-poky-linux-gnueabi- CC="arm-poky-linux-gnueabi-gcc  --sysroot=${STAGING_DIR_TARGET} -I${STAGING_DIR_TCBOOTSTRAP}/usr/include -mfloat-abi=hard" V=1 -C ${S} O=${B}/${@bb.data.getVar('UBOOT_MACHINE', d, 1).strip()} env
}

do_install_append() {
    install -d ${D}/sbin
    install -d ${D}/etc
    install -m 755 ${B}/${@bb.data.getVar('UBOOT_MACHINE', d, 1).strip()}/tools/env/fw_printenv ${D}/sbin/fw_printenv
    install -m 755 ${B}/${@bb.data.getVar('UBOOT_MACHINE', d, 1).strip()}/tools/env/fw_printenv ${D}/sbin/fw_setenv
    echo "/dev/mmcblk1boot0      0xe0000         0x2000" > ${B}/${@bb.data.getVar('UBOOT_MACHINE', d, 1).strip()}/tools/env/fw_env.custom
    install -m 0644 ${B}/${@bb.data.getVar('UBOOT_MACHINE', d, 1).strip()}/tools/env/fw_env.custom ${D}/etc/fw_env.config
}

PACKAGES += "u-boot-fw-utils-imx"
INSANE_SKIP_u-boot-imx = "already-stripped ldflags"
INSANE_SKIP_u-boot-fw-utils-imx = "already-stripped ldflags"
FILES_u-boot-imx = "/boot /boot/*"
FILES_u-boot-fw-utils-imx += "/sbin/* /etc /etc/fw_env.config"

有人可以解释一下如何以所需的软件包获取我的配置文件,或者将我指向下一个要查看的地方吗?

btw:我确定有人会问为什么我不使用现有的u-boot-fw-utils配方。我的食谱是用于早期版本的u-boot。当我运行该配方时,它没有编译。一旦我解决了为x86_64而不是目标平台编译的明显问题oe_runmake。

2 个答案:

答案 0 :(得分:1)

不要使用bitbake -e | grep,而只需将其插入less,然后搜索您需要的FILES分配。分配的上方将是变量设置方式的历史记录。

答案 1 :(得分:0)

知道了!两项观察:

  1. _remove必须在软件包名称之后。
  2. 删除/ etc无效,因为$ {sysconfdir}尚未扩展

最终FILES_指令:

FILES_u-boot-imx_remove = "${sysconfdir}"
FILES_u-boot-fw-utils-imx = "/sbin /etc"

感谢罗斯的建议,将bitbake -e减少到更少。