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

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

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

はじめに

FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
BPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールド。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

BPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールド

フクさん
フクさん

今回は「BPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールド」について。
ちなみにFAT12/16とFAT32ではフィールド構成が異なる。
FAT12/16は端折ってFAT32についてのみ説明する。

太郎くん
太郎くん

ほー。
FAT12/16はまた違うんだー。

フクさん
フクさん

詳細を知らいたいなら、CHANさんのサイトを参照すれば良いよ。
(他力本願)

BPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールドの重要パラメータ

フクさん
フクさん

重要なパラメータは以下になる。

  • BPB_FATSz32:1個のFAT領域が占めるセクタ数
  • BPB_RootClus:ルートディレクトリの先頭クラスタ番号
太郎くん
太郎くん

そういえば、前回、FAT領域の個数のパラメータの話は出て聞いたけど、
FAT領域の大きさの話はなかったねー。

フクさん
フクさん

そうそう。
つまり、BPB_FATSz32が分からないと実際の記録領域の先頭が分からないってことになるんで、
かなり重要なパラメータになる。

実際のBPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールドの重要パラメータを読み出してみる

フクさん
フクさん

じゃ、FatFsに於ける、BPB後半を見てみよう。

BPB_FATSz32、BPB_ExtFlags、BPB_FSVer、BPB_RootClus、BPB_FSInfo、BPB_BkBootSec、BPB_Reserved、BS_DrvNum、BS_Reserved、BS_BootSig、BS_VolID、BS_VolLab、BS_FilSysType、BS_BootCode32、BS_BootSign、1個のFAT領域が占めるセクタ数、ルートディレクトリの先頭クラスタ番号
フクさん
フクさん

重要パラメータだけ引っこ抜いてくると、

  • BPB_FATSz32:1個のFAT領域が占めるセクタ数:0x400*512=524288[byte]
  • BPB_RootClus:ルートディレクトリの先頭クラスタ番号:2
太郎くん
太郎くん

FAT領域が524288[byte]あるのか。

フクさん
フクさん

そして、前回出来てきたパラメータのBPB_NumFATsを掛けたのが本当のFAT領域になる。
まぁ今回の場合、BPB_NumFATs=1だったんで、524288[byte]がFAT領域ってことにはなるけどね。

次の領域

太郎くん
太郎くん

で、このパラメータが特定できた次はどうなるの?

フクさん
フクさん

ルートディレクトリエントリを特定する。

太郎くん
太郎くん

ルートディレクトリエントリ??

フクさん
フクさん

まぁそのDiskの天辺のディレクトリだな。
WindowsのCドライブで表現すると
「C:\」がルートディレクトリ
FatFsの場合は「1:」と表現するが。
このルートディレクトリの情報を格納しているのがルートディレクトリエントリ

太郎くん
太郎くん

ほー。
ここから結構具体的なディレクトリ構成とかファイルとかの話になるのか。

フクさん
フクさん

そうだね。
まぁ次回はルートディレクトリエントリの特定からだね。

まとめ

フクさん
フクさん

まとめだよ。

  • BPB(BIOS Parameter Block)のFAT32におけるオフセット36以降のフィールドの説明。
    • FAT12/16とFAT32で構成が違うが、ここではFAT32で説明。
  • 重要パラメータはBPB_FATSz32、BPB_RootClus。
  • 上記が分かるとルートディレクトリエントリの位置が分かる。

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

コメント

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