誰負責創建“/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。