IO(4) | FreeBSD Kernel Interfaces Manual | IO(4) |
名称
io — I/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 |