Remove toplevel trash, add debugfs and kernel config fragment

This commit is contained in:
Ciro Santilli
2017-05-11 13:04:30 +01:00
parent e06171b483
commit bb8f4eb795
12 changed files with 62 additions and 61 deletions

View File

@@ -1,6 +0,0 @@
config BR2_PACKAGE_KERNEL_MODULE
bool "kernel_module"
help
Kernel module hello world.
http://example.com/

View File

@@ -1,10 +0,0 @@
obj-m += hello.o
ccflags-y := -Wno-declaration-after-statement -std=gnu99
.PHONY: all clean
all:
$(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' modules
clean:
$(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' clean

View File

@@ -30,3 +30,4 @@ The Linux kernel version can be found with:
1. Buildroot 1. Buildroot
1. [hello](kernel_module/package/kernel_module/src/hello.c) 1. [hello](kernel_module/package/kernel_module/src/hello.c)
1. [hello2](kernel_module/package/kernel_module/src/hello2.c) 1. [hello2](kernel_module/package/kernel_module/src/hello2.c)
1. [debugfs](kernel_module/package/kernel_module/src/debugfs.c)

View File

@@ -1,7 +0,0 @@
# TODO
- build kernel module against a given kernel tree
- build out of tree kernel module into the kernel image
- http://stackoverflow.com/questions/7353851/insert-linux-kernel-module-statically
- http://stackoverflow.com/questions/8421970/compiling-a-driver-as-a-part-of-a-kernel-not-as-a-module
- .ko file format vs .o http://stackoverflow.com/questions/10476990/difference-between-o-and-ko-file

View File

@@ -1 +0,0 @@
name: KERNEL_MODULE

View File

@@ -1,20 +0,0 @@
################################################################################
#
# kernel_module
#
################################################################################
KERNEL_MODULE_VERSION = 1.0
KERNEL_MODULE_SITE = ..
KERNEL_MODULE_SITE_METHOD = local
define KERNEL_MODULE_BUILD_CMDS
$(MAKE) -C '$(@D)' LINUX_DIR='$(LINUX_DIR)' PWD='$(@D)' CC='$(TARGET_CC)' LD='$(TARGET_LD)'
endef
define KERNEL_MODULE_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 '$(@D)/kernel_module.ko' '$(TARGET_DIR)/kernel_module.ko'
endef
$(eval $(kernel-module))
$(eval $(generic-package))

13
hello.c
View File

@@ -1,13 +0,0 @@
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "hello init\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "hello cleanup\n");
}

4
kernel-config-frag Normal file
View File

@@ -0,0 +1,4 @@
# If you change this file, you need to run:
# rm -rf buildroot/output/build/linux-*.*.*/
# before ./run
CONFIG_DEBUG_FS=y

View File

@@ -1,4 +1,4 @@
obj-m += hello.o hello2.o obj-m += debugfs.o hello.o hello2.o
ccflags-y := -Wno-declaration-after-statement -std=gnu99 ccflags-y := -Wno-declaration-after-statement -std=gnu99
.PHONY: all clean .PHONY: all clean

View File

@@ -0,0 +1,45 @@
/*
Adapted from: https://github.com/chadversary/debugfs-tutorial/blob/47b3cf7ca47208c61ccb51b27aac6f9f932bfe0b/example1/debugfs_example1.c
Requires CONFIG_DEBUG_FS.
mkdir /debugfs
mount -t debugfs none /sys/kernel/debug
insmod /debugfs.ko
cd /debugfs/kernel_module_cheat
cat myfile
Output:
42
*/
#include <linux/debugfs.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static struct dentry *dir = 0;
static u32 value = 42;
int init_module(void)
{
struct dentry *file;
dir = debugfs_create_dir("kernel_module_cheat", 0);
if (!dir) {
printk(KERN_ALERT "debugfs_create_dir failed");
return -1;
}
file = debugfs_create_u32("myfile", 0666, dir, &value);
if (!file) {
printk(KERN_ALERT "debugfs_create_u32 failed");
return -1;
}
return 0;
}
void cleanup_module(void)
{
debugfs_remove_recursive(dir);
}

View File

@@ -1,5 +1,11 @@
/* /*
Hello world module. Hello world module.
dmesg -c
insmod hello.ko
dmesg -c | grep 'hello init'
rmmod hello.ko
dmesg -c | grep 'hello cleanup'
*/ */
#include <linux/module.h> #include <linux/module.h>

8
run
View File

@@ -2,7 +2,9 @@
set -e set -e
cd buildroot cd buildroot
make BR2_EXTERNAL="$(pwd)/../kernel_module" qemu_x86_64_defconfig make BR2_EXTERNAL="$(pwd)/../kernel_module" qemu_x86_64_defconfig
echo 'BR2_PACKAGE_KERNEL_MODULE=y' >> .config echo '
# kernel_module-reconfigure rebuilds the modules if they were modified. BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="../kernel-config-frag"
env -u LD_LIBRARY_PATH make BR2_JLEVEL="$(($(nproc) - 2))" kernel_module-reconfigure all BR2_PACKAGE_KERNEL_MODULE=y
' >> .config
env -u LD_LIBRARY_PATH make BR2_JLEVEL="$(($(nproc) - 2))" kernel_module-rebuild all
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user