はい、しかしめったに役に立ちません。 32 ビット x86 システムでは、ioperm(2)
を使用できます。 現在のプロセスをセットアップして、ポート I/O を直接実行できるようにするためのシステム コール。これは 64 ビット システムでは機能しないと思います。 lseek/read/write
もできます /dev/port
に対する組み合わせ これも同様にあまり移植性がないと思います。詳細については、http://tldp.org/HOWTO/IO-Port-Programming-2.html を参照してください。もちろん、これらのアプローチは両方とも、デバイス ドライバーを作成するよりもはるかに遅く、柔軟性に欠けます (/dev/port
最も遅い)。もちろん、これらのユーザー空間メカニズムでは、割り込みなどを処理することはできません。パフォーマンスが問題になる場合は、デバイス ドライバーを作成することになります。
あなたの推測は正しいです。カーネルは、ハードウェア要求を送信できる唯一のソフトウェアです。これは、Linux だけに当てはまるわけではありません。事実上、DOS よりも新しいオペレーティング システムでは、ハードウェアに直接アクセスすることはできません。なぜなら、あなたも疑っているように、これは非常に危険だからです。
ただし、独自のドライバーを作成することに問題はなく、ドキュメントも豊富に用意されています。たとえば、xatlantis のこのチュートリアルは最近 (重要です!) 良い情報源のようです。