深入理解文件系统

深入理解文件系统

ID:9361672

大小:501.00 KB

页数:12页

时间:2018-04-29

深入理解文件系统_第1页
深入理解文件系统_第2页
深入理解文件系统_第3页
深入理解文件系统_第4页
深入理解文件系统_第5页
资源描述:

《深入理解文件系统》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、通过格式化命令-看磁盘文件系统的建立过程1、添加format命令,单步调试所有的底层驱动函数都已经准备好。添加格式化命令format后,编译下载。Format命令的执行主要是调用f_mkfs()函数,下面进行单步调试。以下主要列出函数的主要执行步骤:res=f_mkfs(0,1,4096);//1表示不需要引导扇区。4096是8个扇区。进入f_mkfs()函数,这里只列出主要执行步骤:if(disk_ioctl(drv,GET_SECTOR_COUNT,&n_part)!=RES_OK

2、

3、n_part

4、SECTOR)returnFR_MKFS_ABORTED;这个函数调用后,n_part=0x000F,3400=996352,这是SD的总块数。allocsize/=SS(fs);等于8/*Numberofsectorspercluster*/n_clst=n_part/allocsize;//等于0x1E680=124544簇。if(n_clst>=0xFFF5)fmt=FS_FAT32;所以文件系统确定为FAT32类型。n_fat=((n_clst*4)+8+SS(fs)-1)/SS(fs);等于0x3CE=9

5、74,表示FAT要占据974个扇区。n_rsv=33-partition;保留扇区32个。n_dir=0;b_fat=b_part+n_rsv;/*FATsstartsector32扇区*/b_dir=b_fat+n_fat*N_FATS;/*Directorystartsector0x3EE=1006,由于FAT表个数设为1个,所以目录区=FAT起始+FAT占用扇区数*/b_data=b_dir+n_dir;/*Datastartsector*/以上三项确定FAT区域、根目录区、数据区的起始扇区。disk_ioc

6、tl(drv,GET_BLOCK_SIZE,&n)!=RES_OK,这个函数调用没有正确返回可擦出扇区的总数。接下来程序会出错,因此退出,修改disk_ioctl()函数后,再次分析。把这个函数返回值直接改为32。并且把FAT表的个数定义为2.N_FATS改为2后,根目录区、数据区的起始扇区的起始扇区变为0x7BC=1980扇区。继续往下执行。n=(b_data+n-1)&~(n-1);n_fat+=(n-b_data)/N_FATS;这两句话对fat所占扇区数进行了修正,保证擦除时,以32个扇区为一个单位。n_c

7、lst=(n_part-n_rsv-n_fat*N_FATS-n_dir)/allocsize;=0x1E588。tbl=fs->win;/*Clearbuffer*/mem_set(tbl,0,SS(fs));清零文件系统缓冲区。mem_set(tbl,0,SS(fs));ST_DWORD(tbl+BS_jmpBoot,0x90FEEB);/*Bootcode(jmp$,nop)*/ST_WORD(tbl+BPB_BytsPerSec,SS(fs));/*Sectorsize*/tbl[BPB_SecPerClu

8、s]=(BYTE)allocsize;/*Sectorspercluster*/ST_WORD(tbl+BPB_RsvdSecCnt,n_rsv);/*Reservedsectors*/上面的工作主要是填充引导扇区缓冲区,也就是常说的DBR扇区缓冲,等所有的参数写好,就可以写回磁盘。ST_WORD(tbl+BS_55AA,0xAA55);/*Signature*/if(disk_write(drv,tbl,b_part+0,1)!=RES_OK)returnFR_DISK_ERR;//这就是在写有效引导标志sec[

9、510]=0x55,sec[511]=0xAA。if(fmt==FS_FAT32)disk_write(drv,tbl,b_part+6,1);//FAT32在第六扇区有个备份引导扇区。for(m=0;m

10、=partition;ST_DWORD(tbl,n);/*Reservecluste

11、r#0-1(FAT12/16)*/}else{ST_DWORD(tbl+0,0xFFFFFFF8);/*Reservecluster#0-1(FAT32)*/ST_DWORD(tbl+4,0xFFFFFFFF);ST_DWORD(tbl+8,0x0FFFFFFF);/*Reservecluster#2forrootdir*/}//簇0和簇1保留,簇2分配给根

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。