【FatFs】車載外部ストレージ その103【ファイル上シミュレーション⑩】

【FatFs】車載外部ストレージ その103【ファイル上シミュレーション⑩】 車載外部ストレージ

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
今回はFAT領域を確認してみる。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

FAT領域の位置

太郎くん
太郎くん

今回はFAT領域をみるわけだけど、
どこに配置されてるんだっけ?

フクさん
フクさん

実は以前、FAT領域は特定してある。

太郎くん
太郎くん

あ、そっか!
128~1151セクタに配置されてるんだっけか。

太郎くん
太郎くん

1セクタ512[byte]だから
128[セクタ]*512[byte/セクタ]=65536[byte]
65536[byte]目を参照すれば良いね。

FAT領域参照

フクさん
フクさん

じゃ、FAT領域を見てみよう。

FAT領域、0xfffffff8、0xffffffff、0x0fffffff、0x00000004、0x0fffffff、0x00000006、0x0fffffff
太郎くん
太郎くん

んー?
だいたいffhがならんでるけど、そうでないとこもある?

太郎くん
太郎くん

クラスタチェーンを示してるのがFAT領域って話だったけど
どういう感じで表現されてるの?

フクさん
フクさん

まず、今回のフォーマットはFAT32なんで、
FAT領域の32bit単位で1クラスタのチェーン先が表現される。

太郎くん
太郎くん

右側の表が32ibt長で区切られてるのはそれのためだね。

フクさん
フクさん

ちなみにFAT16とかだと1要素は16bit長になる。

フクさん
フクさん

んで、話を戻して・・・。

フクさん
フクさん

そして、test.txtのディレクトリエントリがさしていたファイル内容はクラスタ3だった。
クラスタの番号は0から始まるので、要素の4つ目を見ることになる。
要素の4つ目を見ると、0x00000004という数値が埋まってる。

太郎くん
太郎くん

うん。確かに0x00000004だ。

フクさん
フクさん

これはクラスタ3がクラスタ4に続いていることを示している。

太郎くん
太郎くん

ほう!
これがクラスタチェーンか?!

太郎くん
太郎くん

あ、でもクラスタ4のところを見ると0x0fffffffになってるけど、
これはクラスタ0x0fffffffに繋がってるってこと?

フクさん
フクさん

いんや。
0x0fffffffはクラスタチェーンの終端を示していて、
ここのクラスタでチェーンが終わっていることを示している。
1クラスタで情報が事足りる場合は、最初からこの終端コードが埋まってることになるね。

クラスタチェーン図解

フクさん
フクさん

とりあえず今回のクラスタチェーンを図解してみた。

クラスタチェーン、クラスタ2、クラスタ3、クラスタ4、クラスタ5、クラスタ6、ルートディレクトリエントリ、Test.txtの内容、Test2.txtの内容、終端なのでこのクラスタだけで完結、クラスタ3はクラスタ4へチェーン、クラスタ4はチェーン終端、クラスタ5はクラスタ6へチェーン、クラスタ6はチェーン終端
太郎くん
太郎くん

ほーー!
確かにチェーン構造になってるねー。

太郎くん
太郎くん

そういえば、ルートディレクトリエントリもそこあるファイル数とかフォルダとかが増えると複数のクラスタになるの?

フクさん
フクさん

そうだね。
ディレクトリエントリは1個あたり32byteなんで、
1クラスタが4096[byte]の場合、
4096[byte]/32[byte]=128
128個のディレクトリエントリより多くなると
クラスタチェーンで別のクラスタに繋がることになる。

太郎くん
太郎くん

なるほど。
こういう仕組みでいろんな情報が伸縮自在ってことになってるのか。

まとめ

フクさん
フクさん

まとめだよ。

  • FAT領域の位置確認。
  • FAT領域参照。
    • FAT32の場合、32bit長データを1要素としてクラスタチェーンを表現している。
    • FAT16の場合は16bit長データを1要素としている。
  • 基本的には該当クラスタがどのクラスタ番号に繋がるかの数値が埋まっている。
    • 0x0fffffffがチェーン終端となる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました