网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月12日漏签0天
c语言吧 关注:801,845贴子:4,376,102
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 23回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

开个贴 手撸FAT32文件系统

  • 只看楼主
  • 收藏

  • 回复
  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
warning:随时烂尾断更


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
虽然知道有不少现成的fat文件系统的代码了,但是按照我的经验,拿别人的代码,调试起来的量,都够自己重写一个了,所以任性的想要自己手撸一个FAT32的文件系统.
现在WIN系统用的多是NTFS文件系统,FAT没得见过了,这玩意在DOS时代就已经淘汰了好像,FAT32记得是win2000那个时代的升级版,为了兼容大文件,现在的TF卡多数用的就是FAT32.


2026-02-12 18:30:26
广告
不感兴趣
开通SVIP免广告
  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
刚好楼主就要搞TF卡,所以就要用一个文件系统,才好在TF卡与MCU之间各种风骚操作,楼主知道有ZnFat的,不过自从要移植到新平台之后,debug很长一段时间,腰间盘都突出了.
刚开始学计算机的时候,记得买了本书讲操作系统的,忘记扔哪了.然后祭出珍藏多年的minix代码,找到fs直接看懵逼,三魂七魄半天没找到回家的路.
于是随便的勾勒了一下即将要开撸的文件系统,首先我要给它起个名字,就叫狗蛋吧.大写GDFAT


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

随便勾勒大概就这个样子


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
然后大概的梳理一下 FAT32文件系统的整个结构
FAT32采用双重引导,即MBR和DBR.据说MBR在0磁道0扇区,DBR在0磁道1扇区,貌似并不是这个样子的,慎重一点的说是MBR在物理的0扇区,DBR在逻辑的0扇区.
跟在DRB之后的是FSinfo,之后是双份的FAT表(一般是双份的,第二个是备份的,具体在哪个部分有指明是不是双份的,写到那个部分再详说),之后是data区,根目录就在data区的开头,根目录里及后面的子目录里装着两种信息,一种是子目录信息,一种是目录下文件信息.
每个目录都包含一个.目录和一个..目录,用来指向自己和父目录.根目录的.和..都指向自己


  • 那年今日像二哈
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
牛啊,不过可惜现在技能点没工夫点在这上面


  • hitzsf
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个贴挺牛叉的,支持


  • 竹溪里仁
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是要做一个新的linux吧


2026-02-12 18:24:26
广告
不感兴趣
开通SVIP免广告
  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
开工啦.
TF卡的读写是以扇区为单位的,一次读取512字节,打算开一个全局的buffer,假装有一个接口fillbuffer(long sector);调用一次就会将指定扇区的整个扇区读到buffer里来.
因为有不少32位或16位的size需要提取出来,所以打算先撸两个基础函数,用来将char的2个或4个字节转换成short或者long.
很久之前碰到坑,这次不能再被坑了,buffer要用unsigned char,不然会出现神奇的事情


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


因为不知道是大端还是小端,所以就先这个样子,倒是测试一下再调整顺序


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先找找MBR的资料,MBR是一段非常底层的东西,PC开机的时候,会把这个扇区读到内存某个特定的位置,好像是0x7c00,然后会跳转到这个地址,把权限交给到这段MBR,为了检测MBR的有效性,所以会在最后两个字节有0x55aa.
然后其中有一点关于各种描述,貌似都没得什么用处,要从MBR中提取的主要是整个存储空间的大小,还有一个是DBR的入口,因为要找到DBR才能找到后面的东西.
win系统好像是不从MBR做引导的,估计是把DBR读到内存,然后再从DBR里引导NTloader,XP之后的系统好像没得这样一个文件存在引导盘,所以具体的windows系统引导部分,敬请移步度娘首页
查会资料先


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我又回来了,在知网上找到了一篇东西
嵌入式系统中FAT32文件系统的实现(梁华为 郜文),能看到FAT32的某些关键点,但是我需要更多FAT32的各个部分的细节,然后找到一本<解读FAT32文件系统>,里边有更多的细节,还有一些实现部分,不过没找到PDF,我肯定我们这里的图书馆不会收藏这本书,得到中图或者广图去
然后把目标盯在找一篇学位论文,毕竟只有论文才会有机会看见啰啰嗦嗦的各种介绍,希望能从中找到一份可以参考的论文,结果很遗憾,尽管找到有相关的论文,但是没得说MBR的,好吧,我记得MBR好像不能算FAT32的,DBR才算,这么想,我似乎打开了新世界.
然后我找到了MBR的结构,图片是挖过来的

剔除了前446字节的bootstrap code,在MBR中,要搞定的就是64字节的分区表了,一般TF卡只有一个分区,所以接下来我要搞清楚PT中第一个table的16字节里都有啥


  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

16字节分区表结构get,要提取的部分是02H的2字节,将这两个字节转成short就可以get到DBR的sector了,然后是04H的1字节,看看文件系统有没错,之后是06H的都get过来.


  • 五庄能用
  • 马猴烧酒
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主太监了


2026-02-12 18:18:26
广告
不感兴趣
开通SVIP免广告
  • DREACYOU
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

因为懒,怕各种函数会像mfc的handle那样,一个函数需要传N个参数,所以各种需要用到的数值,都丢在MBR结构体中,这样之后的函数就只需要传MBR进去就行了.
实际上MBR中游泳的就两个数值,一个是DBR的扇区号,一个是分区总扇区数,开始还以为这个数值是整个存储的扇区数,实际还只是不包含DBR之前所有扇区的逻辑扇区之后的分区扇区总数.
因为资料偏移都是用16进制数值,傻乎乎的差不多写完了解码部分,才想到,可以用buff[0x1a]
看别人的开源项目,羡慕各种指针乱飞的,到自己这还是数组靠谱,毕竟跳过一些没用的区域,而且懒得测试结构体的成员指针,脑袋浆糊着,就最笨的来


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 23回复贴,共2页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示