maturin的文件系统在底层是RAM块，上层是通过调用外部库[rust-fatfs](https://github.com/rafalh/rust-fatfs)实现的。



#### file模块

```rust
mod backend;
mod device;
mod epoll;
mod fd_manager;
mod fs_stat;
mod kstat;
mod pipe;
mod poll_events;
mod stdio;
mod vfs;
pub mod socket;

use crate::timer::TimeSpec;
use alloc::vec::Vec;
use core::any::Any;

pub use fatfs::SeekFrom;

/// 文件类抽象
pub trait File: Send + Sync + AsAny {
    ...
}

pub use device::{...};
pub use backend::{BackEndFile, SyncPolicy};
pub use device::{FileDisc, OpenFlags};
pub use epoll::{EpollFile, EpollEvent, EpollEventType, EpollCtl};
pub use fd_manager::FdManager;
pub use fs_stat::FsStat;
pub use kstat::normal_file_mode;
pub use kstat::{Kstat, StMode};
pub use pipe::{Pipe, RingBuffer};
pub use poll_events::PollEvents;
pub use socket::Socket;
pub use vfs::{...};
```

##### device

```rust
lazy_static::lazy_static! {
    //static ref MEMORY_FS: Arc<Mutex<FileSystem<FsIO, FsTP, FsOCC>>> = Arc::new(Mutex::new(new_memory_mapped_fs()));
    static ref MEMORY_FS: FATFileSystem = new_memory_mapped_fs();
}

/// 通过info级的日志打印出根目录下的所有文件
pub fn list_files_at_root() {...}

/// 初始化硬盘的内容
pub fn fs_init() {
    // 1. 生成目录/dev, /lib, /tmp, /dev/shm
	// 2. 把根目录下的库文件链接到/lib目录下
    // 3. 生成目录/sbin, 并把根目录下的测试程序链接到/sbin目录下
    // 4. 创建/proc目录及其文件
    // 5. 创建/dev/disc目录及其文件
}

/// 若干函数
```



##### epoll

##### socket

##### vfs

##### backend

##### fd_manager

##### fs_stat

##### kstat

##### pipe

##### poll_events

##### stdio