Wer ist für die Erstellung der Verzeichnisstruktur „/sys/class/drm“ verantwortlich, genauer gesagt für das Verzeichnis „/sys/class/drm/card0-LVDS-1“?
Ich verwende Kernel 2.6.38 und eine nVidia-Karte.
Antwort1
Das DRM-Modul ist für diesen Teilbaum in SysFS verantwortlich. Sie können den Quellcode dafür indrivers/gpu/drm/drm_sysfs.c
.
Die Unterverzeichnisse sind pro Konnektor, wobei ein Name des Formulars card%d-%s
durch %d
einen Index (über den ich nichts weiß) und %s
durch den Konnektornamen ersetzt wird.
Es sollten fünf Dateien pro Gerät angezeigt werden:
- Verbindungsstatus
- Aktiviert (oder nicht)
- DPMS-Zustand
- Modusliste
- EDID
Bei manchen Geräten erhalten Sie auch zusätzliche Informationen zu den Unteranschlüssen.
Antwort2
Seit der letzten akzeptierten Antwort hat es einige Entwicklungen gegeben, daher erstelle ich eine neue Antwort.
Ab v6.2.11 ist der für diesen Sysfs-Teilbaum verantwortliche Quellcode immer nochTreiber/GPU/DRM/DRM_sysfs.c(funktionierender Link).
Der DRM-Treiber selbst kann je nach Hardwareunterstützung 5 verschiedene Eintragstypen erstellen. Diese lauten: card%d
, controlD%d
, renderD%d
, accel%d
, und dann für jeden Kartenanschluss card%d-%s
. Dies %d
sind Geräte-Minor-Nummern, die für die Karten bei 0 beginnen und dann in entsprechenden 64er-Schritten für controlD
, renderD
bzw. accel
. Für die Anschlüsse gibt es keine Minor-Nummern, sie befinden sich auf der Minor-Nummer der jeweiligen Karte.
Die controlD
Einträge sind abwärtskompatible Symlinks, die von create_compat_control_link()
in erstellt wurdenTreiber/GPU/DRM/DRM_DRV.cund verwenden Sie die ursprünglich reservierte Nebennummer für controlD
.
Das Format des Connector-Namens (das %s
in card%d-%s
) ist %s-%d
, wobei %s
ein Name aus struct drm_conn_prop_enum_list drm_connector_enum_list[]
in istTreiber/GPU/DRM/DRM_Connector.cund %d
ist eine Anschlussindexnummer, die bei 1 beginnt (da eine Karte mehr als einen Anschluss desselben Typs haben kann).
Schließlich kann jeder Fahrer seine eigenen Geräte hier registrieren, indem drm_class_device_register()
erTreiber/GPU/DRM/DRM_sysfs.c.