xref: /linux/samples/rust/rust_minimal.rs (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 //! Rust minimal sample.
4 
5 use kernel::prelude::*;
6 
7 module! {
8     type: RustMinimal,
9     name: "rust_minimal",
10     author: "Rust for Linux Contributors",
11     description: "Rust minimal sample",
12     license: "GPL",
13 }
14 
15 struct RustMinimal {
16     numbers: Vec<i32>,
17 }
18 
19 impl kernel::Module for RustMinimal {
20     fn init(_module: &'static ThisModule) -> Result<Self> {
21         pr_info!("Rust minimal sample (init)\n");
22         pr_info!("Am I built-in? {}\n", !cfg!(MODULE));
23 
24         let mut numbers = Vec::new();
25         numbers.push(72, GFP_KERNEL)?;
26         numbers.push(108, GFP_KERNEL)?;
27         numbers.push(200, GFP_KERNEL)?;
28 
29         Ok(RustMinimal { numbers })
30     }
31 }
32 
33 impl Drop for RustMinimal {
34     fn drop(&mut self) {
35         pr_info!("My numbers are {:?}\n", self.numbers);
36         pr_info!("Rust minimal sample (exit)\n");
37     }
38 }
39