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

1.7 KiB
Raw Permalink Blame History

文件系统

鉴于SD卡多是FAT32文件系统我们将xv6原本的文件系统替换成了FAT32文件系统并且尽可能地与原文件系统的接口保持一致或类似。目前在qemu平台上可以运行用户程序包括shell。

修改了什么

对于文件系统我们保留了xv6的disk、buf和file descriptor这几层的实现而大体上做了以下修改

  • FAT32不支持日志系统我们去掉了xv6文件系统的log层log.c
  • FAT32没有inode文件的元数据直接存放在目录项中因此我们去掉了struct inode,替换为目录项struct direntdirectory entry
  • FAT32没有link因此删除了相关的系统调用
  • 重新实现xv6文件系统fs.c中的各个函数将函数接口中的inode替换成了entry函数命名上保留原函数的特征但也做了修改以示区分ilock变为elockwritei变为ewrite等等;
  • 关于buf层由于FAT32的一个簇的大小较大并且依不同的存储设备而变因此我们目前以扇区为单位作缓存。

存在的问题

对FAT32的支持只是一个简单的实现还未经过严格的测试存在许多不足。这里需要说明几点。

  • 为了简单起见,目前新建文件时无法生成时间戳,将长文件名转换到短文件名时未排重(这会影响较低版本的 FAT 系统);
  • FAT32的文件属性不支持设备类型而原xv6文件系统中有mknod系统调用新建一个设备,并可以使用open打开。控制台输入输出就是这样打开的。为打开控制台标准输入输出,我们改用了另一种实现,即直接在内存中初始化控制台。