From a407e656b60f1209a4f83c8403f35c7c86af4b93 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Sun, 2 Mar 2025 17:51:18 +0100 Subject: [PATCH] try implement 02_module_params in rust params: in module! macro don't exist yet --- 01_basic_module/basic_module_in_rust.rs | 12 ++++---- 02_module_params/Makefile | 5 +++- .../{test_module.c => module_params_in_c.c} | 6 ++-- 02_module_params/module_params_in_rust.rs | 30 +++++++++++++++++++ 4 files changed, 43 insertions(+), 10 deletions(-) rename 02_module_params/{test_module.c => module_params_in_c.c} (89%) create mode 100644 02_module_params/module_params_in_rust.rs diff --git a/01_basic_module/basic_module_in_rust.rs b/01_basic_module/basic_module_in_rust.rs index 317a151..0f67d42 100644 --- a/01_basic_module/basic_module_in_rust.rs +++ b/01_basic_module/basic_module_in_rust.rs @@ -1,24 +1,24 @@ use kernel::prelude::*; module! { - type: RustOutOfTree, - name: "test_module", + type: BasicModule, + name: "basic_module", author: "Florian RICHER ", description: "Un module noyau qui affiche un message", license: "GPL", } -struct RustOutOfTree; +struct BasicModule; -impl kernel::Module for RustOutOfTree { +impl kernel::Module for BasicModule { fn init(_module: &'static ThisModule) -> Result { pr_info!("Bonjour! Le module est chargé.\n"); - Ok(RustOutOfTree) + Ok(BasicModule) } } -impl Drop for RustOutOfTree { +impl Drop for BasicModule { fn drop(&mut self) { pr_info!("Au revoir! Le module est déchargé.\n"); } diff --git a/02_module_params/Makefile b/02_module_params/Makefile index b909b3c..399fb6b 100644 --- a/02_module_params/Makefile +++ b/02_module_params/Makefile @@ -1,4 +1,7 @@ -obj-m += test_module.o +MODULE_NAME = module_params + +obj-m += $(MODULE_NAME)_in_c.o +obj-m += $(MODULE_NAME)_in_rust.o all: make -C $(LINUX_MODULES_FOLDER)/build M=$(PWD) modules diff --git a/02_module_params/test_module.c b/02_module_params/module_params_in_c.c similarity index 89% rename from 02_module_params/test_module.c rename to 02_module_params/module_params_in_c.c index 4970cc2..c0f562e 100644 --- a/02_module_params/test_module.c +++ b/02_module_params/module_params_in_c.c @@ -37,13 +37,13 @@ static int __init module_params_init(void) pr_info("%d arguments for myintarray.\n", arr_argc); - pr_info("Module avec paramètre chargé.\n"); + pr_info("Module avec paramètres chargé.\n"); return 0; } static void __exit module_params_exit(void) { - pr_info("Module avec paramètre déchargé.\n"); + pr_info("Module avec paramètres déchargé.\n"); } module_init(module_params_init); @@ -51,5 +51,5 @@ module_exit(module_params_exit); MODULE_LICENSE("MIT License"); MODULE_AUTHOR("Florian RICHER "); -MODULE_DESCRIPTION("Un module noyau avec paramètre déchargé."); +MODULE_DESCRIPTION("Un module noyau avec paramètres."); MODULE_VERSION("1.0"); diff --git a/02_module_params/module_params_in_rust.rs b/02_module_params/module_params_in_rust.rs new file mode 100644 index 0000000..ff30658 --- /dev/null +++ b/02_module_params/module_params_in_rust.rs @@ -0,0 +1,30 @@ +use kernel::prelude::*; + +module! { + type: ModuleWithParams, + name: "test_module", + author: "Florian RICHER ", + description: "Un module noyau avec paramètres déchargé.", + license: "GPL" + // Syntax as below not supported yet see https://patchew.org/linux/20250218-module-params-v3-v7-0-5e1afabcac1b%40kernel.org/ + // params: type { + // default: default_value, + // description: "Description", + // } +} + +struct ModuleWithParams; + +impl kernel::Module for ModuleWithParams { + fn init(_module: &'static ThisModule) -> Result { + pr_info!("Module avec paramètres chargé.\n"); + + Ok(ModuleWithParams) + } +} + +impl Drop for ModuleWithParams { + fn drop(&mut self) { + pr_info!("Module avec paramètres.\n"); + } +}