Quem é responsável por criar a estrutura de diretórios "/sys/class/drm", mais especificamente o diretório "/sys/class/drm/card0-LVDS-1"?
Estou usando o kernel-2.6.38 e uma placa nVidia.
Responder1
O módulo DRM é responsável por essa subárvore no SysFS. Você pode navegar pelo código-fonte para isso emdrivers/gpu/drm/drm_sysfs.c
.
Os subdiretórios são por conector, com um nome no formato card%d-%s
substituído %d
por um índice (sobre o qual não sei nada) e %s
substituído pelo nome do conector.
Cinco arquivos por dispositivo devem aparecer:
- Status da conexão
- Habilitado (ou não)
- Estado do DPMS
- Lista de modos
- EDI
Para alguns dispositivos, você também obterá informações extras sobre subconectores.
Responder2
Houve algum desenvolvimento desde a última resposta aceita, por isso estou criando uma nova resposta.
A partir da v6.2.11, o código-fonte responsável por esta subárvore sysfs ainda édrivers/gpu/drm/drm_sysfs.c(link de trabalho).
O próprio driver DRM pode criar 5 tipos de entrada diferentes, com base no suporte de hardware. São eles: card%d
, controlD%d
, renderD%d
, accel%d
, então para cada conector de placa card%d-%s
. São %d
números secundários de dispositivos, que devem começar em 0 para os cartões e, em seguida, corresponder a 64 incrementos para e controlD
, respectivamente. Não há menores para os conectores, eles estão nos menores de suas respectivas placas.renderD
accel
As controlD
entradas são links simbólicos de compatibilidade com versões anteriores criados por create_compat_control_link()
emdrivers/gpu/drm/drm_drv.ce use o número menor originalmente reservado para controlD
.
O formato do nome do conector ( %s
in card%d-%s
) é %s-%d
, onde %s
é um nome de struct drm_conn_prop_enum_list drm_connector_enum_list[]
in drivers/gpu/drm/drm_connector.ce %d
é um número de índice do conector começando em 1 (já que uma placa pode ter mais de um conector do mesmo tipo).
Finalmente, qualquer driver pode registrar seus próprios dispositivos aqui drm_class_device_register()
usandodrivers/gpu/drm/drm_sysfs.c.