From 690284a3bf4e6c14d8196ed77bbc1f9a3c0868c9 Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Mon, 15 May 2017 09:08:16 +0100 Subject: [PATCH] Userland test programs --- host/Makefile | 6 +----- host/README.md | 5 ----- kernel_module/Makefile | 7 +++++-- kernel_module/delay.c | 4 +++- kernel_module/external.mk | 3 ++- kernel_module/test/Makefile | 9 +++++++++ kernel_module/test/README.md | 9 +++++++++ kernel_module/test/ins_rm_mod | Bin 0 -> 7820 bytes {host => kernel_module/test}/ins_rm_mod.c | 0 9 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 kernel_module/test/Makefile create mode 100644 kernel_module/test/README.md create mode 100755 kernel_module/test/ins_rm_mod rename {host => kernel_module/test}/ins_rm_mod.c (100%) diff --git a/host/Makefile b/host/Makefile index bf34299..2de3b3d 100644 --- a/host/Makefile +++ b/host/Makefile @@ -3,14 +3,10 @@ ccflags-y := -Wno-declaration-after-statement -std=gnu99 .PHONY: all clean -all: hello.ko ins_rm_mod.out +all: hello.ko hello.ko: hello.c make -C '/lib/modules/$(shell uname -r)/build' M='$(PWD)' modules clean: make -C '/lib/modules/$(shell uname -r)/build' M='$(PWD)' clean - rm -f ins_rm_mod.out - -ins_rm_mod.out: ins_rm_mod.c hello.c - gcc -Wall -std=gnu99 -o ins_rm_mod.out ins_rm_mod.c diff --git a/host/README.md b/host/README.md index 5e084e1..d603ce0 100644 --- a/host/README.md +++ b/host/README.md @@ -3,7 +3,6 @@ Simple things that can be demonstrated by inserting a module into the currently running host. Tested on Ubuntu 16.04. 1. [hello](hello.c) -1. [ins_rm_mod.c](ins_rm_mod.c) ## Rationale @@ -34,7 +33,3 @@ Build, insert and remove a hello world module: # Last message should be: cleanup_module dmest -T - -Insert and remove the `hello.ko` module from a C program with system calls: - - sudo ./ins_rm_mod.out diff --git a/kernel_module/Makefile b/kernel_module/Makefile index 87d35c0..2eca9b8 100644 --- a/kernel_module/Makefile +++ b/kernel_module/Makefile @@ -1,10 +1,13 @@ obj-m += $(addsuffix .o, $(notdir $(basename $(wildcard $(BR2_EXTERNAL_KERNEL_MODULE_PATH)/*.c)))) ccflags-y := -Wno-declaration-after-statement -std=gnu99 -.PHONY: all clean +.PHONY: all clean test -all: +all: test $(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' modules clean: $(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' clean + +test: + $(MAKE) -C '$(PWD)/test' diff --git a/kernel_module/delay.c b/kernel_module/delay.c index 90ac0f4..a1fa527 100644 --- a/kernel_module/delay.c +++ b/kernel_module/delay.c @@ -43,7 +43,9 @@ void cleanup_module(void) { /* This waits for the work to finish. From docstring: */ /* > Cancel @work and wait for its execution to finish. */ - cancel_work_sync(&work); + cancel_work(&work); + + /*cancel_work(&work);*/ destroy_workqueue(queue); } diff --git a/kernel_module/external.mk b/kernel_module/external.mk index a26eb55..476e933 100644 --- a/kernel_module/external.mk +++ b/kernel_module/external.mk @@ -13,7 +13,8 @@ define KERNEL_MODULE_BUILD_CMDS endef define KERNEL_MODULE_INSTALL_TARGET_CMDS - $(INSTALL) -D -m 0755 $(@D)/*.ko '$(TARGET_DIR)' + $(INSTALL) -D -m 0655 $(@D)/*.ko '$(TARGET_DIR)' + $(INSTALL) -D -m 0755 $(@D)/test/ins_rm_mod '$(TARGET_DIR)' endef $(eval $(kernel-module)) diff --git a/kernel_module/test/Makefile b/kernel_module/test/Makefile new file mode 100644 index 0000000..967dd33 --- /dev/null +++ b/kernel_module/test/Makefile @@ -0,0 +1,9 @@ +CC = gcc + +.PHONY: clean + +ins_rm_mod: ins_rm_mod.c + $(CC) -o '$@' '$<' + +clean: + rm ins_rm_mod diff --git a/kernel_module/test/README.md b/kernel_module/test/README.md new file mode 100644 index 0000000..10ee2a8 --- /dev/null +++ b/kernel_module/test/README.md @@ -0,0 +1,9 @@ +# Test + +Userland C programs used to test our kernel module. + +`sh` programs are simpler, and installed copied directly with an overlay. + +C programs require cross compiling, but give us more control over system calls. + +These programs can also be compiled and used on host. diff --git a/kernel_module/test/ins_rm_mod b/kernel_module/test/ins_rm_mod new file mode 100755 index 0000000000000000000000000000000000000000..c4f7df7530d131c63c7a96a3b74b2463f434cac8 GIT binary patch literal 7820 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 QFetoXNf9Nq!Ewp}0D8m!KL7v# literal 0 HcmV?d00001 diff --git a/host/ins_rm_mod.c b/kernel_module/test/ins_rm_mod.c similarity index 100% rename from host/ins_rm_mod.c rename to kernel_module/test/ins_rm_mod.c