xv6-k210/doc/构建调试-文件系统.md

21 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文件系统
鉴于SD卡多是FAT32文件系统我们将xv6原本的文件系统替换成了FAT32文件系统并且尽可能地与原文件系统的接口保持一致或类似。目前在qemu平台上可以运行用户程序包括shell。
## 修改了什么
对于文件系统我们保留了xv6的disk、buf和file descriptor这几层的实现而大体上做了以下修改
+ FAT32不支持日志系统我们去掉了xv6文件系统的log层log.c
+ FAT32没有inode文件的元数据直接存放在目录项中因此我们去掉了`struct inode`,替换为目录项`struct dirent`directory entry
+ FAT32没有link因此删除了相关的系统调用
+ 重新实现xv6文件系统fs.c中的各个函数将函数接口中的inode替换成了entry函数命名上保留原函数的特征但也做了修改以示区分如`ilock`变为`elock`、`writei`变为`ewrite`等等;
+ 关于buf层由于FAT32的一个簇的大小较大并且依不同的存储设备而变因此我们目前以扇区为单位作缓存。
## 存在的问题
对FAT32的支持只是一个简单的实现还未经过严格的测试存在许多不足。这里需要说明几点。
+ 为了简单起见,目前新建文件时无法生成时间戳,将长文件名转换到短文件名时未排重(这会影响较低版本的 FAT 系统);
+ FAT32的文件属性不支持设备类型而原xv6文件系统中有`mknod`系统调用新建一个设备,并可以使用`open`打开。控制台输入输出就是这样打开的。为打开控制台标准输入输出,我们改用了另一种实现,即直接在内存中初始化控制台。