This document shows what a simple kernel module looks like and how it can be integrated as a package in Buildroot.
obj-m := mymod.o mymod-objs := mymod-test1.o mymod-test2.o ccflags-y := -I$(src)/include
#include <linux/module.h> #include <linux/kernel.h> #includestatic int mymod_init(void) { pr_info("Entering\n"); foobar(); return 0; } static void mymod_exit(void) { pr_info("Exiting\n"); } module_init(mymod_init) module_exit(mymod_exit) MODULE_LICENSE("GPLv2"); MODULE_AUTHOR("Thomas Petazzoni");
#include <linux/kernel.h> void foobar(void) { pr_info("In foobar!\n"); }
#ifndef __MYMOD_H__ #define __MYMOD_H__ void foobar(void); #endif /* __MYMOD_H__ */
The following .mk
assumes that the kernel module
code above is stored locally
in $(HOME)/example-mod
.
################################################################################ # # example-mod # ################################################################################ EXAMPLE_MOD_SITE = $(HOME)/example-mod EXAMPLE_MOD_SITE_METHOD = local $(eval $(kernel-module)) $(eval $(generic-package))
config BR2_PACKAGE_EXAMPLE_MOD bool "example-mod" depends on BR2_LINUX_KERNEL help This is an example kernel module. comment "example-mod needs a Linux kernel to be built" depends on !BR2_LINUX_KERNEL
Just the following change:
diff --git a/package/Config.in b/package/Config.in index e860f72..ef3a453 100644 --- a/package/Config.in +++ b/package/Config.in @@ -368,6 +368,7 @@ endif source "package/eudev/Config.in" source "package/evemu/Config.in" source "package/evtest/Config.in" + source "package/example-mod/Config.in" source "package/fan-ctrl/Config.in" source "package/fbtft/Config.in" source "package/fconfig/Config.in"
>>> example-mod undefined Syncing from source dir /home/thomas/example-mod rsync -au --chmod=u=rwX,go=rX --exclude .svn --exclude .git --exclude .hg --exclude .bzr --exclude CVS /home/thomas/example-mod/ /home/thomas/projets/buildroot/output/build/example-mod-undefined >>> example-mod undefined Configuring >>> example-mod undefined Building >>> example-mod undefined Building kernel module(s) PATH="/home/thomas/projets/buildroot/output/host/bin:/home/thomas/projets/buildroot/output/host/sbin:/home/thomas/projets/buildroot/output/host/usr/bin:/home/thomas/projets/buildroot/output/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/thomas/sys/bin:/home/thomas/.gem/ruby/2.1.0/bin" BR_BINARIES_DIR=/home/thomas/projets/buildroot/output/images /usr/bin/make -j5 -C /home/thomas/projets/buildroot/output/build/linux-4.5 HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" ARCH=arm INSTALL_MOD_PATH=/home/thomas/projets/buildroot/output/target CROSS_COMPILE="/home/thomas/projets/buildroot/output/host/usr/bin/arm-linux-" DEPMOD=/home/thomas/projets/buildroot/output/host/sbin/depmod PWD=/home/thomas/projets/buildroot/output/build/example-mod-undefined/. M=/home/thomas/projets/buildroot/output/build/example-mod-undefined/. modules CC [M] /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod-test1.o CC [M] /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod-test2.o LD [M] /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod.o Building modules, stage 2. MODPOST 1 modules CC /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod.mod.o LD [M] /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod.ko >>> example-mod undefined Installing to target >>> example-mod undefined Installing kernel module(s) PATH="/home/thomas/projets/buildroot/output/host/bin:/home/thomas/projets/buildroot/output/host/sbin:/home/thomas/projets/buildroot/output/host/usr/bin:/home/thomas/projets/buildroot/output/host/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/thomas/sys/bin:/home/thomas/.gem/ruby/2.1.0/bin" BR_BINARIES_DIR=/home/thomas/projets/buildroot/output/images /usr/bin/make -j5 -C /home/thomas/projets/buildroot/output/build/linux-4.5 HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" ARCH=arm INSTALL_MOD_PATH=/home/thomas/projets/buildroot/output/target CROSS_COMPILE="/home/thomas/projets/buildroot/output/host/usr/bin/arm-linux-" DEPMOD=/home/thomas/projets/buildroot/output/host/sbin/depmod PWD=/home/thomas/projets/buildroot/output/build/example-mod-undefined/. M=/home/thomas/projets/buildroot/output/build/example-mod-undefined/. modules_install INSTALL /home/thomas/projets/buildroot/output/build/example-mod-undefined/./mymod.ko DEPMOD 4.5.0