新增SysFS (#250)

* 添加sysfs

* 注册sysfs

* 添加sysfs相关

* 添加rust-anlyzer辅助配置

* 将设备与sysfs相关联

* 添加单独的文件管理sysfs下的文件夹
This commit is contained in:
TingHuang
2023-04-21 16:03:42 +08:00
committed by GitHub
parent cde5492f72
commit dd9f1fc1a4
11 changed files with 697 additions and 4 deletions

View File

@ -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)]

View File

@ -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),
}
}
}

View File

@ -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]