nckernel  0.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
FAT 파일 시스템

주어진 장치 노드를 통해 FAT Filesystem 을 시스템으로 로딩한다. More...

Data Structures

struct  bpb
 
struct  DSKSZTOSECPERCLUS
 
struct  fat32_fsinfo
 
struct  fat_dentry
 
struct  fat_long_dirent
 

Macros

#define BAD_CLUSTER12   0x0FF7
 
#define BAD_CLUSTER16   0xFFF7
 
#define BAD_CLUSTER32   0x0FFFFFF7
 
#define COUNT_OF_CLUSTER(b)   (NR_DATA_SECTOR(b) / (b)->sector_per_cluster)
 
#define COUNT_OF_VALID_MAX_CLUSTER(b)   (COUNT_OF_CLUSTER(b) + 1)
 
#define COUNT_OF_YEAR(e)   (1980 + (((e)->write_date >> 8) & 0x00FFu))
 
#define DAY_OF_MONTH(e)   ((e)->write_date & 0x000Fu)
 
#define DWORD(buf)   ((unsigned int*)(buf))
 
#define FAT_ENTRY_OFFSET(b, N)   (FAT_OFFSET(b, (N)) % (b)->sector_size)
 
#define FAT_EOF(bpb)
 
#define FAT_OFFSET(b, N)
 
#define FAT_SECTOR_NUMBER(b, N)   (FAT_OFFSET((b), (N)) / (b)->sector_size)
 
#define FAT_SECTORS(b, N)   ((b)->reserved_sector + (N) * FAT_SIZE(b))
 
#define FAT_SIZE(b)
 
#define FIRST_DATA_SECTOR(b)
 
#define FIRST_ROOTDIR_SECTOR(b)   ((b)->reserved_sector + (b)->nr_fat * FAT_SIZE(b))
 
#define FIRST_SECTOR_OF_CLUSTER(b, N)   (((N) - 2) * ((b)->sector_per_cluster) + FIRST_DATA_SECTOR(b))
 
#define GET_FIRST_BLOCK(d)   ((d)->first_cluster_hi << 16 | (d)->first_cluster_lo)
 
#define HOURS(e)   (((e)->write_time >> 10) & 0x001F)
 
#define IS_EOF(b, v)
 
#define IS_FAT12(b)   (COUNT_OF_CLUSTER(b) < 4085)
 
#define IS_FAT16(b)   (!IS_FAT12(b) && (COUNT_OF_CLUSTER(b) < 65525))
 
#define IS_FAT32(b)   (COUNT_OF_CLUSTER(b) >= 65525)
 
#define IS_FREE_DENTRY(d)
 
#define IS_KANJI_NAME(d)   ((d)->name[0] == 0x05)
 
#define IS_LAST_SLOT(e)   (((e)->ord & LAST_LONG_ENTRY) == 0)
 
#define IS_VALID_CHAR_FOR_NAME(ch)   (!(((ch) != 0x05 && (ch) < 0x20) && (ch) != 0x22 && ((ch) >= 0x2A && (ch) <= 0x2F) && ((ch) >= 0x3A && (ch) <= 0x3F) && (ch) != 0x5B && (ch) != 0x5C && (ch) != 0x5D && (ch) != 0x7C))
 
#define LAST_LONG_ENTRY   0x40
 
#define MINUTES(e)   (((e)->write_time >> 4) & 0x003F)
 
#define MONTH_OF_YEAR(e)   (((e)->write_date >> 4) & 0x000Fu)
 
#define NR_DATA_SECTOR(b)
 
#define PATH_MAX   256
 
#define ROOT_DIR_SECTORS(b)
 
#define SECOND_COUNT(e)   ((e)->write_time & 0x000Fu)
 
#define SET_CLUSTER_ENTRY_VALUE(b, B, N, val)
 
#define SIZEOF_DENTRY   32
 
#define THIS_FAT_OFFSET(b, N)   (FAT_SECTORS((b), (N)) * (b)->sector_size)
 
