バックナンバーはこちら。
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のディスクアクセス部分を改造してディスクイメージをファイルにする方向で進める!(キリッ)」
みたいなことをフクさんが言ってたけど・・・。

(「キリッ」は入ってなかったと思うぞ・・・。)

具体的にはどこをどう弄ることになるの?

まず、FatFsのWin32フォルダの内容を確認してみよう。

ソースコード関連としては以下があるね。
- diskio.c
- ff.c
- main.c
- ffsystem.c
- ffunicode.c
FatFs Win32のソースコード群の概要

それぞれ簡単に説明するとこんなだ。
- diskio.c :ディスクアクセス
- ff.c:FatFs本体
- main.c:FatFs対話用
- ffsystem.c:OS依存関数(malloc/free/排他同期)
- ffunicode.c:UNICODEテーブル

これらを見る感じだと、
diskio.c :ディクスアクセス
を改造すればOKそうってことかな?

その通り。

実際にソースコードを見ても、以下のWindows APIが散見される。
- CreateFile
- ReadFile
- WriteFile
- SetFilePointer

ということは、結構そのままでも行ける?

まぁ結構流用はできるだろうが、
これらのAPIはWinXP時代のHDD直接制御を目的にしたものなので、
ちょこちょこ弄る必要はあるかもね。
改造方針

とりあえず、改造方針は以下だ。
- 物理ドライブ0は従来通りRAM Disk
- 物理ドライブ1~9のディスクイメージをファイルとする。
ファイル名はPhysicalDriveXとする。

RAM Disk以外に9個のディスクイメージが作れるようになるわけか!

まぁ一個しか使わないけどねー。

とりあえず、次回までにざっと改造しておこう。
まとめ

まとめだよ。
- FatFs Win32のソースコード群確認。
- 「diskio.c」を改造すればディスクイメージをファイルにできそう。
- diskio.cはWindowsXP時代のHDDアクセス用にAPIが残っている。
- このAPIをうまく流用すると楽かもしれない。
- 認識する物理ドライブを元からあるRAM Diskと別に加えて10個にする方針。
バックナンバーはこちら。
コメント