mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-21 18:33:23 +00:00
新增SysFS (#250)
* 添加sysfs * 注册sysfs * 添加sysfs相关 * 添加rust-anlyzer辅助配置 * 将设备与sysfs相关联 * 添加单独的文件管理sysfs下的文件夹
This commit is contained in:
@ -1,5 +1,9 @@
|
||||
use super::{driver::Driver, Device, DeviceState, IdTable};
|
||||
use crate::libs::spinlock::SpinLock;
|
||||
use super::{driver::Driver, Device, DeviceError, DeviceState, IdTable};
|
||||
use crate::{
|
||||
filesystem::sysfs::{self, SYS_BUS_INODE},
|
||||
kdebug,
|
||||
libs::spinlock::SpinLock,
|
||||
};
|
||||
use alloc::{collections::BTreeMap, sync::Arc};
|
||||
use core::fmt::Debug;
|
||||
use lazy_static::lazy_static;
|
||||
@ -54,7 +58,30 @@ pub trait BusDriver: Driver {
|
||||
}
|
||||
|
||||
/// @brief: 总线设备trait,所有总线都应实现该trait
|
||||
pub trait Bus: Device {}
|
||||
pub trait Bus: Device {
|
||||
/// @brief: 注册bus,在sysfs中生成相应文件夹
|
||||
/// @parameter name: 文件夹名
|
||||
/// @return: 注册成功,返回(),注册失败,返回错误码
|
||||
fn register_bus(&self, name: &str) -> Result<(), DeviceError> {
|
||||
match self.register_device(name) {
|
||||
Ok(_) => {
|
||||
let bus = sysfs::bus::bus_register(name).unwrap();
|
||||
kdebug!(
|
||||
"After register_bus: ls /sys/bus/: {:?}",
|
||||
SYS_BUS_INODE().list()
|
||||
);
|
||||
match sysfs::bus::bus_init(&bus) {
|
||||
Ok(_) => {
|
||||
kdebug!("After register_bus: ls /sys/bus/{}: {:?}", name, bus.list());
|
||||
return Ok(());
|
||||
}
|
||||
Err(_) => Err(DeviceError::RegisterError),
|
||||
}
|
||||
}
|
||||
Err(err) => Err(err),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief: 总线管理结构体
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -1,3 +1,4 @@
|
||||
use crate::filesystem::sysfs::devices::device_register;
|
||||
use core::{any::Any, fmt::Debug};
|
||||
|
||||
pub mod bus;
|
||||
@ -49,6 +50,7 @@ pub enum DeviceError {
|
||||
InitializeFailed, // 初始化错误
|
||||
NoDeviceForDriver, // 没有合适的设备匹配驱动
|
||||
NoDriverForDevice, // 没有合适的驱动匹配设备
|
||||
RegisterError, // 注册失败
|
||||
}
|
||||
|
||||
/// @brief: 将u32类型转换为设备状态类型
|
||||
@ -84,4 +86,14 @@ pub trait Device: Any + Send + Sync + Debug {
|
||||
/// @parameter: None
|
||||
/// @return: 该设备唯一标识
|
||||
fn get_id_table(&self) -> IdTable;
|
||||
|
||||
/// @brief: 设备注册
|
||||
/// @parameter: name: 设备名
|
||||
/// @return: 操作成功,返回(),操作失败,返回错误码
|
||||
fn register_device(&self, name: &str) -> Result<(), DeviceError> {
|
||||
match device_register(name) {
|
||||
Ok(_) => Ok(()),
|
||||
Err(_) => Err(DeviceError::RegisterError),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -345,6 +345,7 @@ pub fn platform_bus_init() {
|
||||
BUS_PLATFORM_DEVICE.clone(),
|
||||
);
|
||||
BUS_PLATFORM_DEVICE.set_state(BusState::Initialized);
|
||||
let _ = BUS_PLATFORM_DEVICE.register_bus("platform");
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
Reference in New Issue
Block a user