diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild b/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild new file mode 100644 index 00000000000000..3674ef2591b3d9 --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable -DDEBUG + +obj-m = hello_mod.o diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c new file mode 100644 index 00000000000000..3fac57752e06ca --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c @@ -0,0 +1,21 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Simple module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int my_hello_init(void) +{ + pr_debug("Hello!\n"); + return 0; +} + +static void hello_exit(void) +{ + pr_debug("Goodbye!\n"); +} + +module_init(my_hello_init); +module_exit(hello_exit); diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.ko b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.ko new file mode 100644 index 00000000000000..8e5928d05646f9 Binary files /dev/null and b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.ko differ diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod new file mode 100644 index 00000000000000..b246934d6da29e --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/1-2-test-mod/hello_mod.o + diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.c b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.o b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.o new file mode 100644 index 00000000000000..533e748a291938 Binary files /dev/null and b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.mod.o differ diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.o b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.o new file mode 100644 index 00000000000000..de0ee87220e3be Binary files /dev/null and b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.o differ diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/modules.order b/tools/labs/skels/kernel_modules/1-2-test-mod/modules.order new file mode 100644 index 00000000000000..8903a407a3d6d1 --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/1-2-test-mod/hello_mod.ko diff --git a/tools/labs/skels/kernel_modules/3-error-mod/Kbuild b/tools/labs/skels/kernel_modules/3-error-mod/Kbuild new file mode 100644 index 00000000000000..7bf41fb63f9589 --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = err_mod.o diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c new file mode 100644 index 00000000000000..95cb3f9f24253c --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c @@ -0,0 +1,26 @@ +#include +#include +#include +/* TODO: add missing kernel headers */ + +MODULE_DESCRIPTION("Error module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int n1, n2; + +static int err_init(void) +{ + n1 = 1; n2 = 2; + pr_info("n1 is %d, n2 is %d\n", n1, n2); + + return 0; +} + +static void err_exit(void) +{ + pr_info("sum is %d\n", n1 + n2); +} + +module_init(err_init); +module_exit(err_exit); diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.ko b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.ko new file mode 100644 index 00000000000000..0f4b520e8c8785 Binary files /dev/null and b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.ko differ diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod new file mode 100644 index 00000000000000..f26dd73788f752 --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/3-error-mod/err_mod.o + diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.c b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.o b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.o new file mode 100644 index 00000000000000..c0702d29647afb Binary files /dev/null and b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.mod.o differ diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.o b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.o new file mode 100644 index 00000000000000..b617c5f5685b50 Binary files /dev/null and b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.o differ diff --git a/tools/labs/skels/kernel_modules/3-error-mod/modules.order b/tools/labs/skels/kernel_modules/3-error-mod/modules.order new file mode 100644 index 00000000000000..f6c71931f809b4 --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/3-error-mod/err_mod.ko diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild new file mode 100644 index 00000000000000..4ca58479ebb7a2 --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild @@ -0,0 +1,8 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +# TODO: add rules to create a multi object module + +EXTRA_CFLAGS = -Wall -g + +obj-m = supermodule.o +supermodule-y = mod1.o mod2.o diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c new file mode 100644 index 00000000000000..08511866c460a1 --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c @@ -0,0 +1,27 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Multi-file module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +extern int add(int a, int b); + +static int n1, n2; + +static int my_hello_init(void) +{ + n1 = 1; n2 = 2; + pr_info("n1 is %d, n2 is %d\n", n1, n2); + + return 0; +} + +static void hello_exit(void) +{ + pr_info("sum is %d\n", add(n1, n2)); +} + +module_init(my_hello_init); +module_exit(hello_exit); diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod1.o b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.o new file mode 100644 index 00000000000000..f9a8f6ff1dbdf0 Binary files /dev/null and b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.o differ diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c new file mode 100644 index 00000000000000..bc0af867d7c87c --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c @@ -0,0 +1,4 @@ +int add(int a, int b) +{ + return a + b; +} diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod2.o b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.o new file mode 100644 index 00000000000000..34553fb960b94b Binary files /dev/null and b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.o differ diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/modules.order b/tools/labs/skels/kernel_modules/4-multi-mod/modules.order new file mode 100644 index 00000000000000..4132334545fa39 --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/4-multi-mod/supermodule.ko diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.ko b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.ko new file mode 100644 index 00000000000000..700a45580eeeaf Binary files /dev/null and b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.ko differ diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod new file mode 100644 index 00000000000000..605bad052eddec --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/4-multi-mod/mod1.o /home/igor/linux/tools/labs/skels/./kernel_modules/4-multi-mod/mod2.o + diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.c b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.o b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.o new file mode 100644 index 00000000000000..6ec544d399ef9a Binary files /dev/null and b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.mod.o differ diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.o b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.o new file mode 100644 index 00000000000000..543a0e7d590ac1 Binary files /dev/null and b/tools/labs/skels/kernel_modules/4-multi-mod/supermodule.o differ diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild new file mode 100644 index 00000000000000..5bac1c5f47c1be --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild @@ -0,0 +1,4 @@ +# TODO: add flags to generate debug information +EXTRA_CFLAGS = -Wall -g + +obj-m = oops_mod.o diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/modules.order b/tools/labs/skels/kernel_modules/5-oops-mod/modules.order new file mode 100644 index 00000000000000..0acff83b7149c2 --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/5-oops-mod/oops_mod.ko diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c new file mode 100644 index 00000000000000..9fd1448572a94a --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +MODULE_DESCRIPTION("Oops generating module"); +MODULE_AUTHOR("So2rul Esforever"); +MODULE_LICENSE("GPL"); + +static int my_oops_init(void) +{ + char *p = 0; + + pr_info("before init\n"); + *p = 'a'; + pr_info("after init\n"); + + return 0; +} + +static void my_oops_exit(void) +{ + pr_info("module goes all out\n"); +} + +module_init(my_oops_init); +module_exit(my_oops_exit); diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.ko b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.ko new file mode 100644 index 00000000000000..7dec498d686e21 Binary files /dev/null and b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.ko differ diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod new file mode 100644 index 00000000000000..4dc166ae3d890e --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/5-oops-mod/oops_mod.o + diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.c b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.o b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.o new file mode 100644 index 00000000000000..54a168128f157b Binary files /dev/null and b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.mod.o differ diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.o b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.o new file mode 100644 index 00000000000000..f4f7c17905be5f Binary files /dev/null and b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.o differ diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild b/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild new file mode 100644 index 00000000000000..2c5fe9cfd4de33 --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = cmd_mod.o diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c new file mode 100644 index 00000000000000..3bd758897f3600 --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c @@ -0,0 +1,26 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Command-line args module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static char *str = "the worm"; + +module_param(str, charp, 0000); +MODULE_PARM_DESC(str, "A simple string"); + +static int __init cmd_init(void) +{ + pr_info("Early bird gets %s\n", str); + return 0; +} + +static void __exit cmd_exit(void) +{ + pr_info("Exit, stage left\n"); +} + +module_init(cmd_init); +module_exit(cmd_exit); diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.ko b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.ko new file mode 100644 index 00000000000000..e41f6409b0fe84 Binary files /dev/null and b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.ko differ diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod new file mode 100644 index 00000000000000..4f4c72aa43e29d --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/6-cmd-mod/cmd_mod.o + diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.c b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.o b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.o new file mode 100644 index 00000000000000..18df2090edfe2d Binary files /dev/null and b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.mod.o differ diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.o b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.o new file mode 100644 index 00000000000000..7b9b6eb4ecbbfa Binary files /dev/null and b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.o differ diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/modules.order b/tools/labs/skels/kernel_modules/6-cmd-mod/modules.order new file mode 100644 index 00000000000000..b6eba05084f53f --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/6-cmd-mod/cmd_mod.ko diff --git a/tools/labs/skels/kernel_modules/7-list-proc/Kbuild b/tools/labs/skels/kernel_modules/7-list-proc/Kbuild new file mode 100644 index 00000000000000..45eb7676b7ec51 --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = list_proc.o diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c new file mode 100644 index 00000000000000..ba1ad44cad70ff --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c @@ -0,0 +1,35 @@ +#include +#include +#include +/* TODO: add missing headers */ +#include + +MODULE_DESCRIPTION("List current processes"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int my_proc_init(void) +{ + struct task_struct *p; + + /* TODO: print current process pid and its name */ + pr_info("Current process pid = %d; process name = %s\n", + current->pid, current->comm); + + /* TODO: print the pid and name of all processes */ + pr_info("Processes\n"); + for_each_process(p) + pr_info("pid = %d; process name = %s\n", p->pid, p->comm); + + return 0; +} + +static void my_proc_exit(void) +{ + /* TODO: print current process pid and name */ + pr_info("Current process pid = %d; process name = %s\n", + current->pid, current->comm); +} + +module_init(my_proc_init); +module_exit(my_proc_exit); diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.ko b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.ko new file mode 100644 index 00000000000000..0755eefcad5609 Binary files /dev/null and b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.ko differ diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod new file mode 100644 index 00000000000000..a34a19776024de --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/7-list-proc/list_proc.o + diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.c b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.o b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.o new file mode 100644 index 00000000000000..f8f6dd4b53edaf Binary files /dev/null and b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.mod.o differ diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.o b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.o new file mode 100644 index 00000000000000..86c32befbbc547 Binary files /dev/null and b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.o differ diff --git a/tools/labs/skels/kernel_modules/7-list-proc/modules.order b/tools/labs/skels/kernel_modules/7-list-proc/modules.order new file mode 100644 index 00000000000000..b2eb38e84f5631 --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/7-list-proc/list_proc.ko diff --git a/tools/labs/skels/kernel_modules/8-kdb/Kbuild b/tools/labs/skels/kernel_modules/8-kdb/Kbuild new file mode 100644 index 00000000000000..4453b28ab39c4d --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = hello_kdb.o diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c new file mode 100644 index 00000000000000..656a265d288927 --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c @@ -0,0 +1,142 @@ +#include +#include +#include + +int kdb_write_address; +EXPORT_SYMBOL(kdb_write_address); + +noinline void dummy_func18(void) +{ + panic("Hello KDB has paniced!"); +} +noinline void dummy_func17(void) +{ + dummy_func18(); +} +noinline void dummy_func16(void) +{ + dummy_func17(); +} +noinline void dummy_func15(void) +{ + dummy_func16(); +} +noinline void dummy_func14(void) +{ + dummy_func15(); +} +noinline void dummy_func13(void) +{ + dummy_func14(); +} +noinline void dummy_func12(void) +{ + dummy_func13(); +} +noinline void dummy_func11(void) +{ + dummy_func12(); +} +noinline void dummy_func10(void) +{ + dummy_func11(); +} +noinline void dummy_func9(void) +{ + dummy_func10(); +} +noinline void dummy_func8(void) +{ + dummy_func9(); +} +noinline void dummy_func7(void) +{ + dummy_func8(); +} +noinline void dummy_func6(void) +{ + dummy_func7(); +} +noinline void dummy_func5(void) +{ + dummy_func6(); +} +noinline void dummy_func4(void) +{ + dummy_func5(); +} +noinline void dummy_func3(void) +{ + dummy_func4(); +} +noinline void dummy_func2(void) +{ + dummy_func3(); +} +noinline void dummy_func1(void) +{ + dummy_func2(); +} + +static int hello_proc_show(struct seq_file *m, void *v) { + seq_printf(m, "Hello proc!\n"); + return 0; +} + +static int hello_proc_open(struct inode *inode, struct file *file) { + return single_open(file, hello_proc_show, NULL); +} + +static int edit_write(struct file *file, const char *buffer, + size_t count, loff_t *data) +{ + kdb_write_address += 1; + return count; +} + +static int bug_write(struct file *file, const char *buffer, + size_t count, loff_t *data) +{ + dummy_func1(); + return count; +} + +static const struct proc_ops edit_proc_ops = { + .proc_open = hello_proc_open, + .proc_read = seq_read, + .proc_write = edit_write, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static const struct proc_ops bug_proc_ops = { + .proc_open = hello_proc_open, + .proc_read = seq_read, + .proc_write = bug_write, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static int __init hello_proc_init(void) { + struct proc_dir_entry *file; + file = proc_create("hello_kdb_bug", 0, NULL, &bug_proc_ops); + if (file == NULL) { + return -ENOMEM; + } + + file = proc_create("hello_kdb_break", 0, NULL, &edit_proc_ops); + if (file == NULL) { + remove_proc_entry("hello_kdb_bug", NULL); + return -ENOMEM; + } + return 0; +} + +static void __exit hello_proc_exit(void) { + remove_proc_entry("hello_kdb_bug", NULL); + remove_proc_entry("hello_kdb_break", NULL); +} + +MODULE_LICENSE("GPL"); +module_init(hello_proc_init); +module_exit(hello_proc_exit); diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.ko b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.ko new file mode 100644 index 00000000000000..a0e973377bbcdb Binary files /dev/null and b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.ko differ diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod new file mode 100644 index 00000000000000..c1d85ebd2e4641 --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/8-kdb/hello_kdb.o + diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.c b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.o b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.o new file mode 100644 index 00000000000000..f41ad7a3b94139 Binary files /dev/null and b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.mod.o differ diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.o b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.o new file mode 100644 index 00000000000000..56a56f171ef9b1 Binary files /dev/null and b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.o differ diff --git a/tools/labs/skels/kernel_modules/8-kdb/modules.order b/tools/labs/skels/kernel_modules/8-kdb/modules.order new file mode 100644 index 00000000000000..fcd288c0d12ff6 --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/8-kdb/hello_kdb.ko diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild b/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild new file mode 100644 index 00000000000000..a0d5f3af5202f1 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild @@ -0,0 +1,3 @@ +EXTRA_CFLAGS = -Wall -g + +obj-m = dyndbg.o diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c new file mode 100644 index 00000000000000..e9071e5a723535 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c @@ -0,0 +1,32 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Dyndbg kernel module"); +MODULE_AUTHOR("Dyndbg"); +MODULE_LICENSE("GPL"); + +void my_debug_func(void) +{ + pr_debug("Important dyndbg debug message1\n"); + pr_debug("Important dyndbg debug message2\n"); + pr_debug("Verbose dyndbg debug message\n"); +} +EXPORT_SYMBOL(my_debug_func); + + +static int dyndbg_init(void) +{ + printk(KERN_INFO "Hi dyndbg!\n" ); + my_debug_func(); + return 0; +} + +static void dyndbg_exit(void) +{ + printk(KERN_INFO "Bye dyndbg!\n" ); + my_debug_func(); +} + +module_init(dyndbg_init); +module_exit(dyndbg_exit); diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.ko b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.ko new file mode 100644 index 00000000000000..d91d60a9fc82c8 Binary files /dev/null and b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.ko differ diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod new file mode 100644 index 00000000000000..bfc6ded2e6c9e6 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod @@ -0,0 +1,2 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/9-dyndbg/dyndbg.o + diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.c b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.c new file mode 100644 index 00000000000000..8309f67e10c7df --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.c @@ -0,0 +1,27 @@ +#include +#define INCLUDE_VERMAGIC +#include +#include +#include + +BUILD_SALT; + +MODULE_INFO(vermagic, VERMAGIC_STRING); +MODULE_INFO(name, KBUILD_MODNAME); + +__visible struct module __this_module +__section(".gnu.linkonce.this_module") = { + .name = KBUILD_MODNAME, + .init = init_module, +#ifdef CONFIG_MODULE_UNLOAD + .exit = cleanup_module, +#endif + .arch = MODULE_ARCH_INIT, +}; + +#ifdef CONFIG_RETPOLINE +MODULE_INFO(retpoline, "Y"); +#endif + +MODULE_INFO(depends, ""); + diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.o b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.o new file mode 100644 index 00000000000000..8ba96765170bc2 Binary files /dev/null and b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.mod.o differ diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.o b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.o new file mode 100644 index 00000000000000..61db6e74995fa1 Binary files /dev/null and b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.o differ diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/modules.order b/tools/labs/skels/kernel_modules/9-dyndbg/modules.order new file mode 100644 index 00000000000000..61f36c5662e1c9 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/modules.order @@ -0,0 +1 @@ +/home/igor/linux/tools/labs/skels/./kernel_modules/9-dyndbg/dyndbg.ko