Yocto编译 Out Of tree Kernel Module的介绍
在编译kernel modules的时候,最方便不过的方法当然是in tree, 但是在有些情况下in tree不一定总是可行,比如是自己开发的downstream的kernel module或者vendor厂商提供的downstream driver。这个时候,我们就需要考虑enable yocto的out of tree kernel module Compiling。
一、按例,yocto还是给开发者提供了编译out of tree module的bbclass,poky/meta/classes/module.bbclass。
在这里呢,需要关注两个重点module_do_compile和module_do_install。module_do_compile主要是进行out of tree module的编译,module_do_install主要是进行安装。
modules.bbclass:
MODULES_INSTALL_TARGET ?= "modules_install"
/在do_compile的参数中,将KERNEL_PATH进行传输/
module_do_compile() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}
KERNEL_VERSION=${KERNEL_VERSION}
CC="${KERNEL_CC}" LD="${KERNEL_LD}"
AR="${KERNEL_AR}"
O=${STAGING_KERNEL_BUILDDIR}
KBUILD_EXTRA_SYMBOLS="${KBUILD_EXTRA_SYMBOLS}"
${MAKE_TARGETS}
}
module_do_install() {
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
oe_runmake DEPMOD=echo MODLIB="${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}"
INSTALL_FW_PATH="${D}${nonarch_base_libdir}/firmware"
CC="${KERNEL_CC}" LD="${KERNEL_LD}"
O=${STAGING_KERNEL_BUILDDIR}
${MODULES_INSTALL_TARGET}
....
}
同时,这个class配置virtual/kernel作为dependency,确保在build 这个module之前kernel已经被built了
kernel-module-split calss负责将kernel的module打包成kernel-module-xxx
二:同时,yocto还提供了example recipe,poky/meta-skeleton/recipes-kernel/hello-mod,但是hello-mod缺少了编译的target,在此我们完善下。
Module recipe example:
SUMMARY="Module recipe example"
LICENSE = "GPLv2"
...
/引用上述提及的module.bbclass,MODULES_INSTALL_TARGET已经有deafult的值/
inherit module
/我们还许配置MAKE_TARGETS以进行out of tree的编译。/
MAKE_TARGETS="modules"
SRC_URI = "..."
S = "..."
三:至此,我们已经完成了recipe的编写,最后只需要在makefile定义相关的目标即可
modules:
make -C $(KERNEL_SRC) M=$(PWD) modules
modules_install:
make -C $(KERNEL_SRC) M=$(PWD) modules_install
clean:
make -C $(KERNEL_SRC) M=$(PWD) clean

浙公网安备 33010602011771号