编辑
2025-03-03
工作知识
0
请注意,本文编写于 95 天前,最后修改于 67 天前,其中某些信息可能已经过时。

目录

一:内核配置
二:设备树配置
三:驱动简析
三:框图
四:效果
五:结果

有客户需要在不接任何显示器的前提下能够正常启动图形服务器。但是linux drm框架下,drm是建立在connector上。所以需要内核打开虚拟显示屏,这样能够将图形启动在虚拟显示器上,下面介绍主要操作方法

一:内核配置

配置文件打开

CONFIG_ROCKCHIP_VCONN=y

这个配置依赖于

HAS_IOMEN[=y]

DRM_ROCKCHIP[=y]

一般都是打开的

二:设备树配置

virtual_con { compatible = "rockchip,virtual-connector"; };

三:驱动简析

static int rockchip_virtual_connector_probe(struct platform_device *pdev) { return component_add(&pdev->dev, &rockchip_virtual_connector_ops); }

因为rk的drm驱动走的component框架,这里只需要为其添加组件即可

static const struct component_ops rockchip_virtual_connector_ops = { .bind = rockchip_virtual_connector_bind, .unbind = rockchip_virtual_connector_unbind, };

drm驱动会逐个绑定drm的connector,然后根据具体的connector紧张逐个绑定encoder

rockchip_virtual_connector_register(vconn); list_for_each_entry_safe(vconn_dev, n, &vconn->list_head, list) { drm_simple_encoder_init(vconn->drm_dev, encoder, vconn_dev→encoder_type); drm_connector_init(vconn->drm_dev, connector, &rockchip_virtual_connector_funcs, vconn_dev→output_type); drm_connector_attach_encoder(connector, encoder);

在绑定的时候会注册connector,然后根据之前创建的设备逐个绑定connector和decoder

三:框图

image.png

四:效果

root@kylin:~# xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 16384 x 16384 Virtual-1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1024x768 60.00*+ 4096x2160 60.00 59.94 2560x1600 59.99 59.97 1920x1440 60.00 1856x1392 60.00 1792x1344 60.00 2048x1152 60.00 1920x1200 59.88 59.95 1920x1080 60.00 1600x1200 60.00 1680x1050 59.95 59.88 1400x1050 59.98 59.95 1600x900 60.00 1280x1024 60.02 1440x900 59.89 59.90 1280x960 60.00 1366x768 59.79 60.00 1360x768 60.02 1280x800 59.81 59.91 1280x768 59.87 59.99 1280x720 60.00 800x600 60.32 56.25 848x480 60.00 640x480 59.94

五:结果

至此,即使机器没有任何的实际connector,也可以虚拟一个假的connector,也就是虚拟显示屏来执行图形APP的运行