2012-11-15 3 views
10

パート1:そこLINUX/UNIXの専門家にデバイスドライバコードはどこで実行されますか?カーネルスペースまたはユーザースペース?

は、あなたがデバイスドライバについて理解する助けてくださいでした。私が理解したように、ドライバはハードウェアと直接的にやりとりし、いくつかのapisを公開してデバイスにアクセスするコードです。私の質問は、このコードを実行する場所は、ユーザースペースまたはカーネルスペースですか?

カーネルスペースで実行されるコードには、任意のメモリロケーションへのアクセス(私が間違っている場合は正しいpls)のような特別な権限があります。サードパーティのドライバをインストールし、カーネル空間で動作する場合は、これがシステム全体に対して有害ではないでしょうか?どのOSがこれをどのように処理するのですか?

パート2:

システムがこれらのデバイスを認識する方法、(カメラ、キーボード...)USBデバイスの例を取ることができますか?システムは、どのドライバをインストールするかをどのように知っていますか?ドライバはデータを読み書きするデバイスのアドレスをどのように知っていますか?

(これはここに答えるには大きすぎる場合は、plsはいくつかの良いドキュメントやチュートリアルのリンクを提供..私が試したし、これらのための答えを見つけることができませんでした。PLSのに役立つ)

+0

Linux Device Driver (3rd Edition)を読んでお勧めします。 – SomeWittyUsername

+1

私の昔のLinuxデバイスドライバ開発では、デバイスドライバがカーネル内でコンパイルされ、100%のカーネルスペースが実行されました。今日のカーネルは、バグのあるデバイスドライバから自分自身を守り、割り込みすることさえあるようです。しかし、私が学問の試験の質問であれば、 "カーネルスペース"を答えとして取っていきます。 –

+0

USBデバイスの検出については、デバイスを認識するためにVIDとPIDが使用されます。 –

答えて

16

パート1

Linuxの場合、ドライバはカーネルスペースで動作します。そして、あなたがそこに重要なセキュリティの意味を述べるように、そうです。ドライバのほとんどの例外はカーネルを破棄し、カーネルのメモリが破壊される可能性があります(すべての結果が得られます)。バギードライバーはシステムのセキュリティーにも影響を与え、悪意のあるドライバーは自分が望む何かを絶対に行うことができます。

MacOSXとWindow NTカーネルで見られる傾向は、ユーザースペースドライバです。 Microsoftはしばらくの間、Windows Userspace Driver Frameworkを推し進めており、MacOSXはFirewireとUSBドライバ用のユーザースペースAPIと、多くのUSB周辺機器用のクラス準拠ドライバを提供してきました。サードパーティのカーネルモードのデバイスドライバをMacOSXにインストールするのは非常に珍しいことです。

おそらく、Windowsはカーネルパニックのために持っていた悪い評判はほぼすべての携帯電話、カメラやプリンタに付属の(多くの場合、低品質)、カーネルモードドライバに起因することができます。

Linuxグラフィックスドライバは、カーネル常駐部分を最小限に抑えてユーザー空間に実装されています。Fuseは、ユーザー空間にファイルシステムを実装することができます。

第2

USB、ファイヤワイヤ、MCI(また、PCI-E)全ては、バス運転者にデバイスを一致させることができ、それを通して列挙機構を有します。実際には、これはすべてのデバイスが自分が何であるかを記述するメタデータを公開することを意味します。メタデータ内に含まれる

はデバイスID、ベンダーID及びデバイスが提供する機能および関連のclassidの説明です。 ClassIDは汎用Class Driversを容易にします。

概念的には、オペレーティングシステムは、具体的にはベンダーIDとデバイスIDをサポートするドライバを見つけるためにしようとし、その後のClassID(複数可)をサポートするものにフォールバック。

ドライバとデバイスのマッチングは、Linux Device Modelの中心となるコアコンセプトであり、マッチングに使用される一致条件は特定のバスドライバではmatch()です。

デバイスドライバは、デバイスにバインドされると、バスドライバ(またはそれによって与えられるアドレッシング情報)を使用して読み書きを実行します。 PCIとFirewireの場合、これはメモリマップされたIOアドレスです。 USBの場合は、アドレス情報をバスに送ります。

Linux Documentation treeは、Linuxデバイスモデルの設計についていくつかの洞察を提供しますが、実際にはエントリレベルの読書ではありません。

私はまた、次の2つの別々のものにこの質問を分割する必要があり

関連する問題