diff --git a/kernel_module/test/README.md b/kernel_module/test/README.md index 10ee2a8..f44095c 100644 --- a/kernel_module/test/README.md +++ b/kernel_module/test/README.md @@ -7,3 +7,6 @@ Userland C programs used to test our kernel module. C programs require cross compiling, but give us more control over system calls. These programs can also be compiled and used on host. + +1. [myinsmod](myinsmod.c) +1. [myrmmod](myrmmod.c) diff --git a/kernel_module/test/ins_rm_mod.c b/kernel_module/test/myinsmod.c similarity index 51% rename from kernel_module/test/ins_rm_mod.c rename to kernel_module/test/myinsmod.c index 5ab3c6a..734d185 100644 --- a/kernel_module/test/ins_rm_mod.c +++ b/kernel_module/test/myinsmod.c @@ -1,9 +1,4 @@ -/* -http://stackoverflow.com/questions/5947286/how-can-linux-kernel-modules-be-loaded-from-c-code/38606527#38606527 -*/ - #define _GNU_SOURCE -#include #include #include #include @@ -13,14 +8,21 @@ http://stackoverflow.com/questions/5947286/how-can-linux-kernel-modules-be-loade #include #define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts) -#define delete_module(name, flags) syscall(__NR_delete_module, name, flags) -int main(void) { - int fd = open("hello.ko", O_RDONLY); +int main(int argc, char **argv) { + size_t image_size; + void *image; + int fd; struct stat st; + + if (argc != 2) { + puts("Usage ./prog mymodule.ko"); + return EXIT_FAILURE; + } + fd = open(argv[1], O_RDONLY); fstat(fd, &st); - size_t image_size = st.st_size; - void *image = malloc(image_size); + image_size = st.st_size; + image = malloc(image_size); read(fd, image, image_size); close(fd); if (init_module(image, image_size, "") != 0) { @@ -28,9 +30,5 @@ int main(void) { return EXIT_FAILURE; } free(image); - if (delete_module("hello", O_NONBLOCK) != 0) { - perror("delete_modul"); - return EXIT_FAILURE; - } return EXIT_SUCCESS; } diff --git a/kernel_module/test/myrmmod.c b/kernel_module/test/myrmmod.c new file mode 100644 index 0000000..1224cc4 --- /dev/null +++ b/kernel_module/test/myrmmod.c @@ -0,0 +1,22 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include + +#define delete_module(name, flags) syscall(__NR_delete_module, name, flags) + +int main(int argc, char **argv) { + if (argc != 2) { + puts("Usage ./prog mymodule"); + return EXIT_FAILURE; + } + if (delete_module(argv[1], O_NONBLOCK) != 0) { + perror("delete_modul"); + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +}