当前位置:首页 > 公众号精选 > 嵌入式云IOT技术圈
[导读]关注、星标嵌入式云IOT技术圈,精彩及时送达来源 |  Linux与SoClinux平台普遍采用的DRM软件架构中,不仅包含了内核空间驱动层的代码,而且提供应用层的支撑库libdrm。libdrm基于DRI协议通过ioctl与2D图显驱动进行交互,配置图显处理器以及HDMI、MI...

关注、星标嵌入式云IOT技术圈,精彩及时送达

来源 |  Linux与SoC

linux平台普遍采用的DRM软件架构中,不仅包含了内核空间驱动层的代码,而且提供应用层的支撑库libdrm。libdrm基于DRI协议通过ioctl与2D图显驱动进行交互,配置图显处理器以及HDMI、MIPI、LVDS等编解码单元。

from rockchip

验证SoC的图显处理器及其他编解码模块时,可以基于libdrm modetest所提供的功能来丰富我们的verify条目。如单帧、多帧、旋转、缩放、裁剪等等。
modetest功能及流程

1
解析命令行参数

通过库函数getopt()处理modetest的命令行参数(图片可放大查看)

支持的命令行参数主要包括三类:
1) 查询类2) 测试类3) 通用选项

与解析命令函参数有关的三个API:1static int parse_connector(struct pipe_arg *pipe, const char *arg)
2static int parse_plane(struct plane_arg *plane, const char *p)
3static int parse_property(struct property_arg *p, const char *arg)
4static void parse_fill_patterns(char *arg)

打开DRM设备

打开DRM设备的流程如下:


modetest只能打开static const char * const modules[]内定义的DRM驱动,默认支持的DRM驱动包括:

1static const char * const modules[] = {
2    "i915",
3    "amdgpu",
4    "radeon",
5    "nouveau",
6    "vmwgfx",
7    "omapdrm",
8    "exynos",
9    "tilcdc",
10    "msm",
11    "sti",
12    "tegra",
13    "imx-drm",
14    "rockchip",
15    "atmel-hlcdc",
16    "fsl-dcu-drm",
17    "vc4",
18    "virtio_gpu",
19    "mediatek",
20    "meson",
21    "pl111",
22    "stm",
23    "sun4i-drm",
24    "armada-drm",
25};
当我们自己的图显驱动需要使用modetest进行验证的时候,需要在这里增加驱动名字。DRM驱动的名字定义在kernel driver的drm_driver数据结构中。 1struct drm_driver {
2...
3    /** @major: driver major number */
4    int major;
5    /** @minor: driver minor number */
6    int minor;
7    /** @patchlevel: driver patch level */
8    int patchlevel;
9    /** @name: driver name */
10    char *name;
11    /** @desc: driver description */
12    char *desc;
13    /** @date: driver date */
14    char *date;
15...
16};
在打开设备的过程中,若通过-M参数指定了DRM驱动名,那么打开特定驱动;若未指定DRM驱动名,那么遍历modules[]中指定的DRM驱动。另外,若没有指定-D参数(没有指定设备名),默认按照DRM驱动名打开DRM设备。这里面的-D参数是/dev/drixxx编号。例如-D 0,指定打开0号DRM设备。若指定了-D参数,那么首先按照-D指定设备编号来打开DRM设备。

获取设备资源

1static struct resources *get_resources(struct device *dev)
2
{
3
4    drmModeGetCrtc();
5    drmModeGetEncoder();
6    drmModeGetConnector ();
7    drmModeGetFB();
8    drmModeGetPlane();
9
10    drmModeObjectGetProperties(,,CRTC);
11drmModeObjectGetProperties(,,CONNECTOR);
12
13}
14
15dump_resource(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