module!() { /* proc-macro */ }Expand description
Declares a kernel module.
The type argument should be a type which implements the Module
trait. Also accepts various forms of kernel metadata.
C header: include/linux/moduleparam.h
Examples
ⓘ
use kernel::prelude::*;
module!{
type: MyModule,
name: b"my_kernel_module",
author: b"Rust for Linux Contributors",
description: b"My very own kernel module!",
license: b"GPL",
params: {
my_i32: i32 {
default: 42,
permissions: 0o000,
description: b"Example of i32",
},
writeable_i32: i32 {
default: 42,
permissions: 0o644,
description: b"Example of i32",
},
},
}
struct MyModule;
impl kernel::Module for MyModule {
fn init() -> Result<Self> {
// If the parameter is writeable, then the kparam lock must be
// taken to read the parameter:
{
let lock = THIS_MODULE.kernel_param_lock();
pr_info!("i32 param is: {}\n", writeable_i32.read(&lock));
}
// If the parameter is read only, it can be read without locking
// the kernel parameters:
pr_info!("i32 param is: {}\n", my_i32.read());
Ok(Self)
}
}Supported argument types
type: type which implements theModuletrait (required).name: byte array of the name of the kernel module (required).author: byte array of the author of the kernel module.description: byte array of the description of the kernel module.license: byte array of the license of the kernel module (required).alias: byte array of alias name of the kernel module.alias_rtnl_link: byte array of thertnl_link_aliasof the kernel module (mutually exclusive withalias).params: parameters for the kernel module, as described below.
Supported parameter types
bool: Corresponds to Cboolparam type.i8: No equivalent C param type.u8: Corresponds to Ccharparam type.i16: Corresponds to Cshortparam type.u16: Corresponds to Cushortparam type.i32: Corresponds to Cintparam type.u32: Corresponds to Cuintparam type.i64: No equivalent C param type.u64: Corresponds to Cullongparam type.isize: No equivalent C param type.usize: No equivalent C param type.str: Corresponds to Ccharpparam type. Reading returns a byte slice.ArrayParam<T,N>: Corresponds to C parameters created usingmodule_param_array. An array ofT’s of length at mostN.
invbool is unsupported: it was only ever used in a few modules.
Consider using a bool and inverting the logic instead.