EN JA
FDC(4)
FDC(4) FreeBSD Kernel Interfaces Manual FDC(4)

名称

fdcPC アーキテクチャのフロッピディスクコントローラドライバ

書式

device fdc

/boot/device.hints 中で:
hint.fdc.0.at="isa"
hint.fdc.0.port="0x3F0"
hint.fdc.0.irq="6"
hint.fdc.0.drq="2"
hint.fdc.0.flags="0x0"
hint.fd.0.at="fdc0"
hint.fd.0.drive="0"
hint.fd.0.flags="0x0"
hint.fd.1.at="fdc0"
hint.fd.1.drive="1"
hint.fd.1.flags="0x0"

解説

デバイス使用法

このドライバはフロッピディスクドライブへのアクセスを提供します。フロッピディスクは FM (片面単密度) か MFM (倍密度か高密度) 記録のどちらかを使用して操作することができます。

フロッピディスクコントローラはそれぞれ最大 4 つのドライブを接続できます。 fdc ドライバは現在、コントローラ (または、ACPI で 4 つのドライブ) ごとに最大 2 つのドライブを操作することができます。ドライバ初期化のときに、使用中のフロッピディスクコントローラのタイプを見つける試みを行います。既知のコントローラタイプは、オリジナルの NE765 か i8272 チップまたは代わりの NE72065 と i82077 チップと互換性がある 機能強化された コントローラのどちらかかです。これらの機能強化された (いくつかの強化の中で特に) コントローラは機能強化されたチップがいったん検出されると自動的に有効になるフロッピのデータ転送のための FIFO を実装しています。この FIFO の活性化はコントローラごとのフラグの値を 0x1 にして無効にすることができます。

デフォルトで、このドライバは数 N を付けてアタッチされたドライブごとに 1 つのデバイスノード /dev/fdN を作成します。歴史的な理由で、後続する UFS スタイルパーティション文字 (‘a’から‘h’までの範囲) を使用するデバイスノードもアクセスすることができます。それは、主なデバイスノードにシンボリックリンクを張ることで実装されています。

主なデバイスノードへアクセスすることは、多密度デバイスのための利用可能な媒体の密度を自動検出することを試みられます。したがって、高密度 3.5 インチ標準フロッピドライブで 720 KB 媒体か 1440 KB 媒体のどちらかを使用することは可能です。通常、この自動検出は媒体を挿入した後に、デバイスの open(2) を最初に呼び出すときに一度だけ起こります。これは、ドライブが適切なチェンジライン (changeline) サポートを提供すると仮定されるので、媒体の変更はドライバによって検出することができます。チェンジラインサポートを持たないドライブを示すために、ドライブごとのデバイスフラグ値を (自動検出を実行する open(2) の呼び出しごとに生じる) 0x10 にすることで上書きすることができます。

特別な密度の媒体でフロッピデバイスを使用しようとするとき、他のデバイスノードは形式 /dev/fdN. MMMM で作成することができます。ここで N はドライブ番号であり、 MMMM はデバイス密度について説明する 1 から 4 桁の間の数です。ドライブごとに最大 15 の追加サブデバイスはそのように作成することができます。管理者はこれらの数をどのように割り当てるかの方針で自由に決めることができます。 2 つの共通方針は、1 から 15 に番号付けされたサブデバイスを実装するか、またはキロバイトで媒体の密度を説明する数を使用することです。初めに、それぞれのデバイスは、ドライブタイプを (5.25 インチ HD ドライブのための 1200 KB や 3.5 インチ HD ドライブのための 1440 KB のような) あり得る最大の密度に設定されます。そのサブデバイスで使用される希望の密度は、 fdcontrol(8) を使用することで設定する必要があります。

ドライブタイプは、ドライブごとにデバイスフラグの下位 4 ビットを使って設定されます。次の値を指定することができます:

1
40 シリンダの 5.25 インチ倍密度デバイス (360 KB 固有の容量)
2
80 シリンダの 5.25 インチ高密度デバイス (1200 KB 固有の容量)
3
80 シリンダの 3.5 インチ倍密度デバイス (720 KB 固有の容量)
4
80 シリンダの 3.5 インチ高密度デバイス (1440 KB 固有の容量)
5
80 シリンダの 3.5 インチ特別密度デバイス (2880 KB 固有の容量、現在使用は最大 1440 KB の媒体に制限されています)
6
タイプ 5 と同じ、いくつかの BIOS との互換性のために利用可能です。

IA32 アーキテクチャでは、ドライブタイプは 0 のドライブとしてを指定することができます。その場合、ドライブの値を得るために CMOS 構成メモリが調べられます。 ACPI プローブは _FDE と _FDI メソッド (方法) で自動的にこれらの値を決定しますが、ドライブタイプヒント (hint) を指定することによって上書きすることができます。

通常、それぞれ設定されたドライブは初期化時に短いシークシーケンスを使用して、プローブされます。これは、設定されているドライブを見つけることを目的としていますが、実際に見当たらないかまたはそうでない場合は応答しません。 (ACPI プローブメソッド (方法) はこのシークを実行しません。) (取り外し可能なドライブがあるラップトップのような) いくつかの環境では、このドライブプローブを回避させて、そこにあるドライブのふりをするのが望ましいかもしれないので、ドライブが現在存在していなくても、ドライバの自動設定は働くでしょう。そのために、ドライブごとのデバイスフラグ値を 0x20 に指定する必要があります。

