exfat文件系统(七)------exfat_core.c详解(一)------CLUSTER HEAP(BMAP_DENTRY_T以及相关)
来源:互联网 发布:百度软件手机助手 编辑:程序博客网 时间:2024/05/26 20:19
根据前面章节已经大致了解了exfat文件系统流程,我个人感觉可以算入门了,但是离深入理解还远着。前面,我都是纵向学习,从本章开始横向学习exfat模块文件。
本章节重点解析exfat_core.c文件()。
在学习中要结合我前面dump出来的exfat文件系统的hex文件对以前没有理解清楚的函数继续深入研究。
在重新看load_alloc_bitmap函数时,结合导出来的exfat文件系统的hex信息,check如下学习心得:
clu.dir = p_fs->root_dir;//0x04
clu.flags = 0x01;
for (i = 0; i < p_fs->dentries_per_clu; i++) {
ep = (BMAP_DENTRY_T *) get_entry_in_dir(sb, &clu, i, NULL);
if (!ep)
return FFS_MEDIAERR;
type = p_fs->fs_func->get_entry_type((DENTRY_T *) ep);
if (type == TYPE_UNUSED)
break;
if (type != TYPE_BITMAP)
continue;
if (ep->flags == 0x0) {
p_fs->map_clu = GET32_A(ep->start_clu);
map_size = (UINT32) GET64_A(ep->size);
p_fs->map_sectors = ((map_size-1) >> p_bd->sector_size_bits) + 1;
p_fs->vol_amap = (struct buffer_head **) MALLOC(sizeof(struct buffer_head *) * p_fs->map_sectors);
if (p_fs->vol_amap == NULL)
return FFS_MEMORYERR;
sector = START_SECTOR(p_fs->map_clu);
for (j = 0; j < p_fs->map_sectors; j++) {
p_fs->vol_amap[j] = NULL;
ret = sector_read(sb, sector+j, &(p_fs->vol_amap[j]), 1);
if (ret != FFS_SUCCESS) {
i=0;
while (i < j)
brelse(p_fs->vol_amap[i++]);
FREE(p_fs->vol_amap);
p_fs->vol_amap = NULL;
return ret;
}
}
p_fs->pbr_bh = NULL; //wangxf14_study init for later
return FFS_SUCCESS;
}
}
UINT32 exfat_get_entry_type(DENTRY_T *p_entry)
{
FILE_DENTRY_T *ep = (FILE_DENTRY_T *) p_entry;
if (ep->type == 0x0) {
return TYPE_UNUSED;
} else if (ep->type < 0x80) {
return TYPE_DELETED;
} else if (ep->type == 0x80) {
return TYPE_INVALID;
} else if (ep->type < 0xA0) {
if (ep->type == 0x81) {
return TYPE_BITMAP;
} else if (ep->type == 0x82) {
return TYPE_UPCASE;
} else if (ep->type == 0x83) {
return TYPE_VOLUME;
} else if (ep->type == 0x85) {
if (GET16_A(ep->attr) & ATTR_SUBDIR)
return TYPE_DIR;
else
return TYPE_FILE;
}
return TYPE_CRITICAL_PRI;
} else if (ep->type < 0xC0) {
if (ep->type == 0xA0) {
return TYPE_GUID;
} else if (ep->type == 0xA1) {
return TYPE_PADDING;
} else if (ep->type == 0xA2) {
return TYPE_ACLTAB;
}
return TYPE_BENIGN_PRI;
} else if (ep->type < 0xE0) {
if (ep->type == 0xC0) {
return TYPE_STREAM;
} else if (ep->type == 0xC1) {
return TYPE_EXTEND;
} else if (ep->type == 0xC2) {
return TYPE_ACL;
}
return TYPE_CRITICAL_SEC;
}
return TYPE_BENIGN_SEC;
}
以上红色代码能够体现出如下64M.hex中的exfat文件系统数据
- exfat文件系统(七)------exfat_core.c详解(一)------CLUSTER HEAP(BMAP_DENTRY_T以及相关)
- exfat文件系统(七)------exfat_core.c详解(二)------file entry相关
- exfat文件系统(一)
- exfat文件系统(六)------exfat_get_block详解
- exfat文件系统(二)
- exfat文件系统(三)
- exfat文件系统(四)-----FsMountVol
- exfat文件系统相关数据结构以及数据恢复方法
- exfat文件系统(五)------文件read和write
- exfat文件系统
- 文件系统:ExFAT
- exfat文件系统-----exfat volume layout
- [文件系统]文件系统学习笔记(一)---基本概念以及inode
- iOS CoreData详解(七)性能相关
- Android系统回顾(七):文件系统(一)
- Linux内核源码分析--文件系统(七、Namei.c)
- 翻译windows internals 第12章文件系统 (持续更新)exFAT
- exFAT 文件系统格式
- uclinux中boa的cgi程序示例
- springmvc导入Excel例子
- Android Studio App设置线性布局LinerLayout控件占屏幕长宽比例
- 判断版本号
- Dynamics CRM 2011编程系列(1):系统实体状态更新
- exfat文件系统(七)------exfat_core.c详解(一)------CLUSTER HEAP(BMAP_DENTRY_T以及相关)
- Deploying Cloud Foundry on OpenStack using BOSH
- 整车控制器VCU
- 反转单链表
- [leetcode] 92.Reverse Linked List II
- Using NSURLConnection 使用NSURLConnection 官方文档翻译(二)
- echarts按开始日期和结束时间做报表
- 内核临时页表建立
- 经典算法之0-1背包问题