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.