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

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

バックナンバーはこちら。
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

FatFs Win32 ファイル上シミュレーションのディスクイメージ

フクさん
フクさん

前回、「FatFs Win32 ファイル上シミュレーション」をしたわけだが、
projectフォルダにPhysicalDrive1ってファイルが出来ているはずだ。

太郎くん
太郎くん

あ!ホントだ!
ファイルが出来てる。

フクさん
フクさん

これがディスクイメージだ。

太郎くん
太郎くん

ということは、僕たちはこれを直接バイナリエディタで見ていけば良いって感じかな?

フクさん
フクさん

そうなるね。

MBR(Master Boot Record)の確認

フクさん
フクさん

まずはMBRことMaster Boot Recordの確認だ。

太郎くん
太郎くん

Master Boot Record?

フクさん
フクさん

以下は、Wikipediaからの引用だ。

マスターブートレコード(Master Boot Record、略称MBR)とは、PC/AT互換機に於いて、単数または複数のパーティションに分けられたディスクのパーティション外に存在する先頭セクタでブートセクタの一種である。PC/AT互換機では、BIOSがセクタ長が512バイトで先頭1セクタのみのロードしか保証しないため、サイズは512バイトである。0(先頭)~445(446バイト)にブートストラップローダ、440~444(4バイト)にDisk MBR signature、446~509(64バイト)にパーティションテーブル、510~511(2バイト)にブートシグニチャがある。

Wikipediaより(https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%96%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89)
太郎くん
太郎くん

うーん。
パーティションが定義されてるってことになるのかな・・・。

フクさん
フクさん

そうそう。
今回の場合はパーティションは一個しかないので、MBRの中の一個のパーティションテーブルエントリを参照することで、そのパーティションの先頭セクタが分かる。

太郎くん
太郎くん

まずは、そのパーティションの先頭セクタを特定しないと始まらないってことか。

パーティションテーブルエントリの確認

フクさん
フクさん

とりあえず、バイナリエディタでMBR確認する。
MBRは必ず0セクタに配置される。

struct MBR_t {  BYTE   MBR_bootcode[446];  MBR_Partation_t MBR_Partation[4];  WORD   MBR_Sig; }; struct MBR_Partation_t {  BYTE PT_BootID;  BYTE PT_StartHd;  WORD PT_StartCySc;  BYTE PT_System;  BYTE PT_EndHd;  WORD PT_EndCySc;  DWORD PT_LbaOfs;  DWORD PT_LbaSize; }; FAT32、0x3F=63セクタ目にBPB(BIOS Parameter Block)
太郎くん
太郎くん

なんかほとんど00hだね?

フクさん
フクさん

先頭にはMBR_bootcodeという446byteの領域があって、内容としてはシステム依存ではあるが、一般的には00hで埋めるようだ。

太郎くん
太郎くん

ということは、その446byteの次から始まってるのが、重要な情報ってことか。

フクさん
フクさん

重要なのはPT_SystemPT_LbaOfs
PT_Systemはそのパーティションのファイルシステムで、今回の場合はFAT32になってる。
PT_LbaOfsはBPBことBIOS Parameter Blockが埋まってるセクタを示す。
今回の場合だと0x3Fで63セクタ目にBPBが居るようだ。

太郎くん
太郎くん

BPB?
BIOS Parameter Block?

フクさん
フクさん

まぁそのFATの詳細情報が埋まってるところだな。
内容については次回説明しよう。

まとめ

フクさん
フクさん

まとめだよ。

  • FatFs Win32 ファイル上シミュレーションのディスクイメージを確認。
    • PhysicalDrive1で生成されている。
  • MBR(Master Boot Record)を確認
    • FAT32であることを確認。
    • BPB(BIOS Parameter Block)が63セクタ目にあることを確認。

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

コメント

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