#define TOTAL_SECTOR(b)
 
#define UPDATE_FAT_SIZE(b, dsksz)
 
#define WORD(buf)   ((unsigned short*)(buf))
 

Enumerations

enum  dir_Attributes {
  ATTR_NONE = 0x00, ATTR_RDONLY = 0x01, ATTR_HIDDEN = 0x02, ATTR_SYS = 0x04,
  ATTR_VOLID = 0x08, ATTR_DIR = 0x10, ATTR_ARCH = 0x20, ATTR_EXT = ATTR_RDONLY | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLID,
  ATTR_UNUSED = ATTR_ARCH | ATTR_VOLID | ATTR_SYS | ATTR_HIDDEN, ATTR_LONG_NAME_MASK = ATTR_RDONLY | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLID | ATTR_DIR | ATTR_ARCH, ATTR_NO_FILE = ATTR_SYS | ATTR_VOLID | ATTR_DIR, ACTIVE_FLAG = 0x80,
  EXTENDED = ATTR_RDONLY | ATTR_SYS, DELETED_FLAG = 0xE5
}
 

Functions

struct ninfofat_load (struct ninfo *parent, const char *node)
 FAT 파일 시스템을 로딩한다. More...
 

Variables

struct bpb __PACKED
 

Detailed Description

주어진 장치 노드를 통해 FAT Filesystem 을 시스템으로 로딩한다.

FAT 파일 시스템을 구현한다.

Date
2011-8-26
Author
Sung-jae Park nices.nosp@m.j@ni.nosp@m.cesj..nosp@m.com
Date
2011-8-22
Author
Sung-jae Park nices.nosp@m.j@ni.nosp@m.cesj..nosp@m.com

Macro Definition Documentation

#define BAD_CLUSTER12   0x0FF7

Definition at line 200 of file fat0.h.

#define BAD_CLUSTER16   0xFFF7

Definition at line 201 of file fat0.h.

#define BAD_CLUSTER32   0x0FFFFFF7

Definition at line 202 of file fat0.h.

#define COUNT_OF_CLUSTER (   b)    (NR_DATA_SECTOR(b) / (b)->sector_per_cluster)

Definition at line 103 of file fat0.h.

#define COUNT_OF_VALID_MAX_CLUSTER (   b)    (COUNT_OF_CLUSTER(b) + 1)
Note
If you want add reserved cluster too, then plus one below computation

Definition at line 119 of file fat0.h.

#define COUNT_OF_YEAR (   e)    (1980 + (((e)->write_date >> 8) & 0x00FFu))

Definition at line 269 of file fat0.h.

#define DAY_OF_MONTH (   e)    ((e)->write_date & 0x000Fu)
Note
01/01/1980 Epoch

Definition at line 267 of file fat0.h.

#define DWORD (   buf)    ((unsigned int*)(buf))

Definition at line 141 of file fat0.h.

#define FAT_ENTRY_OFFSET (   b,
 
)    (FAT_OFFSET(b, (N)) % (b)->sector_size)

Definition at line 137 of file fat0.h.

#define FAT_EOF (   bpb)
Value:
(IS_FAT12(bpb) ? 0x0FF8 : \
IS_FAT16(bpb) ? 0xFFF8 : \
IS_FAT32(bpb) ? 0x0FFFFFF8 : 0)

Definition at line 143 of file fat0.h.

#define FAT_OFFSET (   b,
 
)
Value:
(IS_FAT16(b) ? (N) << 1 \
: (IS_FAT32(b) ? (N) << 2 \
: (IS_FAT12(b) ? (N) + ((N)>>1) \
: -1)))

Definition at line 122 of file fat0.h.

#define FAT_SECTOR_NUMBER (   b,
 
)    (FAT_OFFSET((b), (N)) / (b)->sector_size)

Definition at line 128 of file fat0.h.

#define FAT_SECTORS (   b,
 
)    ((b)->reserved_sector + (N) * FAT_SIZE(b))

Definition at line 131 of file fat0.h.

