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

名称

ioI/O 特権ファイル

書式

device io


#include < sys/types.h>
#include < sys/ioctl.h>
#include < dev/io/iodev.h>
#include < machine/iodev.h>

struct iodev_pio_req { 
 u_int access; 
 u_int port; 
 u_int width; 
 u_int val; 
};

解説

スペシャルファイル /dev/io は、プロセスが I/O 特権 (それらは、通常カーネル内部コードのために予約されています) を獲得することを可能にする、制御されたセキュリティホールです。これは、ハードウェアを直接操作するユーザランドプログラムを書くために役に立ちます。

デバイスでの通常の操作は、 open(2) インタフェースを通してそれをオープンすることで、 ioctl(2) システムコールを使用して I/O 要求をファイル記述子に送ることです。

/dev/io に利用可能な ioctl(2) 要求は、主にプラットフォームに依存していますが、それらのすべての間で共通のものもあります。 IODEV_PIO は、I/O 操作が実行される要求のためにすべてのアーキテクチャによって使用されます。それは、その前にセットアップされなければならない、'struct iodev_pio_req' 引数を取ります。

access メンバは、要求された操作のタイプを指定します。それは、次の通りです:

IODEV_PIO_READ
操作は、"in"タイプです。値は、指定されたポート ( port メンバから、検索される) から読み込まれ、結果は、 val メンバに格納されます。
IODEV_PIO_WRITE
操作は、"out"タイプです。値は、 val メンバからとって来られ、指定されたポート ( port メンバとして定義されます) に書き込まれます。

最後に、 width メンバは、バイト単位で表現される、読み込まれるか、または書き込まれるオペランドのサイズを指定します。

/dev/io の任意のファイルアクセスパーミッションに加えて、カーネルは、スーパユーザだけがこのデバイスをオープンできるように強化しています。

遺産

/dev/io インタフェースは、i386 特有でしたが、異なって動作します。初期の実装は、 open(2) がファイルで呼び出されたとき、単に現在のスレッドの IOPL を上げました。この振る舞いは、i386 と amd64 アーキテクチャの両方のための古いサポートとして現在の実装に保持されています。

歴史

io ファイルは、 FreeBSD 1.0 で登場しました。
June 1, 2010 FreeBSD