2012-09-21 6 views
4

리소스 제한이있는 마이크로 컨트롤러에서 FAT16 파일 시스템 구조를 사용하는 저수준 응용 프로그램에서 작업 중이므로 사용자 정의 액세스 코드를 작성해야합니다. 저는 이미 Petit FAT와 FatFS와 같은 라이브러리를 사용하고 있습니다. 그러나 불행하게도이 중 하나가 내 필요 사항이라고는 생각하지 않습니다. 그들은 FAT의 작동 방식에 대한 유용한 참고 자료로 사용되었습니다.FAT16 디렉토리

여전히 문제가있는 한 영역은 하위 디렉토리 항목입니다.

this에 따르면 디렉토리 항목은 1 시작 클러스터를 가리킬 수 있습니다. 데이터 파일의 경우 이것은 단순히 첫 번째 데이터 클러스터입니다. 디렉토리의 경우 이것은 서브 디렉토리의 시작 클러스터입니다 (아마도 다른 디렉토리 항목).

루트 디렉토리에서 기본 파일까지 단 하나의 디렉토리 경로 만 있으면 제대로 작동하지만 주어진 디렉토리 아래의 여러 파일/디렉토리로 어떻게 분기 할 수 있는지 이해할 수 없습니다.

ex. 디렉토리 구조 다음 FAT16 구조에 대한 이해를 바탕으로

- root dir 1 
    - sub dir 1 
     - file 1 
    - sub dir 2 
     - file 2 
- root dir 2 
    - sub dir 3 

,

즉시 지방 root dir 1에 대한 정보를 포함하는 첫 번째 루트 디렉토리 항목에 대한 클러스터가 될 것이다 다음과 같습니다. 첫 번째 클러스터 필드에는 sub dir 1의 클러스터 주소가 포함됩니다. 첫 번째 클러스터 필드에는 file 1의 클러스터 주소가 포함되며 첫 번째 클러스터는 데이터 클러스터를 가리 킵니다.

두 번째 루트 디렉토리 항목은 root dir 2에 대한 정보가 들어있는 FAT의 끝 다음에 두 번째 클러스터에서 시작됩니다. 첫 번째 클러스터는 sub dir 3의 클러스터를 가리키고 첫 번째 클러스터는 빈 클러스터 (FAT로 표시된 클러스터)를 가리 킵니다.

무엇이 여기에 있습니까? 루트 디렉토리 항목에서 sub dir 2까지 탐색하는 방법을 알아낼 수 없습니다.

+1

"루트 디렉토리"를 일반적으로 "디렉토리"와 혼동시킬 수 있습니다. 여기를보세요 : http://en.wikipedia.org/wiki/File_Allocation_Table – paulsm4

+0

당신이 옳다고 생각합니다. 루트 디렉토리는'A :'나'0 :'등을 가리키고, '루트 디렉토리 1'을 가리키는 항목 (올바른 경우? 내 질문을 업데이트합니다). 그러나이 방법으로 한 디렉터리에 여러 디렉터리/파일 문제가 해결되는 방법을 잘 모르겠습니다. – helloworld922

답변

3

먼저 혼란을 없애기 위해 하나의 디렉토리 항목이 단일 클러스터를 차지하지 않습니다. 원본에서 볼 수 있듯이 단일 디렉토리 항목은 32 바이트이며 클러스터의 크기는 4KB에서 64KB 사이가 될 수 있습니다. 사용중인 FAT의 디스크 크기/버전에 따라 다릅니다. 따라서 FAT 이후에 오는 것은 실제로 디렉토리 항목입니다.

하위 디렉토리의 경우 상위 디렉토리 항목에서 디렉토리 항목 테이블의 시작 클러스터를 찾을 수 있습니다. 디스크의 시작 부분에 반드시 압축되지는 않습니다.

\ (root) 
    - dir 1 
     - sub dir 1 
      - file 1 
     - sub dir 2 
      - file 2 
    - dir 2 
     - sub dir 3 

sub dir 2에 통과하려면 :

  1. 클러스터에 들어있는 루트 디렉토리 엔트리 테이블을 찾습니다

    이의 원래 예제의 약간 수정 된 버전을 살펴 보자, 더 설명하기 FAT 직후.

  2. 루트 디렉토리 항목 테이블에서 dir 1 항목을 찾고 시작 클러스터를 가져옵니다.
  3. 위에서 얻은 클러스터에서 dir 1에 대한 디렉토리 항목 표를로드하십시오.
  4. sub dir 2 항목을 찾아 시작 클러스터를 가져옵니다.
  5. 위에서 얻은 클러스터를로드하십시오.

이제 sub dir 2에 대한 디렉토리 항목 표가 있어야합니다.