web-dev-qa-db-ja.com

ユーザースペースからカーネルスペースにアクセスするためのinb、inl、inwの使用法

Linuxでカーネルスペースにアクセスするためにinbinl、およびinwを使用するユーザースペースの例は何ですか?

6
Renjith G

inboutbおよびその仲間は、カーネル↔ユーザースペース通信用ではなく、プラットフォーム固有のIOポートからの読み取りおよび書き込みに使用されます。

これらの機能の一般的な使用法は、シリアルポートまたはパラレルポート(したがって接続されているデバイス)との直接の相互作用であり、特定のカーネルデバイスドライバーを作成する必要はありません。
Xサーバーは、ビデオ(または場合によっては入力デバイス)ハードウェアとの低レベル通信にもこれらを使用できます。

ユーザースペースからこれらの呼び出しを使用するには、次の2つのことが必要です。

  • 呼び出しプロセスにはCAP_SYS_RAWIO capability が必要です(これは通常、rootとして実行する必要があることを意味します)。
  • 呼び出しプロセスは、 ioperm または iopl システムコールを使用して、必要なポートを使用するためのアクセス許可を要求する必要があります。

Linux I/Oポートプログラミングミニ-HOWTO 基本事項を説明し、最後に簡単なサンプルプログラムがあります。*
これを使用するプログラムは、これらのポートの背後にあるハードウェア(またはファームウェア)と直接通信することに注意してください。カーネルは、これらの呼び出しを検証したり、干渉したりしません。したがって、それらを誤用すると、深刻な問題が発生する可能性があります。取り扱い注意。

*コンパイルするには、#include <stdlib.h>を実行し、<asm/io.h><sys/io.h>に置き換える必要があります。

5
Mat