FatFs源码阅读笔记

 FatFs就不介绍了,这里使用的版本是0.07e。

 1. f_mount函数比较简单,使全局FATFS对象指针指向fs,并使fs->fs_type=0。

 2. f_open函数

  • NAMEBUF(sfn, lfn) 调用NAMEBUF这个宏定义创建保存短文件名的数组,如果使用长文件名则将lfn指向长文件名数组。
  • chk_mounted 检查文件系统,读取文件系统参数。
    • 在路径中找设备号,默认为0。
    • 支持重入添加锁定信号量,初始化磁盘等操作。
    • 调用check_fs 在FAT引导扇区查找文件系统类型,fat16和fat32都返回0;如果没有找到返回1则在0号扇区查找分区表,根据分区表中的分区起始扇区地址再重新调用check_fs函数。
    •  从FAT引导扇区中读fat表大小扇区数,fat表个数,fat表起始扇区=FAT引导扇区偏移量+保留扇区数,每簇扇区数,根目录最多可容纳的目录项数(fat16通常为512,fat32为0),文件系统扇区总数,最大簇数,根目录簇号,数据区开始扇区,文件系统类型等。
  • follow_path 跟据路径找到文件所在目录,将文件父目录扇区读入文件系统缓冲区,读取文件目录项的信息;调用了create_name、dir_find函数。
  • 如果文件不存在,并且支持创建新文件,则调用dir_register创建新文件;如果文件存在,将文件父目录的目录项中记录文件起始簇号的字节清0,再调用remove_chain将fat表中该簇对应的项清0;调用move_window确保读入文件父目录扇区到缓冲区。
  • 将DIR对象的相关信息写到FIL对象中。

Posted by jie.lee 2010年4月28日 17:34