Tips

manual patching

According to src/poky/meta/classes-recipe/kernel-yocto.bbclass kernel patches are skipped if 'patchdir' exists. ``kernel-yocto.bbclass`` cannot handle this special case so patches needs to be applied manually.

OVERLAY_PREFIX="${SOURCE_PREFIX}/linux_5_15/overlay"
SRC_URI:append = " \
        file://0003-xxx.patch;patchdir=${OVERLAY_PREFIX};subdir=${OVERLAY_PREFIX} \
        file://0004-xxx.patch;patchdir=${OVERLAY_PREFIX};subdir=${OVERLAY_PREFIX} \
"
 
do_patch:prepend() {
    patch -b -d ${OVERLAY_PREFIX} -p 1 -i 0003-xxx.patch
    patch -b -d ${OVERLAY_PREFIX} -p 1 -i 0004-xxx.patch
}

It is possible to use generic Yocto patcher and call

bb.build.exec_func('patch_do_patch', d)

as it is performed by recipes:

  • src/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
  • src/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd_1.195.bb

black list recipe

  • create bbappend and set COMPATIBLE_MACHINE = “x” to prevent use of recipe
  • BBMASK
    • BBMASK += "meta-rity/meta/recipes-core/init-ifupdown/init-ifupdown_%.bbappend"

Pass env variables to bitbake

To control additional or user defined recipe's variables from env (usefull for CI) add variables to BB_ENV_PASSTHROUGH_ADDITIONS:

export foo="BAR"
export BB_ENV_PASSTHROUGH_ADDITIONS="${BB_ENV_PASSTHROUGH_ADDITIONS} foo BUILD_VERSION CI_COMMIT_BRANCH CI_COMMIT_SHORT_SHA"
bitbake ...

add files to rootfs

IMAGE_PREPROCESS_COMMAND += “rsync -a –exclude=.git ${FILE_SRC}/rootfs/* ${WORKDIR}/rootfs;”

override .conf

No override or appends mechanism. But some workaround possible:

  1. override variables in local.conf
  2. create new conf file and inherit old one with require
  3. create new conf file with the same name to mask old file (take care of layer priority)

MACHINEOVERRIDES

When creatung new machine.conf based on existing one MACHINEOVERRIDES can be used:

machine-overrides-extender.bbclass

logging

inherit logging
 
bb.debug("HELLO = %s" % HELLO)