Кто отвечает за создание структуры каталогов «/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
заменяется на имя коннектора.
Должно отобразиться пять файлов на каждом устройстве:
- Статус соединения
- Включено (или нет)
- Состояние DPMS
- Список режимов
- EDID
Для некоторых устройств вы также получите дополнительную информацию о дополнительных разъемах.
решение2
С момента последнего принятого ответа произошли некоторые изменения, поэтому я создаю новый ответ.
Начиная с версии 6.2.11 исходный код, отвечающий за это поддерево sysfs, по-прежнемудрайверы/gpu/drm/drm_sysfs.c(рабочая ссылка).
Драйвер DRM сам по себе может создавать 5 различных типов записей, в зависимости от аппаратной поддержки. Это: card%d
, controlD%d
, renderD%d
, accel%d
, затем для каждого разъема карты card%d-%s
. %d
Это второстепенные номера устройств, которые должны начинаться с 0 для карт, затем с соответствующим шагом 64 для controlD
, renderD
и accel
соответственно. Для разъемов нет второстепенных номеров, они находятся на второстепенных номерах соответствующих карт.
Записи controlD
представляют собой символические ссылки обратной совместимости, созданные create_compat_control_link()
вдрайверы/gpu/drm/drm_drv.cи использовать изначально зарезервированный младший номер для controlD
.
Формат имени соединителя (in %s
) card%d-%s
— %s-%d
, где %s
— имя из struct drm_conn_prop_enum_list drm_connector_enum_list[]
in драйверы/gpu/drm/drm_connector.cи %d
представляет собой индексный номер разъема, начинающийся с 1 (поскольку на плате может быть несколько разъемов одного типа).
Наконец, любой водитель может зарегистрировать здесь свои собственные устройства, drm_class_device_register()
используядрайверы/gpu/drm/drm_sysfs.c.