|
ncloader
0.1
|
Implementation of tools에 대한 협력 다이어그램:모듈 | |
| ELF Parser | |
| ELF 포맷을 파싱해서 링크 하고 메모리에 적재해서 실행시킨다. NCKernel 은 ELF 포맷이기 때문에, 이 로더가 커널을 로딩한다. | |
| Image writer | |
| Samples | |
| Various sample codes. | |
| Partition Analyzer | |
| FAT12 Reserved Sector updator | |
| Hexa-dump | |
데이타 구조 | |
| struct | fat_dentry |
| struct | boot_parameter_block |
| struct | DSKSZTOSECPERCLUS |
| struct | fat32_fsinfo |
| struct | fat_long_dirent |
매크로 | |
| #define | SIZEOF_DENTRY 32 |
| #define | ROOT_DIR_SECTORS(bpb) ((((bpb)->nr_root_entry * SIZEOF_DENTRY) + ((bpb)->sector_size - 1)) / (bpb)->sector_size) |
| #define | FAT_SIZE(bpb) ((bpb)->size_of_fat16 ? (bpb)->size_of_fat16 : (bpb)->type.fat32.size_of_fat32) |
| #define | FIRST_DATA_SECTOR(bpb) ((bpb)->reserved_sector + ((bpb)->nr_fat * FAT_SIZE(bpb)) + ROOT_DIR_SECTORS(bpb)) |
| #define | FIRST_SECTOR_OF_CLUSTER(bpb, N) (((N)-2) * ((bpb)->sector_per_cluster) + FIRST_DATA_SECTOR(bpb)) |
| #define | TOTAL_SECTOR(bpb) ((bpb)->total_sector16 ? (bpb)->total_sector16 : (bpb)->total_sector32) |
| #define | NR_DATA_SECTOR(bpb) (TOTAL_SECTOR(bpb) - ((bpb)->reserved_sector + (bpb)->nr_fat * FAT_SIZE(bpb)) + ROOT_DIR_SECTORS(bpb)) |
| #define | COUNT_OF_CLUSTER(bpb) (NR_DATA_SECTOR(bpb) / (bpb)->sector_per_cluster) |
| #define | IS_FAT12(bpb) (COUNT_OF_CLUSTER(bpb) < 4085) |
| #define | IS_FAT16(bpb) (!IS_FAT12(bpb) && (COUNT_OF_CLUSTER(bpb) < 65525)) |
| #define | IS_FAT32(bpb) (COUNT_OF_CLUSTER(bpb) >= 65525) |
| #define | COUNT_OF_VALID_MAX_CLUSTER(bpb) (COUNT_OF_CLUSTER(bpb) + 1) |
| #define | FAT_OFFSET(bpb, N) |
| #define | THIS_FAT_SECTOR_NUMBER(bpb, N) (FAT_OFFSET(bpb, (N)) / (bpb)->sector_size) |
| #define | THIS_FAT_SECTORS(bpb, N) ((bpb)->reserved_sector + (N) * FAT_SIZE(bpb)) |
| #define | THIS_FAT_OFFSET(bpb, N) (THIS_FAT_SECTORS(bpb, (N)) * (bpb)->sector_size) |
| #define | THIS_FAT_ENTRY_OFFSET(bpb, N) (FAT_OFFSET(bpb, (N)) % (bpb)->sector_size) |
| #define | TO_WORD(buffer) ((unsigned short*)(&buffer)) |
| #define | TO_DWORD(buffer) ((unsigned int*)(&buffer)) |
| #define | FAT_EOF(bpb) (IS_FAT12(bpb) ? 0x0FF8 : IS_FAT16(bpb) ? 0xFFF8 : IS_FAT32(bpb) ? 0x0FFFFFF8 : 0) |
| #define | GET_CLUSTER_ENTRY_VALUE(bpb, buffer, N) |
| #define | SET_CLUSTER_ENTRY_VALUE(bpb, buffer, N, val) |
| #define | IS_EOF(bpb, val) (IS_FAT12(bpb) ? (val) >= 0x0FF8 : IS_FAT16(bpb) ? (val) >= 0xFFF8 : IS_FAT32(bpb) ? (val) >= 0x0FFFFFF8 : 0) |
| #define | BAD_CLUSTER12 0x0FF7 |
| #define | BAD_CLUSTER16 0xFFF7 |
| #define | BAD_CLUSTER32 0x0FFFFFF7 |
| #define | UPDATE_FAT_SIZE(bpb, dsksz) |
| #define | FIRST_ROOTDIR_SECTOR(bpb) ((bpb)->reserved_sector + (bpb)->nr_fat * FAT_SIZE(bpb)) |
| #define | GET_FIRST_BLOCK(dentry) ((dentry)->first_cluster_hi << 16 | (dentry)->first_cluster_lo) |
| #define | IS_FREE_DENTRY(dirent) ((unsigned char)((dirent)->name[0] == (unsigned char)0xE5) || ((dirent)->name[0] == 0x00)) |
| #define | IS_KANJI_NAME(dirent) ((dirent)->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 | DAY_OF_MONTH(ent) ((ent)->write_date & 0x000Fu) |
| #define | MONTH_OF_YEAR(ent) (((ent)->write_date >> 4) & 0x000Fu) |
| #define | COUNT_OF_YEAR(ent) (1980 + (((ent)->write_date >> 8) & 0x00FFu)) |
| #define | SECOND_COUNT(ent) ((ent)->write_time & 0x000Fu) |
| #define | MINUTES(ent) (((ent)->write_time >> 4) & 0x003F) |
| #define | HOURS(ent) (((ent)->write_time >> 10) & 0x001F) |
| #define | LAST_LONG_ENTRY 0x40 |
| #define | PATH_MAX 256 |
| #define | IS_LAST_SLOT(ent) ((ent->ord & LAST_LONG_ENTRY) == 0) |
타입정의 | |
| typedef struct fat_dentry | fat_dentry_t |
| typedef struct boot_parameter_block | boot_parameter_block_t |
| typedef struct fat_long_dirent | fat_slot_t |
열거형 타입 | |
| enum | dir_attributes { ATTR_READ_ONLY = 0x01, ATTR_HIDDEN = 0x02, ATTR_SYSTEM = 0x04, ATTR_VOLUME_ID = 0x08, ATTR_DIRECTORY = 0x10, ATTR_ARCHIVE = 0x20, ATTR_NONE = 0x00, ATTR_EXT = ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID, ATTR_UNUSED = ATTR_ARCHIVE | ATTR_VOLUME_ID | ATTR_SYSTEM | ATTR_HIDDEN, ATTR_LONG_NAME = ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID, ATTR_LONG_NAME_MASK = ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY | ATTR_ARCHIVE, ATTR_NO_FILE = ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY, ACTIVE_FLAG = 0x80, EXTENDED = 0x05, DELETED_FLAG = 0xE5 } |
함수 | |
| struct fat_dentry | __attribute__ ((packed)) |
| int | main (int argc, char *argv[]) |
변수 | |
| struct DSKSZTOSECPERCLUS | __attribute__ |
| #define BAD_CLUSTER12 0x0FF7 |
| #define BAD_CLUSTER16 0xFFF7 |
| #define BAD_CLUSTER32 0x0FFFFFF7 |
| #define COUNT_OF_CLUSTER | ( | bpb) | (NR_DATA_SECTOR(bpb) / (bpb)->sector_per_cluster) |
| #define COUNT_OF_VALID_MAX_CLUSTER | ( | bpb) | (COUNT_OF_CLUSTER(bpb) + 1) |
| #define COUNT_OF_YEAR | ( | ent) | (1980 + (((ent)->write_date >> 8) & 0x00FFu)) |
| #define DAY_OF_MONTH | ( | ent) | ((ent)->write_date & 0x000Fu) |
| #define FAT_EOF | ( | bpb) | (IS_FAT12(bpb) ? 0x0FF8 : IS_FAT16(bpb) ? 0xFFF8 : IS_FAT32(bpb) ? 0x0FFFFFF8 : 0) |
| #define FAT_OFFSET | ( | bpb, | |
| N | |||
| ) |
| #define FAT_SIZE | ( | bpb) | ((bpb)->size_of_fat16 ? (bpb)->size_of_fat16 : (bpb)->type.fat32.size_of_fat32) |
| #define FIRST_DATA_SECTOR | ( | bpb) | ((bpb)->reserved_sector + ((bpb)->nr_fat * FAT_SIZE(bpb)) + ROOT_DIR_SECTORS(bpb)) |
| #define FIRST_SECTOR_OF_CLUSTER | ( | bpb, | |
| N | |||
| ) | (((N)-2) * ((bpb)->sector_per_cluster) + FIRST_DATA_SECTOR(bpb)) |
| #define GET_CLUSTER_ENTRY_VALUE | ( | bpb, | |
| buffer, | |||
| N | |||
| ) |
| #define GET_FIRST_BLOCK | ( | dentry) | ((dentry)->first_cluster_hi << 16 | (dentry)->first_cluster_lo) |
| #define HOURS | ( | ent) | (((ent)->write_time >> 10) & 0x001F) |
| #define IS_EOF | ( | bpb, | |
| val | |||
| ) | (IS_FAT12(bpb) ? (val) >= 0x0FF8 : IS_FAT16(bpb) ? (val) >= 0xFFF8 : IS_FAT32(bpb) ? (val) >= 0x0FFFFFF8 : 0) |
| #define IS_FAT12 | ( | bpb) | (COUNT_OF_CLUSTER(bpb) < 4085) |
| #define IS_FAT16 | ( | bpb) | (!IS_FAT12(bpb) && (COUNT_OF_CLUSTER(bpb) < 65525)) |
| #define IS_FAT32 | ( | bpb) | (COUNT_OF_CLUSTER(bpb) >= 65525) |
| #define IS_FREE_DENTRY | ( | dirent) | ((unsigned char)((dirent)->name[0] == (unsigned char)0xE5) || ((dirent)->name[0] == 0x00)) |
| #define IS_KANJI_NAME | ( | dirent) | ((dirent)->name[0] == 0x05) |
| #define IS_LAST_SLOT | ( | ent) | ((ent->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 | ( | ent) | (((ent)->write_time >> 4) & 0x003F) |
| #define MONTH_OF_YEAR | ( | ent) | (((ent)->write_date >> 4) & 0x000Fu) |
| #define NR_DATA_SECTOR | ( | bpb) | (TOTAL_SECTOR(bpb) - ((bpb)->reserved_sector + (bpb)->nr_fat * FAT_SIZE(bpb)) + ROOT_DIR_SECTORS(bpb)) |
| #define PATH_MAX 256 |
| #define ROOT_DIR_SECTORS | ( | bpb) | ((((bpb)->nr_root_entry * SIZEOF_DENTRY) + ((bpb)->sector_size - 1)) / (bpb)->sector_size) |
| #define SECOND_COUNT | ( | ent) | ((ent)->write_time & 0x000Fu) |
| #define SET_CLUSTER_ENTRY_VALUE | ( | bpb, | |
| buffer, | |||
| N, | |||
| val | |||
| ) |
| #define SIZEOF_DENTRY 32 |
| #define THIS_FAT_ENTRY_OFFSET | ( | bpb, | |
| N | |||
| ) | (FAT_OFFSET(bpb, (N)) % (bpb)->sector_size) |
| #define THIS_FAT_OFFSET | ( | bpb, | |
| N | |||
| ) | (THIS_FAT_SECTORS(bpb, (N)) * (bpb)->sector_size) |
| #define THIS_FAT_SECTOR_NUMBER | ( | bpb, | |
| N | |||
| ) | (FAT_OFFSET(bpb, (N)) / (bpb)->sector_size) |
| #define THIS_FAT_SECTORS | ( | bpb, | |
| N | |||
| ) | ((bpb)->reserved_sector + (N) * FAT_SIZE(bpb)) |
| #define TO_DWORD | ( | buffer) | ((unsigned int*)(&buffer)) |
| #define TO_WORD | ( | buffer) | ((unsigned short*)(&buffer)) |
| #define TOTAL_SECTOR | ( | bpb) | ((bpb)->total_sector16 ? (bpb)->total_sector16 : (bpb)->total_sector32) |
| #define UPDATE_FAT_SIZE | ( | bpb, | |
| dsksz | |||
| ) |
| typedef struct boot_parameter_block boot_parameter_block_t |
| typedef struct fat_dentry fat_dentry_t |
| typedef struct fat_long_dirent fat_slot_t |
| enum dir_attributes |
| struct fat_dentry __attribute__ | ( | (packed) | ) |
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:| enum dir_attributes __attribute__ |