이번에는 SD 메모리 카드에 기록되어 있는 파일들 중 하나를 선택하여 끝까지 읽어 오는 방법에 대해서 설명하도록 하겠다.파일을 읽어 오기 위해서는 먼저 어떤 파일을 읽어 올것인지 지정해 주어야 하는데, 이를 위하여 fat32_openfile() 함수를 이용한다. int fat32_openfile(const char *path) { struct fat32_info *fat = &cur_file; struct dir_entry cur_dir; char tmp_buf[BD_ARG_BUF_SZ]; char *delimit = "/"; char *token; fat->dir.clst_index = fat->disk.root_clst; fat->dir.sect_index = 0; fat->dir.entry_inde..
이번 글에서는 root directory에서 출발하여 특정 디렉토리에 어떤 하위디렉토리와 파일들이 있는지 알아보는 방법에 대해서 설명하도록 하겠다.이를 위하여 두개의 API를 만들어볼 예정이다.먼저 특정 디렉토리를 선택하기 위한 fat32_opendir()과 선택된 디렉토리에서 차례차례로 directory entry를 가져오기 위한 fat32_readdir() 함수이다.먼저, FAT32 파일 시스템의 기본 파라미터와 디렉토리 관리를 위한 구조체를 만들어 보도록 하겠다.struct disk_info { uint32_t sect_size; uint32_t clst_size; uint32_t root_clst; uint32_t bpb_start; uint32_t fat_start; uint32_t data_s..
이번 글에서는 FAT 영역에 어떤 정보가 들어가는지에 대하여 설명하도록 하겠다.FAT영역에 저장되는 FAT entry는 한마디로 파일이나 디렉토리가 Data 영역의 몇번째 클러스터에서 시작되는지 알려주기 위하여 cluster index를 저장하는 table이라고 할 수 있겠다.앞에서 설명했듯이 FAT32의 경우 root directory가 Data 영역 어디에도 위치할 수 있는데, 실제로는 어디에 있는지 클러스터 index를 boot sector에서 알려주었기 때문에 클러스터 index에 해당되는 위치에서 root directory 내용을 읽을수 있었다.위의 그림은 FAT#0 영역을 dump 해 본 것인데, 초록색박스로 표시된 부분이 FAT32에서 예약된 cluster#0, cluster#1이고, 빨간색..