at v6.1-rc2 2.2 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2 3//! Crate for all kernel procedural macros. 4 5mod helpers; 6mod module; 7 8use proc_macro::TokenStream; 9 10/// Declares a kernel module. 11/// 12/// The `type` argument should be a type which implements the [`Module`] 13/// trait. Also accepts various forms of kernel metadata. 14/// 15/// C header: [`include/linux/moduleparam.h`](../../../include/linux/moduleparam.h) 16/// 17/// [`Module`]: ../kernel/trait.Module.html 18/// 19/// # Examples 20/// 21/// ```ignore 22/// use kernel::prelude::*; 23/// 24/// module!{ 25/// type: MyModule, 26/// name: b"my_kernel_module", 27/// author: b"Rust for Linux Contributors", 28/// description: b"My very own kernel module!", 29/// license: b"GPL", 30/// params: { 31/// my_i32: i32 { 32/// default: 42, 33/// permissions: 0o000, 34/// description: b"Example of i32", 35/// }, 36/// writeable_i32: i32 { 37/// default: 42, 38/// permissions: 0o644, 39/// description: b"Example of i32", 40/// }, 41/// }, 42/// } 43/// 44/// struct MyModule; 45/// 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: 50/// { 51/// let lock = THIS_MODULE.kernel_param_lock(); 52/// pr_info!("i32 param is: {}\n", writeable_i32.read(&lock)); 53/// } 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()); 57/// Ok(Self) 58/// } 59/// } 60/// ``` 61/// 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. 69#[proc_macro] 70pub fn module(ts: TokenStream) -> TokenStream { 71 module::module(ts) 72}