ユーザー空間からハードウェアに直接アクセスできますか?

ユーザー空間からハードウェアに直接アクセスできますか?

職場には、DOSソフトウェアによって制御される組み込みデバイスがあります。私の使命は、次世代ハードウェアからDOS代替オペレーティングシステムとしてLinuxの使用を評価することです。私の研究によると、DOSは選択に応じて潜在的に危険なタスクを実行することができるまったく異なるタイプのオペレーティングシステムです。私が理解したように、ハードウェアに直接アクセスするにはカスタムドライバを作成する必要があります。上司の好奇心を満たすためには、次のことを知っておく必要があります。ユーザー空間からハードウェアに直接アクセスできますか???

私の推測は「いいえ」ですが、私よりも多くの知識を持っている方々の意見を聞きたいです。

答え1

はい、しかしほとんど役に立ちません。 32ビットx86システムでは、システムioperm(2)コールを使用して、現在のプロセスがポートI / Oを直接実行できるように設定できます。私はこれが64ビットシステムでは機能しないと思います。lseek/read/writeコンボもできますが/dev/port、私の考えには携帯性が落ちます。バラよりhttp://tldp.org/HOWTO/IO-Port-Programming-2.html詳しくはこちらをご覧ください。もちろん、どちらのアプローチもデバイスドライバを書くよりはるかに遅く、柔軟性が低くなります(/dev/port最も遅い)。もちろん、これらのユーザースペースメカニズムのどれも割り込みやそのようなものを処理できません。パフォーマンスが問題であれば、最終的にデバイスドライバを作成します。

答え2

あなたの推測は正しいです。カーネルは、ハードウェア要求を送信できる唯一のソフトウェアです。これはLinuxにのみ適用されません。実際、DOSより最新のオペレーティングシステムではハードウェアに直接アクセスできません。これは非常に危険だからです。

しかし、独自のドライバを書くのに問題はなく、多くの文書が提供されています。例えば、このチュートリアルはxatlantisにあります。最近のようで(大事です!)良いソースのようです。

答え3

ユーザー空間でハードウェアにアクセスすることは確かに可能です。特にハードウェアレジスタがメモリマップされている場合。例えば、ウイオ

関連情報