バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのファイル上シミュレーションの話。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
FatFs Win32のソースコード群確認
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
前回、
「FatFsのディスクアクセス部分を改造してディスクイメージをファイルにする方向で進める!(キリッ)」
みたいなことをフクさんが言ってたけど・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
(「キリッ」は入ってなかったと思うぞ・・・。)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
具体的にはどこをどう弄ることになるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まず、FatFsのWin32フォルダの内容を確認してみよう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
ソースコード関連としては以下があるね。
- diskio.c
- ff.c
- main.c
- ffsystem.c
- ffunicode.c
FatFs Win32のソースコード群の概要
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
それぞれ簡単に説明するとこんなだ。
- diskio.c :ディスクアクセス
- ff.c:FatFs本体
- main.c:FatFs対話用
- ffsystem.c:OS依存関数(malloc/free/排他同期)
- ffunicode.c:UNICODEテーブル
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
これらを見る感じだと、
diskio.c :ディクスアクセス
を改造すればOKそうってことかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
その通り。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
実際にソースコードを見ても、以下のWindows APIが散見される。
- CreateFile
- ReadFile
- WriteFile
- SetFilePointer
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ということは、結構そのままでも行ける?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁ結構流用はできるだろうが、
これらのAPIはWinXP時代のHDD直接制御を目的にしたものなので、
ちょこちょこ弄る必要はあるかもね。
改造方針
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、改造方針は以下だ。
- 物理ドライブ0は従来通りRAM Disk
- 物理ドライブ1~9のディスクイメージをファイルとする。
ファイル名はPhysicalDriveXとする。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
RAM Disk以外に9個のディスクイメージが作れるようになるわけか!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁ一個しか使わないけどねー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、次回までにざっと改造しておこう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- FatFs Win32のソースコード群確認。
- 「diskio.c」を改造すればディスクイメージをファイルにできそう。
- diskio.cはWindowsXP時代のHDDアクセス用にAPIが残っている。
- このAPIをうまく流用すると楽かもしれない。
- 認識する物理ドライブを元からあるRAM Diskと別に加えて10個にする方針。
バックナンバーはこちら。
コメント