use buildroot develop linux kernel module
prepare buildroot source tree
git clone https://git.buildroot.net/buildrootcd buildrootgit checkout 2022.08.1 # checkout a stable version
create directory
mkdir package/lkhellomkdir package/lkhello/src
add Config.in
$EDITOR package/lkhello/Config.in
write:
config BR2_PACKAGE_LKHELLObool "lkhello"depends on BR2_LINUX_KERNELhelplinux kernel hellocomment "lkhello needs a Linux kernel to be built"depends on !BR2_LINUX_KERNEL
add lkhello.mk
$EDITOR package/lkhello/lkhello.mk
write:
################################################################################## lkhello#################################################################################LKHELLO_VERSION = 0.1LKHELLO_SITE = "$(TOPDIR)/package/lkhello/src"LKHELLO_SITE_METHOD = localLKHELLO_MODULE_MAKE_OPTS = CONFIG_LKHELLO=m$(eval $(kernel-module))$(eval $(generic-package))
write module
add Kconfig
$EDITOR package/lkhello/src/Kconfig
write:
menuconfig LKHELLOtristate "linux kernel helloworld"
add Makefile
$EDITOR package/lkhello/src/Makefile
write:
obj-m := lkhello.o
add lkhello.c
$EDITOR package/lkhello/src/Makefile
write:
#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int lkhello_init(void) {printk(KERN_ALERT "Hello, World\n");return 0;}static void lkhello_exit(void) {printk(KERN_ALERT "Bye, World\n");}module_init(lkhello_init);module_exit(lkhello_exit);
add to buildroot menu
$EDITOR package/Config.in
add something like other package’s define:
--- a/package/Config.in+++ b/package/Config.in@@ -2680,4 +2680,8 @@ menu "Text editors and viewers"source "package/vim/Config.in"endmenu+menu "my packages"+ source "package/lkhello/Config.in"+endmenu+endmenu
all is done
all is done, now you can select ’lkhello’ use:
make menuconfig
Target packages --->my packages --->[*] lkhello
select lkhello and compile firmware.
boot up firmware.
and ’modprobe lkhello’ to print a ’Hello, World’ in kernel log
use ’rmmod lkhello’ to print a ’Bye, World’ in kernel log