While it is always preferable to work with sources integrated
into the Linux kernel sources, if you need an external kernel
module, the hello-mod.bb
recipe is available
as a template from which you can create your own out-of-tree
Linux kernel module recipe.
This template recipe is located in the
poky
Git repository of the
Yocto Project Source Repository
at:
poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
To get started, copy this recipe to your layer and give it a
meaningful name (e.g. mymodule_1.0.bb
).
In the same directory, create a directory named
files
where you can store any source files,
patches, or other files necessary for building
the module that do not come with the sources.
Finally, update the recipe as appropriate for the module.
Typically you will need to set the following variables:
Depending on the build system used by the module sources, you might
need to make some adjustments.
For example, a typical module Makefile
looks
much like the one provided with the hello-mod
template:
obj-m := hello.o SRC := $(shell pwd) all: $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install: $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install ...
The important point to note here is the
KERNEL_SRC
variable.
The class module.bbclass
sets this variable,
as well as the
KERNEL_PATH
variable to
${
with the necessary Linux kernel build information to build modules.
If your module STAGING_KERNEL_DIR
}Makefile
uses a different
variable, you might want to override the
do_compile()
step, or create a patch to
the Makefile
to work with the more typical
KERNEL_SRC
or KERNEL_PATH
variables.
After you have prepared your recipe, you will likely want to include the module in your images. To do this, see the documentation for the following variables in the Yocto Project Reference Manual and set one of them as appropriate in your machine configuration file:
modules are often not required for boot and can be excluded from certain build configurations. The following allows for the most flexibility:
MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule"
Where the value is derived by appending the module filename without
the .ko
extension to the string
"kernel-module-".
Because the variable is
RRECOMMENDS
and not a
RDEPENDS
variable, the build will not fail if this module is not available
to include in the image.