#define FAT_SIZE (   b)
Value:
((b)->size_of_fat16 ? \
(b)->size_of_fat16 : \
(b)->type.fat32.size_of_fat32)

Definition at line 81 of file fat0.h.

#define FIRST_DATA_SECTOR (   b)
Value:
((b)->reserved_sector + ((b)->nr_fat * FAT_SIZE(b)) \

Definition at line 86 of file fat0.h.

#define FIRST_ROOTDIR_SECTOR (   b)    ((b)->reserved_sector + (b)->nr_fat * FAT_SIZE(b))

Definition at line 221 of file fat0.h.

#define FIRST_SECTOR_OF_CLUSTER (   b,
 
)    (((N) - 2) * ((b)->sector_per_cluster) + FIRST_DATA_SECTOR(b))

Definition at line 90 of file fat0.h.

#define GET_FIRST_BLOCK (   d)    ((d)->first_cluster_hi << 16 | (d)->first_cluster_lo)

Definition at line 224 of file fat0.h.

#define HOURS (   e)    (((e)->write_time >> 10) & 0x001F)

Definition at line 274 of file fat0.h.

#define IS_EOF (   b,
 
)
Value:
(IS_FAT12(b) ? (v) >= 0x0FF8 \
: IS_FAT16(b) ? (v) >= 0xFFF8 \
: IS_FAT32(b) ? (v) >= 0x0FFFFFF8 \
: 0)

Definition at line 194 of file fat0.h.

#define IS_FAT12 (   b)    (COUNT_OF_CLUSTER(b) < 4085)

Definition at line 106 of file fat0.h.

#define IS_FAT16 (   b)    (!IS_FAT12(b) && (COUNT_OF_CLUSTER(b) < 65525))

Definition at line 109 of file fat0.h.

#define IS_FAT32 (   b)    (COUNT_OF_CLUSTER(b) >= 65525)

Definition at line 112 of file fat0.h.

#define IS_FREE_DENTRY (   d)
Value:
((unsigned char)((d)->name[0] == (unsigned char)DELETED_FLAG) \
|| ((d)->name[0] == 0x00))

Definition at line 242 of file fat0.h.

#define IS_KANJI_NAME (   d)    ((d)->name[0] == 0x05)

Definition at line 246 of file fat0.h.

#define IS_LAST_SLOT (   e)    (((e)->ord & LAST_LONG_ENTRY) == 0)

Definition at line 290 of file fat0.h.

#define IS_VALID_CHAR_FOR_NAME (   ch)    (!(((ch) != 0x05 && (ch) < 0x20) && (ch) != 0x22 && ((ch) >= 0x2A && (ch) <= 0x2F) && ((ch) >= 0x3A && (ch) <= 0x3F) && (ch) != 0x5B && (ch) != 0x5C && (ch) != 0x5D && (ch) != 0x7C))

Definition at line 247 of file fat0.h.

#define LAST_LONG_ENTRY   0x40

Definition at line 288 of file fat0.h.

#define MINUTES (   e)    (((e)->write_time >> 4) & 0x003F)

Definition at line 273 of file fat0.h.

#define MONTH_OF_YEAR (   e)    (((e)->write_date >> 4) & 0x000Fu)

Definition at line 268 of file fat0.h.

