xref: /DragonOS/docs/kernel/libs/unified-init.md (revision c635d8a9cfe25bc11779f323ef0c7d7a0f597d4a)
1# unified-init 统一初始化库
2
3:::{note}
4本文作者:龙进 <longjin@DragonOS.org>
5
62023年12月25日
7:::
8
9## 1. 简介
10
11该库位于`kernel/crates/unified-init`中.
12提供统一初始化宏,用于将函数注册到统一初始化列表中. 便于统一进行初始化.
13
14需要注意的是,初始化器的数组是no_mangle的,因此其命名应当遵守`模块_初始化器`的规则,防止重名导致意想不到的错误.
15
16
17## 2. 用法
18
19
20```rust
21use system_error::SystemError;
22use unified_init::define_unified_initializer_slice;
23use unified_init_macros::unified_init;
24
25/// 初始化函数都将会被放到这个列表中
26define_unified_initializer_slice!(INITIALIZER_LIST);
27
28#[unified_init(INITIALIZER_LIST)]
29fn init1() -> Result<(), SystemError> {
30   Ok(())
31}
32
33#[unified_init(INITIALIZER_LIST)]
34fn init2() -> Result<(), SystemError> {
35   Ok(())
36}
37
38fn main() {
39    assert_eq!(INITIALIZER_LIST.len(), 2);
40}
41
42```
43
44## 3.开发
45
46需要测试的时候可以在`main.rs`写测试代码,
47然后在当前目录执行 `cargo expand --bin unified-init-expand`
48就可以看到把proc macro展开后的代码了.
49
50## 4. Maintainer
51
52龙进 <longjin@DragonOS.org>
53
54
55