職場では、DOSソフトウェアによって制御されるいくつかの組み込みデバイスがあります。私は、次世代ハードウェア上のDOSの代替OSとしてのLinuxの使用を評価する責任を負っています。私の調査では、DOSはまったく異なるタイプのオペレーティングシステムであり、必要に応じて潜在的に危険なことを実行できるという結論に達しました。私の理解では、ハードウェアに直接アクセスしたい場合は、カスタムドライバーを作成する必要があります。上司の好奇心を満たすために知っておくべきことは次のとおりです。ユーザースペースから直接ハードウェアにアクセスすることは可能ですか ??
私の推測ではありませんが、私よりはるかに知識のある人の意見をお願いしたいと思います。
あなたの推測は正しいです。カーネルは、ハードウェア要求を送信できる唯一のソフトウェアです。これはLinuxだけに当てはまるわけではありません。 DOSより新しいオペレーティングシステムでは、ハードウェアに直接アクセスできません。これもご想像のとおり、非常に危険だからです。
ただし、独自のドライバを作成することに問題はなく、多くのドキュメントが利用可能です。たとえば、 xatlantisでのこのチュートリアル は最近の(重要です!)そして良い情報源のようです。
はい、しかしそれはめったに役に立ちません。 32ビットx86システムでは、ioperm(2)
システムコールを使用して現在のプロセスを設定し、ポートI/Oを直接実行できるようにすることができます。これは64ビットシステムでは機能しないと思います。 lseek/read/write
に対して/dev/port
の組み合わせを行うこともできますが、これも同様に移植性が低いと思います。詳細については、 http://tldp.org/HOWTO/IO-Port-Programming-2.html を参照してください。もちろん、これらのアプローチはどちらも、デバイスドライバーを作成するよりもはるかに遅く、柔軟性がありません(/dev/port
すべての中で最も遅い)。もちろん、これらのユーザースペースメカニズムでは、割り込みなどを処理することはできません。パフォーマンスが問題になる場合は、デバイスドライバーを作成することになります。
ユーザースペースからハードウェアにアクセスすることは間違いなく可能です。特にハードウェアレジスタがメモリマップされている場合。たとえば、 [〜#〜] uio [〜#〜] 。