¿Quién es responsable de crear la estructura de directorios "/sys/class/drm", más específicamente el directorio "/sys/class/drm/card0-LVDS-1"?
Estoy usando kernel-2.6.38 y una tarjeta nVidia.
Respuesta1
El módulo DRM es responsable de ese subárbol en SysFS. Puedes buscar el código fuente para eso endrivers/gpu/drm/drm_sysfs.c
.
Los subdirectorios son por conector, con un nombre del formulario card%d-%s
reemplazado %d
por un índice (del que no sé nada) y %s
reemplazado con el nombre del conector.
Deberían aparecer cinco archivos por dispositivo:
- Estado de conexión
- Habilitado (o no)
- Estado del DPMS
- Lista de modos
- edid
Para algunos dispositivos, también obtendrá información adicional sobre los subconectores.
Respuesta2
Ha habido algún desarrollo desde la última respuesta aceptada, por lo que estoy creando una nueva respuesta.
A partir de v6.2.11, el código fuente responsable de este subárbol sysfs sigue siendocontroladores/gpu/drm/drm_sysfs.c(enlace de trabajo).
El propio controlador DRM puede crear 5 tipos de entradas diferentes, según la compatibilidad del hardware. Son: card%d
, controlD%d
, renderD%d
, accel%d
, luego para cada conector de tarjeta card%d-%s
. Son %d
números menores del dispositivo, que deben comenzar en 0 para las tarjetas y luego en incrementos coincidentes de 64 para controlD
y renderD
respectivamente accel
. No hay menores para los conectores, están en el menor de su respectiva tarjeta.
Las controlD
entradas son enlaces simbólicos de compatibilidad con versiones anteriores creados por create_compat_control_link()
encontroladores/gpu/drm/drm_drv.cy utilice el número menor originalmente reservado para controlD
.
El formato del nombre del conector ( %s
in card%d-%s
) es %s-%d
, %s
de donde es un nombre struct drm_conn_prop_enum_list drm_connector_enum_list[]
en controladores/gpu/drm/drm_connector.cy %d
es un número de índice de conector que comienza en 1 (ya que una tarjeta puede tener más de un conector del mismo tipo).
Finalmente, cualquier conductor puede registrar sus propios dispositivos aquí usando drm_class_device_register()
encontroladores/gpu/drm/drm_sysfs.c.