バックナンバーはこちら。
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との対話
んで、前回FatFsをWindows上で起動させたわけだけど、
このコンソール画面は一体なに?
FatFsのWindowsサンプルは対話式にFatFsを動作させるようになってるんだ。
対話式?
簡単に言うとコマンドで指示して動作させる感じ。
ほう?
まずは 「?」 を打ってEnterを押してみな。
FatFsコンソールのヘルプ
あ、なんか出てきた!
[Disk contorls]
di <pd#> - Initialize disk
dd [<pd#> <sect>] - Dump a secrtor
ds <pd#> - Show disk status
dl <file> - Load FAT image into RAM disk (pd#0)
[Buffer contorls]
bd <ofs> - Dump working buffer
be <ofs> [<data>] ... - Edit working buffer
br <pd#> <sect> <count> - Read disk into working buffer
bw <pd#> <sect> <count> - Write working buffer into disk
bf <val> - Fill working buffer
[Filesystem contorls]
fi <ld#> [<opt>] - Force initialized the volume
fs [<path>] - Show volume status
fl [<path>] - Show a directory
fL <path> <pat> - Find a directory
fo <mode> <file> - Open a file
fc - Close the file
fe <ofs> - Move fp in normal seek
fE <ofs> - Move fp in fast seek or Create link table
ff <len> - Forward file data to the console
fh <fsz> <opt> - Allocate a contiguous block to the file
fd <len> - Read and dump the file
fr <len> - Read the file
fw <len> <val> - Write to the file
fn <object name> <new name> - Rename an object
fu <object name> - Unlink an object
fv - Truncate the file at current fp
fk <dir name> - Create a directory
fa <atrr> <mask> <object name> - Change object attribute
ft <year> <month> <day> <hour> <min> <sec> <object name> - Change timestamp of an object
fx <src file> <dst file> - Copy a file
fg <path> - Change current directory
fj <path> - Change current drive
fq - Show current directory path
fb <name> - Set volume label
fm <ld#> [<fs type> [<au size> [<align> [<N fats> [<N root>]]]]] - Create FAT volume
fp <pd#> <p1 size> <p2 size> ... - Divide physical drive
fz [<ld#> <pd#> <pt#>] - Map logical drive to partition
p <cp#> - Set code page
これが、FatFsと対話するためのコマンド群だ。
Disk contorls、Buffer contorls、Filesystem contorls
とカテゴリ分けされてるようだけど、
どこから何をやったら良いかわからんな。
あと、パラメータにあるpd#とかld#とかって何のパラメータ??
pd#は物理ドライブ番号で、
ld#は論理ドライブ番号だな。
物理ドライブ?
論理ドライブ?
物理ドライブと論理ドライブ
今回に於いては特に物理ドライブ、論理ドライブの切り分けは気にして良いが、
簡単に説明しておこう。
分からなかったら、「物理ドライブ 論理ドライブ」でGoogle検索すれば、
丁寧に説明してくれてるサイトは多いと思うよ。
物理ドライブはその名通り、物理的なドライブの番号。
論理ドライブは物理ドライブをパーティション分けした場合も含めた番号。
例えば、WindowsとかだとCドライブから始まるが、
物理ドライブをパーティション分けすると、
物理的には同一ドライブだが、
Windowsが認識するドライブとしては
CドライブとDドライブの2つになる。
ってのが論理ドライブだな。
まぁ今回は物理ドライブ、論理ドライブ共に0番を使用するだけなんで、
とりえあずは気にしなくてもよいよ。
まぁ後で調べておくかー。
FatFsのコマンド呼び出し順序
大雑把に以下の流れで動作確認しようと思ってる。
- 物理ドライブへのアクセス初期化
- FATにフォーマット
- 論理ドライブマウント
- volume status参照
- ルートディレクトリ参照
- ファイルオープン(生成&書き込みモード)
- ファイルへの書き込み
- ファイルクローズ
- ルートディレクトリ参照
- ファイルオープン(読み込みモード)
- ファイル読み出し
- ファイルクローズ
いきなりfopenとかfwriteとかができるのかと思ってたけど、
フォーマット、マウントとかが事前に必要なのか。
まぁRAM上に展開されたメモリ空間にFATを構築するんで、
起動直後はまっさらな状態なんだよね。
というわけで事前処理的に必要になる。
なるほど。
次回、上記手順で実際動かしてみよう。
まとめ
まとめだよ。
- FatFsと対話するためのコマンド群がある。
- 「?」でhelpが確認できる。
- パラメータ指定に物理ドライブと論理ドライブの指定があるので注意。
- ファイルアクセスの前にフォーマットやマウントなどの処理が必要。
- 上記が済めば、一般的なファイルアクセスAPIが使用できる。
バックナンバーはこちら。
コメント