os/fs/sysfs/builders/
kernel.rs

1//! 内核信息 sysfs 树构建器
2
3use alloc::string::ToString;
4use alloc::sync::Arc;
5
6use crate::fs::sysfs::inode::{SysfsAttr, SysfsInode};
7use crate::vfs::{FileMode, FsError, Inode};
8
9/// 构建内核信息 sysfs 树
10pub fn build_kernel_info(root: &Arc<SysfsInode>) -> Result<(), FsError> {
11    let kernel_inode = root.lookup("kernel")?;
12    let kernel_dir = kernel_inode
13        .downcast_ref::<SysfsInode>()
14        .ok_or(FsError::InvalidArgument)?;
15
16    // /sys/kernel/version
17    let version_attr = SysfsAttr {
18        name: "version".to_string(),
19        mode: FileMode::from_bits_truncate(0o444),
20        show: Arc::new(|| {
21            // TODO: 从内核配置获取编译时间
22            Ok("#1 SMP Mon Jan 1 00:00:00 UTC 2025\n".to_string())
23        }),
24        store: None,
25    };
26    kernel_dir.add_child("version", SysfsInode::new_attribute(version_attr))?;
27
28    // /sys/kernel/osrelease
29    let osrelease_attr = SysfsAttr {
30        name: "osrelease".to_string(),
31        mode: FileMode::from_bits_truncate(0o444),
32        show: Arc::new(|| {
33            // TODO: 从内核配置获取版本号
34            Ok("0.1.0\n".to_string())
35        }),
36        store: None,
37    };
38    kernel_dir.add_child("osrelease", SysfsInode::new_attribute(osrelease_attr))?;
39
40    Ok(())
41}