"/sys/class/drm"ディレクトリ構造、特に "/sys/class/drm/card0-LVDS-1"ディレクトリの作成は誰が担当しますか?
私はkernel-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
用renderD%d
です。これはデバイスのマイナー番号です。カードのマイナー番号は0から始まり、それぞれ64ずつ増加し、およびと一致する必要があります。コネクタには補助パラメータがなく、そのカードの補助パラメータにあります。accel%d
card%d-%s
%d
controlD
renderD
accel
これらの項目は、以下でcontrolD
生成された以前のバージョンと互換性のあるシンボリックリンクです。create_compat_control_link()
ドライバ/gpu/drm/drm_drv.cそして最初に予約されたマイナー番号を使用してくださいcontrolD
。
%s
コネクタ名は(in card%d-%s
)形式です。ここで名前は%s-%d
in からです。 %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。