주어진 장치 노드를 통해 FAT Filesystem 을 시스템으로 로딩한다.
More...
|
| #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)) |
| |
|
| 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
} |
| |
주어진 장치 노드를 통해 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
| #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) |
- 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)) |
| #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)) |
| #define FAT_ENTRY_OFFSET |
( |
|
b, |
|
|
|
N |
|
) |
| (FAT_OFFSET(b, (N)) % (b)->sector_size) |
Value:
IS_FAT16(
bpb) ? 0xFFF8 : \
IS_FAT32(
bpb) ? 0x0FFFFFF8 : 0)
Definition at line 143 of file fat0.h.
| #define FAT_OFFSET |
( |
|
b, |
|
|
|
N |
|
) |
| |
Value:
Definition at line 122 of file fat0.h.
| #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)) |
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)) |
| #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) |
Value:
Definition at line 194 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) |
| #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) | |
|
Value:
((b)->reserved_sector + (b)->nr_fat *
FAT_SIZE(b)) + \
Definition at line 98 of file fat0.h.
| #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 { \
(val) = (val) & 0x0FFFFFFF; \
} else { \
if ((N) & 0x0001) { \
(val) = (val) << 4; \
} else { \
(val) = (val) & 0x0FFF; \
} \
} \
} while (0)
Definition at line 174 of file fat0.h.
| #define THIS_FAT_OFFSET |
( |
|
b, |
|
|
|
N |
|
) |
| (FAT_SECTORS((b), (N)) * (b)->sector_size) |
| #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[1] = (256 * (b)->sector_per_cluster) + (b)->nr_fat; \
tmp[1] >>= 1; \
} \
fatsz = (tmp[0] + (tmp[1] - 1)) / tmp[1]; \
(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)) |
| 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.
| 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().