https://github.com/kuangjux/rcore-fat
🦀️ rCore-Tutorial with fat32 file system
https://github.com/kuangjux/rcore-fat
Last synced: 8 months ago
JSON representation
🦀️ rCore-Tutorial with fat32 file system
- Host: GitHub
- URL: https://github.com/kuangjux/rcore-fat
- Owner: KuangjuX
- License: gpl-3.0
- Created: 2021-07-18T14:35:06.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-09-25T08:45:27.000Z (about 4 years ago)
- Last Synced: 2025-01-16T01:38:26.312Z (9 months ago)
- Language: Rust
- Homepage:
- Size: 236 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# rCore-fat
Develop fat32 file system for rcore-Tutorial-v3## Usage
```shell
cd os
make run
```## Summary
[FAT32 File System Summary](https://github.com/KuangjuX/FAT32/blob/main/README.md)
### 内核中的文件系统
在内核中,我们使用 OSInode 来表示文件,该结构体包含读写标签、当前偏移、以及对应虚拟文件的引用。对于文件和目录,在内核中都使用 OSInode 来描述,而对于其他可读写对象,例如设备、Pipe则被当作抽象文件处理。在 rCore-Tutorial 的文件系统中使用 File Trait 来描述抽象文件,并为每种文件类型实现 Trait 中对应的方法,当系统调用操作文件时,则调用 Trait 中对应的方法来操作文件,但对于 FAT32 文件系统来说,对于操作 FAT32 的实际文件来说是不够的,因此我在这里将文件分为了两类,一类为真实的文件,一类则为抽象文件(复用 File Trait)用来描述 Stdio、网卡等设备抽象文件的调用。
### 文件系统库
在 FAT32 文件系统库的设计中,我们使用 `fat_manager` 来统一管理 FAT32 文件系统的磁盘内容:
在操作系统启动时, `fat32_manager` 首先启动文件系统,引导扇区的数据并进行校验。`fat_manager` 首先会读入 0 号扇区,获得隐藏扇区数并初始化缓存偏移量,之后读取逻辑 0 扇区,即引导扇区,获取 FAT32 的基本信息,随后读取u FSInfo 扇区,获取簇信息,进行签名校验。
当获取文件系统的元信息之后,`fat_manager` 会根据已有信息计算 FAT 所处的位置,初始化 `FAT` 结构体,然后根据已有信息生成虚拟根目录项,随后返回 `fat_manager` 供操作系统调用。