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

名称

introデバイスとデバイスドライバの紹介

解説

このセクションはデバイス、デバイスドライバと雑多なハードウェアに関する情報を含んでいます。

デバイスの抽象化

デバイスは主にディスク、プリンタ、またはキーボードが付いたグラフィックスディスプレイのようなシステムに属するハードウェア関連の機材に使用される用語です。特定の基礎的なハードウェアなしでソフトウェアでデバイスの動作をエミュレートするいわゆる 疑似デバイス もあります。後者の種類の典型的な例は /dev/mem です、それは通常のファイルアクセスのセマンティクスを使用して物理的なメモリにアクセスすることができる抜け穴です。

一般的に、デバイスの抽象化はそれらの最上位層の共通セットのシステムコールを提供します。これらのシステムコールはカーネルの上位層によって対応するデバイスドライバにディスパッチされます。デバイスで利用可能なシステムコールのセットは open(2), close(2), read(2), write(2), ioctl(2), select(2), mmap(2) から選ばれます。すべてのドライバがすべてのシステムコールを実装しているわけではありません。例えば、端末デバイスで mmap(2) を呼び出すことは何も役に立ちません。

デバイスへのアクセス

UNIX 風のオペレーティングシステムでのデバイスのほとんどは、いわゆる デバイスノード を通してアクセスされます。またそれは時々 スペシャルファイル と呼ばれます。それらは通常ディレクトリ /dev 下のファイルシステム階層に置かれます ( hier(7) を参照)。

これが矛盾した状態に導くかもしれないことに注意してください。ここで、それらに関連している設定されたドライバを持っていないデバイスノードがあるか、またはそれらデバイスのプローブ (検出) に成功したドライバがあるかのいずれかです。しかし、デバイスのプローブに成功しても対応するデバイスノードがまだないのでアクセスすることはできません。最初の場合は、デバイスノードを介してデバイスを参照する試みは、エラーとなり、通常、 ENXIO がカーネルの上位層で返されます。 2 つ目の場合は、デバイスノードは、ドライバとそのデバイスが使用可能になる前に作成される必要があります。

いくつかのデバイスは 2 つの特徴をもつ形式があります: ブロック デバイスと キャラクタ デバイスで、よりうまい言葉を使うと、バッファリングされる (生の) デバイスとバッファリングされないものです。伝統的な名前は‘ ls -l’の出力でファイルタイプの識別として文字‘ b’と‘ c’に反映されています。バッファリングされるデバイスはオペレーティングシステムのバッファキャッシュを介してアクセスされています、そして、それらの上位のファイルシステムを層状にすることのみを単に目的としています。通常、それらはディスクとディスクのようなデバイスのみと歴史的な理由からテープデバイスのために実装されます。

生のデバイスはバッファリングされるデバイスを実装するものも含むすべてのドライバで利用可能です。後者のグループのデバイスでは、慣習的にデバイスノードのパス名に文字‘ r’を先頭に追加することによって区別します。例えば、 /dev/rda0 は最初の SCSI ディスクのために生のデバイスを示します。一方、 /dev/da0 はバッファリングされるデバイスに対応するデバイスノードです。

バッファリングされないデバイスは議題のデバイスがディスクデバイスであっても、ファイルシステム操作に関連しないすべての動作に使用されるべきです。これは、全体のディスクパーティションのバックアップを作るか、または 生の (raw) フロッピディスク (すなわち、テープのように使用されるもの) のバックアップを作ることを含んでいます。

デバイスノードへのアクセス制限は直接カーネルのドライバによって強制される代わりに、通常デバイスノードエントリの普通の (レギュラ) ファイルパーミションに制約されます。

デバイスノードを持たないドライバ

ネットワークデバイスのためのドライバは、アクセスするためにデバイスノードを使用しません。それらの選択はカーネル内の別の決定に基づきます。ネットワークデバイスの使用は一般的に呼び出し open(2) の代わりにシステムコール socket(2) を使用することによって行なわれます。

ドライバをカーネルに設定する

各カーネルのために、そのカーネルの機能やドライバを選ぶためといくつかのオプションを調整するための基本として使用される設定ファイルがあります。関連するファイルの詳細な記述については config(8) を参照してください。このセクションの個々のマニュアルページはそれらの構文部分の設定ファイルのサンプル行を提供しています。 ( i386 アーキテクチャのための) サンプル設定ファイル /sys/i386/conf/LINT も参照してください。

歴史

このマニュアルページは、 FreeBSD 2.1 ではじめて登場しました。

作者

このマニュアルページは、 David E. O'Brien による最初の入力とともに Jörg Wunsch によって書かれています。
January 20, 1996 FreeBSD