#define NR_DATA_SECTOR (   b)
Value:
(TOTAL_SECTOR(b) - \
((b)->reserved_sector + (b)->nr_fat * FAT_SIZE(b)) + \

Definition at line 98 of file fat0.h.

#define PATH_MAX   256

Definition at line 289 of file fat0.h.

Referenced by basename(), and dirname().

#define ROOT_DIR_SECTORS (   b)
Value:
((((b)->nr_root_entry * SIZEOF_DENTRY) + ((b)->sector_size - 1)) \
/ (b)->sector_size)
Note
This computation rounds up

Definition at line 77 of file fat0.h.

#define SECOND_COUNT (   e)    ((e)->write_time & 0x000Fu)
Note
23:59:58

Definition at line 272 of file fat0.h.

#define SET_CLUSTER_ENTRY_VALUE (   b,
  B,
  N,
  val 
)
Value:
do { \
if (IS_FAT16(b)) { \
*DWORD((B) + FAT_ENTRY_OFFSET(b, N)) = (val); \
} else if (IS_FAT32(b)) { \
(val) = (val) & 0x0FFFFFFF; \
*DWORD((B) + FAT_ENTRY_OFFSET(b, N)) &= 0xF0000000;\
*DWORD((B) + FAT_ENTRY_OFFSET(b, N)) |= (val); \
} else { \
if ((N) & 0x0001) { \
(val) = (val) << 4; \
*WORD((B) + FAT_ENTRY_OFFSET(b, N)) &= 0x000F;\
} else { \
(val) = (val) & 0x0FFF; \
*WORD((B) + FAT_ENTRY_OFFSET(b, N)) &= 0xF000;\
} \
*WORD((B) + FAT_ENTRY_OFFSET(b, N)) |= (val); \
} \
} while (0)

Definition at line 174 of file fat0.h.

#define SIZEOF_DENTRY   32

Definition at line 74 of file fat0.h.

#define THIS_FAT_OFFSET (   b,
 
)    (FAT_SECTORS((b), (N)) * (b)->sector_size)

Definition at line 134 of file fat0.h.

#define TOTAL_SECTOR (   b)
Value:
((b)->total_sector16 ? \
(b)->total_sector16 : \
(b)->total_sector32)

Definition at line 93 of file fat0.h.

#define UPDATE_FAT_SIZE (   b,
  dsksz 
)
Value:
do { \
unsigned int tmp[2]; \
unsigned int fatsz; \
tmp[0] = (dsksz) - ((b)->reserved_sector + ROOT_DIR_SECTORS(b)); \
tmp[1] = (256 * (b)->sector_per_cluster) + (b)->nr_fat; \
if (IS_FAT32(b)) { \
tmp[1] >>= 1; \
} \
fatsz = (tmp[0] + (tmp[1] - 1)) / tmp[1]; \
if (IS_FAT32(b)) { \
(b)->size_of_fat16 = 0; \
(b)->type.fat32.size_of_fat32 = fatsz; \
} else { \
(b)->size_of_fat16 = fatsz & 0x0000FFFF; \
} \
} while (0)

Definition at line 204 of file fat0.h.

#define WORD (   buf)    ((unsigned short*)(buf))

Definition at line 140 of file fat0.h.

Enumeration Type Documentation

Enumerator
ATTR_NONE 
ATTR_RDONLY 
ATTR_HIDDEN 
ATTR_SYS 
ATTR_VOLID 
ATTR_DIR 
ATTR_ARCH 
ATTR_EXT 
ATTR_UNUSED 
ATTR_LONG_NAME_MASK 
ATTR_NO_FILE 
ACTIVE_FLAG 
EXTENDED 
DELETED_FLAG 

Definition at line 249 of file fat0.h.

Function Documentation

struct ninfo* fat_load ( struct ninfo parent,
const char *  node 
)

FAT 파일 시스템을 로딩한다.

Parameters
[in]node장치 노드의 경로 (ex: /dev/fda)
Returns
struct ninfo* 생성된 트리의 root node

Definition at line 572 of file fat.c.

References fatfs::bpb, BUFSIZ, fatfs::cache, create_fat_cache(), dbg_printf(), sinfo::del_ninfo, destroy_fat_cache(), sinfo::fill_ninfo, free(), sinfo::get_ninfo, sinfo::head, malloc(), memcpy(), NINFO_TYPE_FOLDER, fatfs::node, NULL, sinfo::priv, sinfo::refcnt, sinfo::refresh_children, fatfs::root, strdup(), ninfo::type, update_fat_cache(), vfs_del_ninfo(), and vfs_new_ninfo().

Here is the call graph for this function:

Variable Documentation

struct fat_long_dirent __PACKED