Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> デバイスモデルバス、ドライバ、デバイス基本チュートリアル

デバイスモデルバス、ドライバ、デバイス基本チュートリアル

  
 

Kobject、ksetはデバイスモデルの基本構造ですが、デバイスモデルはこれら2つの構造を使用してデバイスの階層関係を完成させますが、実際のデバイスドライバの作成では基本的にkobject、ksetを使用しません。なぜなら、kobjectおよびkset構造体はデバイスの階層関係を表すことしかできないからです。デバイスの駆動は単純な階層関係ではありません。 Kobject、kset構造体はより大きな構造体に埋め込む必要があります。kobject、ksetは階層関係を表すために使用され、他のメンバはデバイスドライバの特定の機能を表すために使用されます。

デバイスモデルでは、デバイスドライバは主にバス、ドライバ、デバイスの3つの部分で構成されていることがわかりますこれらの3つの標準コンポーネントを通して、あらゆる種類の複雑なデバイスが使用可能になりますデバイスドライバの作成、つまり我々が書いたデバイスドライバを単純化する目的は、実際にはこれら3つの部分のごく一部にすぎません。


私たちが書いたデバイスドライバは、USBバスのように最初にバスに属しているか、PCIバスに属しているか、I2Cバスに属しているドライバなどでなければなりません。デバイスドライバ、システムへの登録およびインストール時に、システムはまずドライバがどのバスに属しているか(デバイスドライバが書き込まれるときに定義されている)を調べ、ドライバを対応するバスのkset、つまり現在のデバイスドライバのオブジェクトに追加します。対応するバスのksetに参加して、階層的な関連付けを形成します。システムは、デバイスが存在することを検出すると(ハードウェア)、最初にそのデバイスがどのバスに属しているか(ハードウェア接続)を判断し、次に現在のバスの下にあるすべてのデバイスドライバを調べ、自分のバスのプローブ機能を通じてデバイスドライバがあるかどうかを調べます。プログラムマッチングは現在のデバイスを駆動することができ(一般的にはデバイスのPID、VIDをドライバーのPID、VIDと比較して一致するかどうかを調べます)、ドライバーがデバイスを駆動できる場合、現在のデバイスも追加されます。バスのksetでは、ドライブ可能なデバイス用のドライバがない場合、それはバスのデバイスリストにしか存在できず、デバイスがバスを介して一致できない場合、バスのデバイスリストに存在する方法はありません。バスはバス上のすべてのドライバとバス上のデバイスを管理するため、すべてのデバイスとすべてのドライバを分離し、すべてのデバイスを管理するためにデバイスksetとデバイスドライバksetを設定する必要があります。デバイスドライバ、つまり、バスksetは実際には2つのkset(デバイスkset、デバイスドライバkset)を含み、デバイスksetは現在のバスデバイスのすべてのkopsを含み、デバイスドライバksetは現在のバスのすべてのデバイスを含みます。 kobjectが駆動され、すべてのバスがバスのksetを形成し、それが次の図の階層関係を形成するようになります。
bus-dirver-device

各デバイスは異なるデバイスに接続されます。バス上で、装置が対応するバスに接続されると、対応するバスの種類が決定され、装置がバスに接続されると、バスはまず装置を走査して装置がバスに適しているかどうかを調べる。適切な場合は、バス全体のデバイスドライバリストをスキャンして、デバイスを管理できるドライバがあるかどうかを調べます。ボディ内の対応するポインタメンバは対応するドライバを指し、対応するデバイスドライバが一時的に見つからない場合、デバイス構造内のドライバへのポインタは一時的に空であり、まだデバイスドライバがないことを示し、それはバスのデバイスキューにもある。デバイスがバスチェックに合格できなかった場合、そのデバイスはバスデバイスリストに表示されません。当然、一致するドライバを見つけるためにデバイスドライバリストはスキャンされません。

手動インストールか自動インストールかにかかわらず、各デバイスドライバは対応するバスにインストールされますいわゆるインストールとは、ドライバを対応するバスドライバリストにマウントすることです。対応するバスドライバリストへのマウントは、まず第一に、バスマッチング要件を満たすために、その要件にのみ適しており、バスドライバリストにマウントすることができ、このステップに到達したときにのみ、システムはバスデバイスリスト全体をスキャンして見つける。このドライバを管理する必要のあるデバイスはありますか?デバイスが見つかると、ドライバのデバイス管理リストにそのデバイスの管理目的を達成するためのデバイスのアドレスが記録されます。

上記のデバイスを挿入した後、またはドライバをインストールした後は、デバイスのみがシステムに表示され、デバイスドライバは表示されず、デバイスドライバとそれに対応するデバイスのみが表示されます。ドライバがインストールされるか新しいデバイスが挿入されると、デバイスまたはデバイスドライバは自動的に対応するリンクリストをスキャンして、ペアリングの可能性を検出します。

図に示すように、上記の3つの関係を組み合わせるには、次のようにします。
bus-dirver-device

Linuxデバイスモデルバスタイプ - bus_typebus_type

関連データ構造:
カーネルによってサポートされる各バスタイプはbus_typeオブジェクトによって表されます。サブシステムsubsysはbus_typeに埋め込まれています。システム内のbus_subsysサブシステムは、すべてのbus_types内のsubsysをまとめます。 Bus_subsysはsysfsの/sys /busディレクトリに対応します。

さらに、bus_typeにはデバイスとドライバの2つの埋め込みksetオブジェクトがあります。バス上のデバイスとドライバを表します。



関数bus_for_each_dev()とbus_for_each_drv()は、それぞれバス上のデバイスとドライバのリストにあるすべての要素を走査するために使用されます。

Copyright © Windowsの知識 All Rights Reserved