Userland test programs

This commit is contained in:
Ciro Santilli
2017-05-15 09:08:16 +01:00
parent 9370512176
commit 690284a3bf
9 changed files with 29 additions and 14 deletions

View File

@@ -3,14 +3,10 @@ ccflags-y := -Wno-declaration-after-statement -std=gnu99
.PHONY: all clean .PHONY: all clean
all: hello.ko ins_rm_mod.out all: hello.ko
hello.ko: hello.c hello.ko: hello.c
make -C '/lib/modules/$(shell uname -r)/build' M='$(PWD)' modules make -C '/lib/modules/$(shell uname -r)/build' M='$(PWD)' modules
clean: clean:
make -C '/lib/modules/$(shell uname -r)/build' M='$(PWD)' 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

View File

@@ -3,7 +3,6 @@
Simple things that can be demonstrated by inserting a module into the currently running host. Tested on Ubuntu 16.04. 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. [hello](hello.c)
1. [ins_rm_mod.c](ins_rm_mod.c)
## Rationale ## Rationale
@@ -34,7 +33,3 @@ Build, insert and remove a hello world module:
# Last message should be: cleanup_module # Last message should be: cleanup_module
dmest -T dmest -T
Insert and remove the `hello.ko` module from a C program with system calls:
sudo ./ins_rm_mod.out

View File

@@ -1,10 +1,13 @@
obj-m += $(addsuffix .o, $(notdir $(basename $(wildcard $(BR2_EXTERNAL_KERNEL_MODULE_PATH)/*.c)))) obj-m += $(addsuffix .o, $(notdir $(basename $(wildcard $(BR2_EXTERNAL_KERNEL_MODULE_PATH)/*.c))))
ccflags-y := -Wno-declaration-after-statement -std=gnu99 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 $(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' modules
clean: clean:
$(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' clean $(MAKE) -C '$(LINUX_DIR)' M='$(PWD)' clean
test:
$(MAKE) -C '$(PWD)/test'

View File

@@ -43,7 +43,9 @@ void cleanup_module(void)
{ {
/* This waits for the work to finish. From docstring: */ /* This waits for the work to finish. From docstring: */
/* > Cancel @work and wait for its execution to finish. */ /* > Cancel @work and wait for its execution to finish. */
cancel_work_sync(&work); cancel_work(&work);
/*cancel_work(&work);*/
destroy_workqueue(queue); destroy_workqueue(queue);
} }

View File

@@ -13,7 +13,8 @@ define KERNEL_MODULE_BUILD_CMDS
endef endef
define KERNEL_MODULE_INSTALL_TARGET_CMDS 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 endef
$(eval $(kernel-module)) $(eval $(kernel-module))

View File

@@ -0,0 +1,9 @@
CC = gcc
.PHONY: clean
ins_rm_mod: ins_rm_mod.c
$(CC) -o '$@' '$<'
clean:
rm ins_rm_mod

View File

@@ -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.

BIN
kernel_module/test/ins_rm_mod Executable file

Binary file not shown.