os/fs/sysfs/builders/
rtc.rs

1//! RTC 设备 sysfs 树构建器
2//!
3//! 在 /sys/class/rtc/ 下创建指向 /sys/devices/platform/ 的符号链接
4
5use alloc::format;
6use alloc::sync::Arc;
7
8use crate::fs::sysfs::device_registry;
9use crate::fs::sysfs::inode::SysfsInode;
10use crate::vfs::{FsError, Inode};
11
12/// 构建 RTC 设备 sysfs 树
13///
14/// 在 /sys/class/rtc/ 下创建指向 /sys/devices/platform/<device>/ 的符号链接
15pub fn build_rtc_devices(root: &Arc<SysfsInode>) -> Result<(), FsError> {
16    let class_inode = root.lookup("class")?;
17    let class = class_inode
18        .downcast_ref::<SysfsInode>()
19        .ok_or(FsError::InvalidArgument)?;
20
21    let rtc_inode = class.lookup("rtc")?;
22    let rtc_dir = rtc_inode
23        .downcast_ref::<SysfsInode>()
24        .ok_or(FsError::InvalidArgument)?;
25
26    // 为每个 RTC 设备创建符号链接
27    for dev_info in device_registry::list_rtc_devices() {
28        // 创建符号链接: /sys/class/rtc/rtc0 -> ../../devices/platform/rtc0
29        let target = format!("../../devices/platform/{}", dev_info.name);
30        let symlink = SysfsInode::new_symlink(target);
31        rtc_dir.add_child(&dev_info.name, symlink)?;
32    }
33
34    Ok(())
35}