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

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

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

はじめに

FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
今回はルートディレクトリエントリの位置特定。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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)みたいに、
「ここのセクタにあります!」
って感じじゃないの?

フクさん
フクさん

そうだねー。
そういう直接的な指定ではないなー。

太郎くん
太郎くん

でも、特定はできるってことはやり方があるってことだよね?

フクさん
フクさん

当然。
じゃないとどういうファイルがあって、内部の実データがどこにあるのかわからん。

ルートディレクトリエントリの位置特定に必要なパラメータ

フクさん
フクさん

まずは、必要なパラメータを列挙してみよう。

  • MBRのPT_System
    • これでBPB(BIOS Parameter Block)の位置が特定。
    • 今回は63セクタ目
  • BPB
    • BPB_RsvdSecCnt
      • BPBの後ろから始まる予約領域のセクタ数
      • 今回は65セクタ
    • BPB_FATSz32
      • FATの数。
      • 今回は1個
    • BPB_NumFATs
      • FAT1個あたりのセクタ数
      • 今回は0x400=1024セクタ
  • ルートディレクトリエントリ
    • BPBと予約領域とFAT領域の直後に配置
太郎くん
太郎くん

と、いうことは、
BPBと予約領域とFAT領域が分かれば、結果として
ルートディレクトリエントリが分かるってことか!

フクさん
フクさん

そういうことだねー。

ルートディレクトリエントリの位置特定のため領域を並べてみる。

フクさん
フクさん

ざっと領域を並べてみよう。

  • MBR:0セクタ目
  • BPB:63セクタ目
  • 予約領域:64セクタから65セクタ分→64~127セクタ
  • FAT領域:128セクタ目から1024セクタ分→ 128~1151セクタ
  • ルートディレクトリエントリ:1152セクタ目から
太郎くん
太郎くん

ほーう?

フクさん
フクさん

絵で詰み上げて見るとこんな感じになるな。

MBR:0セクタ目、BPB:63セクタ目、予約領域:64セクタから65セクタ分→64~127セクタ、FAT領域:128セクタ目から1024セクタ分→ 128~1151、ルートディレクトリエントリ:1152セクタ目から
太郎くん
太郎くん

あー。なるほど。
こういう積みあがり方をしていたのか!

フクさん
フクさん

というわけで、ルートディレクトリエントリの位置がわかったところで
次回はそこの内容を見ていこう。

まとめ

フクさん
フクさん

まとめだよ。

  • ルートディレクトリエントリを直接特定できるパラメータはない。
  • 以下パラメータが必要。
    • PT_System、BPB_RsvdSecCnt、BPB_FATSz32、BPB_NumFATs。
  • MBR、BPB、予約領域、FAT領域を積み上げていくとルートディレクトリエントリの位置が分かる。

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

コメント

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