While it is always preferable to build a module driver from source and install it into the Yocto image, in somecases you may need a kernel module driver to be installed from pre-built .ko module. This is needed when you want build your proprietary images without releasing your source code. Below is the template recipe for installing a pre-built module into the Yocto kernel Image.
Sample recipe file
DESCRIPTION = "Install any module driver from pre-built .ko files"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
inherit linux-kernel-base
# We need the kernel to be staged (unpacked, patched and configured) before
# we can grab the source and make the kernel-devsrc package
do_install[depends] += "virtual/kernel:do_populate_sysroot"
B = "${STAGING_KERNEL_BUILDDIR}"
KERNEL_VERSION = "${@get_kernelversion_headers('${B}')}"
SRC_URI = " \
file://sample_module_driver.ko \
"
S = "${WORKDIR}"
do_compile(){
echo compiling
}
do_install() {
MODULE_DIR=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/input
install -d $MODULE_DIR
install -m 755 ${S}/sample_module_driver.ko $MODULE_DIR
}
FILES_${PN} += "\
/lib \
/lib/modules/${KERNEL_VERSION}kernel/drivers/input/sample_module_driver.ko \
"
KERNEL_MODULE_AUTOLOAD = "sample_module_driver"
In the above recipe file, in order to get the KERNEL_VERSION which contains the path of module driver path(For example, 4.1.15-1.0.0+g0e2316f), “linux-kernel-base” class has to be inherited. To get started, copy this recipe to your layer and give it an appropriate name based on your implementation. In the same directory, create a directory named files where you need to copy your pre-built module. In this example it is sample_module_driver.ko.