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