Cygwin gccで使用できる仮想セクタリード処理を作成する

まず組み込みのファイルシステムを作成する際に、いきなり組み込みマイコン上でデバッグするのは大変なので、Cygwin gcc用に一旦作成しておき、それをそのままH8等のマイコンにポーティングしていくことにします。

Cygwin gccでファイルシステムをデバッグするのに必要なものは?

まず、少なくともセクタリード・ライトはできないといけません。
今回はとりあえずリード専用ファイルシステムをまず開発することにして、セクタリードの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;
}

Author: projectc3@gmail.com
Last modified: Sun Jul 31 06:52:46 JST 2005