谁负责创建“/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
每个设备应显示五个文件:
- 连接状态
- 启用(或不启用)
- DPMS状态
- 模式列表
- EDID
对于某些设备,您还将获得子连接器的额外信息。
答案2
自上次接受的答案以来已经有了一些发展,因此我正在创建一个新的答案。
从 v6.2.11 开始,负责此 sysfs 子树的源代码仍然是驱动程序/gpu/drm/drm_sysfs.c(工作链接)。
DRM 驱动程序本身可以根据硬件支持创建 5 种不同的条目类型。它们是:card%d
、controlD%d
、renderD%d
、accel%d
、 然后针对每个卡连接器card%d-%s
。它们%d
是设备次要编号,卡的次要编号应从 0 开始,然后分别与controlD
、renderD
和匹配,以 64 为增量accel
。连接器没有次要参数,它们位于各自卡的次要参数上。
这些条目是由incontrolD
创建的向后兼容符号链接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()
最后,任何驱动程序都可以使用in在这里注册自己的设备驱动程序/gpu/drm/drm_sysfs.c。