xref: /DragonOS/kernel/src/driver/base/device/init.rs (revision 2eab6dd743e94a86a685f1f3c01e599adf86610a)
106d5e247SLoGin use alloc::{string::ToString, sync::Arc};
2*2eab6dd7S曾俊 use log::info;
3b087521eSChiichen 
4*2eab6dd7S曾俊 use crate::driver::base::{
506d5e247SLoGin     device::{
6*2eab6dd7S曾俊         set_sys_dev_block_kset, set_sys_dev_char_kset, set_sys_devices_virtual_kset, sys_dev_kset,
7*2eab6dd7S曾俊         sys_devices_kset, DeviceManager, DEVICES_KSET_INSTANCE, DEVICE_MANAGER, DEV_KSET_INSTANCE,
806d5e247SLoGin     },
906d5e247SLoGin     kobject::KObject,
1006d5e247SLoGin     kset::KSet,
1106d5e247SLoGin };
12b087521eSChiichen 
1391e9d4abSLoGin use system_error::SystemError;
1491e9d4abSLoGin 
devices_init() -> Result<(), SystemError>1506d5e247SLoGin pub fn devices_init() -> Result<(), SystemError> {
1606d5e247SLoGin     // 创建 `/sys/devices` 目录
1706d5e247SLoGin     {
1806d5e247SLoGin         let devices_kset = KSet::new("devices".to_string());
1906d5e247SLoGin         devices_kset
2006d5e247SLoGin             .register(None)
2106d5e247SLoGin             .expect("register devices kset failed");
2206d5e247SLoGin 
2306d5e247SLoGin         unsafe {
2406d5e247SLoGin             DEVICES_KSET_INSTANCE = Some(devices_kset);
2506d5e247SLoGin             // 初始化全局设备管理器
2606d5e247SLoGin             DEVICE_MANAGER = Some(DeviceManager::new());
2706d5e247SLoGin         }
2806d5e247SLoGin     }
2906d5e247SLoGin 
3008a2ee40SLoGin     // 创建 `/sys/devices/virtual` 目录
3108a2ee40SLoGin     {
3208a2ee40SLoGin         let devices_kset = sys_devices_kset();
3308a2ee40SLoGin         let virtual_kset = KSet::new("virtual".to_string());
3408a2ee40SLoGin         let parent = devices_kset.clone() as Arc<dyn KObject>;
3508a2ee40SLoGin         virtual_kset.set_parent(Some(Arc::downgrade(&parent)));
3608a2ee40SLoGin 
3708a2ee40SLoGin         virtual_kset
3808a2ee40SLoGin             .register(Some(devices_kset))
3908a2ee40SLoGin             .expect("register virtual kset failed");
4008a2ee40SLoGin         unsafe { set_sys_devices_virtual_kset(virtual_kset) };
4108a2ee40SLoGin     }
4208a2ee40SLoGin 
4306d5e247SLoGin     // 创建 `/sys/dev` 目录
4406d5e247SLoGin     {
4506d5e247SLoGin         let dev_kset = KSet::new("dev".to_string());
4606d5e247SLoGin         dev_kset.register(None).expect("register dev kset failed");
4706d5e247SLoGin         unsafe {
4806d5e247SLoGin             DEV_KSET_INSTANCE = Some(dev_kset);
4906d5e247SLoGin         }
5006d5e247SLoGin     }
5106d5e247SLoGin 
5206d5e247SLoGin     // 创建 `/sys/dev/block` 目录
5306d5e247SLoGin     {
54*2eab6dd7S曾俊         // debug!("create /sys/dev/block");
5506d5e247SLoGin         let dev_kset = sys_dev_kset();
5606d5e247SLoGin         let dev_block_kset = KSet::new("block".to_string());
5706d5e247SLoGin         let parent = dev_kset.clone() as Arc<dyn KObject>;
5806d5e247SLoGin         dev_block_kset.set_parent(Some(Arc::downgrade(&parent)));
5906d5e247SLoGin 
6006d5e247SLoGin         dev_block_kset
6106d5e247SLoGin             .register(Some(dev_kset))
6206d5e247SLoGin             .expect("register dev block kset failed");
6308a2ee40SLoGin 
6408a2ee40SLoGin         unsafe { set_sys_dev_block_kset(dev_block_kset) };
6506d5e247SLoGin     }
6606d5e247SLoGin 
6706d5e247SLoGin     // 创建 `/sys/dev/char` 目录
6806d5e247SLoGin     {
69*2eab6dd7S曾俊         // debug!("create /sys/dev/char");
7006d5e247SLoGin         let dev_kset = sys_dev_kset();
7106d5e247SLoGin         let dev_char_kset = KSet::new("char".to_string());
7206d5e247SLoGin         let parent = dev_kset.clone() as Arc<dyn KObject>;
7306d5e247SLoGin         dev_char_kset.set_parent(Some(Arc::downgrade(&parent)));
7406d5e247SLoGin 
7506d5e247SLoGin         dev_char_kset
7606d5e247SLoGin             .register(Some(dev_kset))
7706d5e247SLoGin             .expect("register dev char kset failed");
7808a2ee40SLoGin 
7908a2ee40SLoGin         unsafe { set_sys_dev_char_kset(dev_char_kset) };
8006d5e247SLoGin     }
8106d5e247SLoGin 
82*2eab6dd7S曾俊     info!("devices init success");
83a03c4f9dSLoGin 
8406d5e247SLoGin     return Ok(());
8506d5e247SLoGin }
86