プログラミングインタフェース

通常の読み込み書き込み機能に加えて、 fdc ドライバは ioctl(2) を使用する多くの設定可能なオプションを提供しています。この機能のいずれかにアクセスするために、プログラマはプログラムにヘッダファイル < sys/fdcio.h> をインクルードする (含める) 必要があります。 open(2) への呼び出しは 2 つの可能な方法を実行することができます。 O_NONBLOCK フラグセットなしでデバイスをオープンするとき、デバイスは正常な方法でオープンされ、そしてそれは主なデバイスノードが自動媒体密度選択を実行し、任意の I/O 操作か次の ioctl(2) コマンドのいずれかで完全に利用可能なファイル記述子をもたらします。

O_NONBLOCK セットでデバイスをオープンするとき、自動媒体密度選択が回避され、デバイスは半分オープンされた状態で残されます。実際の I/O 操作は利用できませんが、以下で説明された多くの ioctl(2) コマンドを実行することができます。このモードは、デバイスの状態問い合わせや媒体のフォーマットのような、アクセス可能な媒体が存在する要件のないデバイスへのアクセスを対象としています。 O_NONBLOCK は I/O 操作の前にクリアされる必要があり、それは FD_STYPE コマンド (下記参照) を使用して事前に密度の指定を必要とする記述子で利用可能です。半分オープンされた記述子で許されていない操作は EAGAIN のエラー値でエラーを引き起こします。

次の ioctl(2) コマンドが現在利用可能です:

FD_FORM
フロッピディスク媒体をフォーマットするために使用します。 3 つ目の引数は、どのトラックをフォーマットするか、そして、フロッピディスク媒体の ID フィールドにどのパラメータを書き込むかを指定する struct fd_formb へのポインタです。
FD_GTYPE
選択されたデバイスの現在の密度定義レコードを返します。 3 つ目の引数は struct fd_type へのポインタです。
FD_STYPE
選択されたデバイスの密度定義を調節します。 3 つ目の引数は struct fd_type へのポインタです。固定密度のサブデバイス (ドライブあたり 1 から 15) に関して、この操作はスーパユーザ特権があるプロセスに制限されています。自動選択サブデバイス 0 において、操作はどんなプロセスにも一時的に許されていますが、この設定は次の自動選択で再び失われます。新しい媒体 ( O_NONBLOCK を使用してデバイスをオープンする必要があり、従ってその後 FD_STYPE を使用して調節する) をフォーマットするとき、これを使用することができます。
FD_GOPTS
現在のドライブオプションを取得します。 3 つ目の引数は、次のあり得るフラグの値のビット単位の和集合を含む、 int へのポインタです:
FDOPT_NORETRY
失敗時に自動的に操作を再試行しません。
FDOPT_NOERRLOG
失敗した I/O 操作の“ハードエラー”カーネルログを行いません。
FDOPT_NOERROR
read(2) または write(2) システムコールから返るとき、I/O エラーを表示しません。呼び出し側はそれぞれの操作の成功について問い合わせをするために FD_GSTAT 呼び出しを使用すると推測されます。これは通常の I/O 操作を使用して検索するために悪いブロックからの誤ったデータさえ許容するように意図されています。
FDOPT_AUTOSEL
デバイスは自動密度選択を実行します。上記のフラグと異なって、これは読み込み専用です。
FD_SOPTS
デバイスオプションを設定します。それらの意味に関しては上記を参照してください。 3 つ目の引数は int へのポインタです。ドライブオプションは記述子をクローズするとき、常にクリアされます。
FD_DEBUG
ドライバのデバッグレベルを設定します。 3 つ目の引数はレベル値の int へのポインタです。レベル 0 はすべてのデバッグをオフにします。ドライバが options FDC_DEBUG で設定された場合のみ適用されます。
FD_CLRERR
内部の低レベルエラーのカウンタをクリアします。通常、コントローラレベル I/O エラーは FDC_ERRMAX エラー (現在、100 に定義されている) までのみログに記録されます。このコマンドはカウンタをリセットします。スーパユーザの特権を必要とします。
FD_READID
フロッピディスク媒体から 1 つのセクタ ID フィールドを読み込みます。 3 つ目の引数は読み込みデータが返される、 struct fdc_readid へのポインタです。フロッピディスク媒体を分析するために使用することができます。
FD_GSTAT
利用可能であるなら、最近のフロッピディスクコントローラの状態を返します。 3 つ目の引数はステータスレジスタ (ST0, ST1, ST2, C, H, R と N) が返される、 struct fdc_status へのポインタです。最近の状態が利用可能でないなら、 EINVAL が生じます。
FD_GDTYPE
フロッピディスクドライブのタイプを返します。 3 つ目の引数は enum fd_drivetype へのポインタです。このタイプはドライブごとの設定フラグまたは IA32 システム上の CMOS 設定データまたは ACPI 名前空間に使用されるのと同じです。

関連ファイル

/dev/fd*
フロッピディスクデバイスのノード

作者

このマニュアルページは、初めに Wilko Bulte によって書かれ、後に Jörg Wunsch によって書き直されました。
May 11, 2006 FreeBSD