Skip to content
Advertisement

Yocto Custom Image Recipe does not install a file into the final rootfs

I have written a custom Yocto Bitbake Recipe that I have pasted below. I do a certain ROOTFS_POSTPROCESS_COMMAND as shown below as part of my complete image build that includes this recipe. Currently, the image is during the image do_rootfs step because the TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts file is missing from the rootfs directory.

cleanup_ble_baud_rate_function() {
    mv ${IMAGE_ROOTFS}/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts ${IMAGE_ROOTFS}/lib/firmware/ti-connectivity/TIInit_11.8.32.bts
}

ROOTFS_POSTPROCESS_COMMAND_append_am57xx-phycore-rdk_arago = " cleanup_ble_baud_rate_function;"

Here is the recipe:

DESCRIPTION = "Bluetooth Daemon and DBus Service"
LICENSE = "BU-License"
LIC_FILES_CHKSUM = "file://${CUSTOM_LAYER_DIR}/licenses/${LICENSE};md5=d41d8cd98f00b204e9800998ecf8427e"

# We depend on python and dbus
RDEPENDS_${PN} += "libedit bluez5"
DEPENDS += "libedit bluez5"

PACKAGE_ARCH = "${MACHINE_ARCH}"

PR = "r1"

SRC_URI += "file://bluetooth.service 
       file://bluetooth.socket 
       file://ble-service.py 
       file://setup-bluetooth-radio.sh 
           file://TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts locate
"

S = "${WORKDIR}"

PACKAGES = "${PN}"

FILES_${PN} += "/lib/"
FILES_${PN} += "/lib/firmware/"
FILES_${PN} += "/lib/firmware/ti-connectivity/"
FILES_${PN} += "/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts"

do_install() {
  install -d ${D}${bindir}
  install -m 755 ble-service.py ${D}${bindir}
  install -m 755 setup-bluetooth-radio.sh ${D}${bindir}

  install -d ${D}/lib/firmware/ti-connectivity
  install -m 755 TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts ${D}/lib/firmware/ti-connectivity/

  install -d ${D}${sysconfdir}/systemd/system
  install -d ${D}${sysconfdir}/systemd/system/multi-user.target.wants
  install -m 0644 ${S}/bluetooth.service ${D}${sysconfdir}/systemd/system
  ln -s ../bluetooth.service ${D}${sysconfdir}/systemd/system/multi-user.target.wants/bluetooth.service

  # Actually use socket based activation for this service
  install -d ${D}${sysconfdir}/systemd/system/sysinit.target.wants
  ln -s ../bluetooth.service ${D}${sysconfdir}/systemd/system/sysinit.target.wants/bluetooth.service
}

After the image build fails, when I do a Linux updatedb and locate command, the following results are displayed:

name@machine:/am57xx/build(master)>sudo updatedb
name@machine:~/am57xx/build(master)>locate TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts /home/name/am57xx/build/tmp-external-linaro-toolchain/sysroots/am57xx-phycore-rdk/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/build/tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/ble-service/1.0-r1/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/build/tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/ble-service/1.0-r1/image/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/build/tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/ble-service/1.0-r1/package/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/build/tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/ble-service/1.0-r1/packages-split/ble-service/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/build/tmp-external-linaro-toolchain/work/am57xx_phycore_rdk-linux-gnueabi/ble-service/1.0-r1/sysroot-destdir/lib/firmware/ti-connectivity/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts
/home/name/am57xx/layers/meta-custom/recipes-networking/ble-service/files/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts

Advertisement

Answer

I agree with Oleksandr on this one. Don’t use the postprocess command, it’s likely not doing what you think. Instead, just make sure you use ${S} and your FILES_${PN} could be much simpler.

install -m 755 ${S}/TIInit_11.8.32-115200_no_dsm-TI_P2.136.bts ${D}/lib/firmware/ti-connectivity/

FILES_${PN} += "${libdir}/firmware/ti-connectivity/*"

Debugging your recipe install in tmp/work/target/recipename will help you figure out where things are going.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement