1 // SPDX-License-Identifier: GPL-2.0
3 //! Crate for all kernel procedural macros.
8 use proc_macro::TokenStream;
10 /// Declares a kernel module.
12 /// The `type` argument should be a type which implements the [`Module`]
13 /// trait. Also accepts various forms of kernel metadata.
15 /// C header: [`include/linux/moduleparam.h`](../../../include/linux/moduleparam.h)
17 /// [`Module`]: ../kernel/trait.Module.html
22 /// use kernel::prelude::*;
26 /// name: b"my_kernel_module",
27 /// author: b"Rust for Linux Contributors",
28 /// description: b"My very own kernel module!",
33 /// permissions: 0o000,
34 /// description: b"Example of i32",
36 /// writeable_i32: i32 {
38 /// permissions: 0o644,
39 /// description: b"Example of i32",
46 /// impl kernel::Module for MyModule {
47 /// fn init() -> Result<Self> {
48 /// // If the parameter is writeable, then the kparam lock must be
49 /// // taken to read the parameter:
51 /// let lock = THIS_MODULE.kernel_param_lock();
52 /// pr_info!("i32 param is: {}\n", writeable_i32.read(&lock));
54 /// // If the parameter is read only, it can be read without locking
55 /// // the kernel parameters:
56 /// pr_info!("i32 param is: {}\n", my_i32.read());
62 /// # Supported argument types
63 /// - `type`: type which implements the [`Module`] trait (required).
64 /// - `name`: byte array of the name of the kernel module (required).
65 /// - `author`: byte array of the author of the kernel module.
66 /// - `description`: byte array of the description of the kernel module.
67 /// - `license`: byte array of the license of the kernel module (required).
68 /// - `alias`: byte array of alias name of the kernel module.
70 pub fn module(ts: TokenStream) -> TokenStream {