まず組み込みのファイルシステムを作成する際に、いきなり組み込みマイコン上でデバッグするのは大変なので、Cygwin gcc用に一旦作成しておき、それをそのままH8等のマイコンにポーティングしていくことにします。
まず、少なくともセクタリード・ライトはできないといけません。
今回はとりあえずリード専用ファイルシステムをまず開発することにして、セクタリードのCygwin gcc用のものを作成します。
ここでは、「実際に物理ドライブに直接アクセスするもの」と、「物理ドライブイメージファイルをマウントして操作するもの」を開発します。
なお、このページで取り扱う物理ドライブへのアクセス方法に関しては、Windows2000/XPのみの対応です。
(Windows98/Me等は別な方法を使用する必要があります)
また、物理ドライブアクセスに関して別な記事も作成しましたのでご覧下さい。
記事へ
ソースコード(pdiskdrv.zip)
コードはシンプルですので実際に見ていただくとして、この処理を使用してセクタリードする場合には、以下のようにして行います。
PDISKDRV* disk; int main(void){ unsigned char buff[512]; // diskを生成する disk = new PDISKDRV; // 物理ドライブ1(PHYSICALDRIVE1)、セクタサイズ512バイトでマウントする disk->mount("\\\\.\\PHYSICALDRIVE1",512); // セクタ0をリードし、buffに格納する disk->sector_read(0,buff); // diskを消滅させる delete disk; }
ソースコード(vdiskdrv.zip)
コードはシンプルですので実際に見ていただくとして、この処理を使用してセクタリードする場合には、以下のようにして行います。
また、ドライブをリードしてイメージファイルを生成する際に、シェアウェア(30日間使用可能)のディスクダンプエディタを使用させていただきました。その他DiskProbeをはじめとするディスクエディタでも物理ドライブイメージを作成できるかもしれません。
このvdiskdrv.zipでもイメージファイルを作成できるはずです^^;;
VDISKDRV* disk; int main(void){ unsigned char buff[512]; // diskを生成する disk = new VDISKDRV; // 物理ドライブイメージファイルをセクタサイズ512バイトでマウントする disk->mount("COMPACTFLASH2048MB_512.BIN",512); // セクタ0をリードし、buffに格納する disk->sector_read(0,buff); // diskを消滅させる delete disk; }