Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> デバイスモデルkobject、kset、およびその関係

デバイスモデルkobject、kset、およびその関係

  
Linux2.6デバイスドライバは、デバイスモデルに基づいて構築されています。したがって、それがusbデバイス、pciデバイスなどであるかどうかにかかわらず、linuxでデバイスドライバを記述します。デバイスモデルを理解する必要があります。
デバイスモデルの基本構造は、主にkobject、ksetの2つの構造です。
struct kobject {char * k_name; char name [KOBJ_NAME_LEN]; struct kref kref; struct list_headエントリ; struct kobject * parent; struct Kset * kset; struct kobj_type * ktype; struct dentry * dentry;}; struct kset {struct subsystem * subsys; struct list_headリスト; struct kobject kobj; struct kset_hotplug_ops * hotplug_ops;};

subsys構造体、subsys構造体はksetに似ています、排他的アクセスセマフォがあるので、それをリストする必要はありません、構造体もあります。
struct kobj_type {void(* release)(struct) Kobject *); struct sysfs_ops * sysfs_ops; struct属性** default_attrs;};

は、kobjectのタイプ、ksetを示すために使用されます。

kobject構造体は下図のkobject型の部分に、kset構造体はkset型の部分に示すように、kobjectはksetに追加され、主にkobject構造体の関連フィールドに対応するkset情報が記録されます。 ksetに含まれるkobjectのアドレスを指すkobjectに対応するksetを記録し、2はkobjectに対応するksetのksetポインタを記録し、3はkobjectのタイプを記録し、4はksetのすべてのkobjectの連鎖を記録します。 kobjectが現在のksetに追加されるたびに、list_add_tail()関数が呼び出され、ksetに追加されるkobjectがリストの末尾に接続されてリンクリストが形成されます。
kobjec-kset

現在のksetに参加する別のkobjectがある場合、123ステップは現在のksetに追加された最初のkobject、つまり追加されるkobjectのメンバーと同じです。現在のkset対応データを指すようにし、4がksetのリストの末尾にkobjectを追加する必要があるようにします。次の図は、kset Aに追加されたkobject bを示しています:
kobjec-kset

この方法は、現在のksetにkobjectを追加する、つまり、ksetに含まれるkobjectのメンバーを対応するksetの対応するデータを指すように設定することと同じです。現在のksetを別のksetに追加する方法、現在のksetに追加したksetと同じ方法、デバイスkset内のkobjectを指定するため、kobjectのメンバーは追加するksetの対応するデータをポイントします。次の図はksetを示していますkset AのアイコンにBが追加されます。
kobjec-kset

単純なksetとkobjectの関係図は次のとおりです。
kobjec-kset

Copyright © Windowsの知識 All Rights Reserved