「/sys/class/drm」ディレクトリ構造、具体的には「/sys/class/drm/card0-LVDS-1」ディレクトリを作成する責任者は誰ですか?
私はカーネル 2.6.38 と nVidia カードを使用しています。
答え1
DRMモジュールはSysFSのサブツリーを担当しています。そのソースコードは以下で参照できます。drivers/gpu/drm/drm_sysfs.c
。
サブディレクトリはコネクタごとにあり、形式の名前はインデックス (これについては何も知りません) に置き換えられ、card%d-%s
コネクタ名に置き換えられます。%d
%s
デバイスごとに 5 つのファイルが表示されます。
- 接続ステータス
- 有効(または無効)
- DPMSの状態
- モードリスト
- EDID
一部のデバイスでは、サブコネクタに関する追加情報も取得できます。
答え2
前回の回答が承認されてから、いくつかの進展があったため、新しい回答を作成しています。
v6.2.11の時点では、このsysfsサブツリーのソースコードは依然としてドライバー/gpu/drm/drm_sysfs.c(有効なリンク)。
DRM ドライバー自体は、ハードウェア サポートに基づいて 5 つの異なるエントリ タイプを作成する場合があります。これらは、、、、card%d
で、各カード コネクタ ですcontrolD%d
。はデバイスのマイナー番号で、カードの場合は 0 から始まり、、の場合はそれぞれ 64 ずつ増加します。コネクタにはマイナーはなく、それぞれのカードのマイナーにあります。renderD%d
accel%d
card%d-%s
%d
controlD
renderD
accel
エントリは、によってcontrolD
作成された下位互換性のシンボリックリンクです。create_compat_control_link()
ドライバー/gpu/drm/drm_drv.c元々予約されていたマイナー番号を使用しますcontrolD
。
コネクタ名の形式(%s
のcard%d-%s
)は であり%s-%d
、は %s
の名前です。struct drm_conn_prop_enum_list drm_connector_enum_list[]
ドライバー/gpu/drm/drm_connector.cコネクタのインデックス番号は%d
1 から始まります (カードには同じタイプのコネクタが複数ある場合がある)。
最後に、どのドライバーもここで独自のデバイスを登録することができますdrm_class_device_register()
。ドライバー/gpu/drm/drm_sysfs.c。