K230 DRM使用指南
1. DRM简介
DRM是linux内核中负责与显卡交互的管理架构,用户程序可以很方便的利用DRM提供的API,实现显示控制、3D渲染、视频编解码、GPU计算等工作
1.1 DRM架构特点
DRM是当前Linux内核中主流的图形显示框架,相比于传统的FB架构,具有如下特点:
- DRM架构原生支持多图层合成,FB架构原生不支持多图层合成
- DRM架构原生支持VSYNC、DMA_BUF、Fence机制
- DRM架构统一管理渲染和显示驱动,让软件开发和维护更简单
1.2 DRM架构组成
从整体架构来说,DRM主要分成三个部分:
-
libdrm
libdrm会对底层接口进行封装,向用户态提供通用的API接口
libdrm内部还提供modetest程序,用于查询DRM设备的详细信息,同时还可以进行基本的显示测试
-
KMS
KMS表示内核模式设置,主要设置显示分辨率、颜色空间、刷新率以及显示buffer切换和多图层合成
-
GEM
显存管理,负责显存分配和释放
2. modetest使用说明
modetest是由libdrm提供的测试程序,可以查询DRM设备的详细信息,同时还可以进行基本的显示测试
2.1 查询K230 DRM详细信息
具体指令如下所示:
[root@canaan ~ ]#modetest -M canaan-drm
Encoders:
id crtc type possible crtcs possible clones
37 36 DSI 0x00000001 0x00000001
Connectors:
id encoder status name size (mm) modes encoders
38 37 connected DSI-1 68x120 1 37
modes:
index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
#0 1080x1920 30.00 1080 1310 1330 1350 1920 1925 1931 1939 78529 flags: ; type: preferred, driver
props:
1 EDID:
flags: immutable blob
blobs:
value:
2 DPMS:
flags: enum
enums: On=0 Standby=1 Suspend=2 Off=3
value: 0
5 link-status:
flags: enum
enums: Good=0 Bad=1
value: 0
6 non-desktop:
flags: immutable range
values: 0 1
value: 0
4 TILE:
flags: immutable blob
blobs:
value:
CRTCs:
id fb pos size
36 0 (0,0) (1080x1920)
#0 1080x1920 30.00 1080 1310 1330 1350 1920 1925 1931 1939 78529 flags: ; type: preferred, driver
props:
24 VRR_ENABLED:
flags: range
values: 0 1
value: 0
28 GAMMA_LUT:
flags: blob
blobs:
value:
29 GAMMA_LUT_SIZE:
flags: immutable range
values: 0 4294967295
value: 256
Planes:
id crtc fb CRTC x,y x,y gamma size possible crtcs
31 0 0 0,0 0,0 0 0x00000001
formats: NV12 NV21 NV16 NV61
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 0
32 0 0 0,0 0,0 0 0x00000001
formats: AR24 AR12 AR15 RG24 RG16
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 1
33 0 0 0,0 0,0 0 0x00000001
formats: AR24 AR12 AR15 RG24 RG16
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 2
34 0 0 0,0 0,0 0 0x00000001
formats: AR24 AR12 AR15 RG24 RG16
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 0
35 0 0 0,0 0,0 0 0x00000001
formats: AR24 AR12 AR15 RG24 RG16
props:
8 type:
flags: immutable enum
enums: Overlay=0 Primary=1 Cursor=2
value: 0
Frame buffers:
id size pitch
[root@canaan ~ ]#
上述信息即K230 DRM详细信息,以下是简要说明:
模块ID | 模块名称 | 模块说明 |
---|---|---|
37 | Encoder | 无 |
38 | Connector | 无 |
36 | CRTC | 分辨率支持:1080x1920 |
31 | video图层 | 颜色空间支持:NV12、NV21、NV16、NV61 |
32 | OSD图层 | 颜色空间支持:AR24、AR12、AR15、RG24、RG16 |
33 | OSD图层 | 颜色空间支持:AR24、AR12、AR15、RG24、RG16 |
34 | OSD图层 | 颜色空间支持:AR24、AR12、AR15、RG24、RG16 |
35 | OSD图层 | 颜色空间支持:AR24、AR12、AR15、RG24、RG16 |
AR24表示ARGB8888
AR12表示ARGB4444
AR15表示ARGB1555
RG24表示RGB888
RG16表示RGB565
2.2 video图层输出smpte彩条,颜色空间为NV12
具体指令如下所示:
modetest -M canaan-drm -D 0 -a -s 38@36:1080x1920-30 -P 31@36:1080x1920@NV12 -v -F smpte
下图所示为LCD显示内容:
2.3 OSD图层输出tiles彩条,颜色空间为AR24,即ARGB8888
具体指令如下
modetest -M canaan-drm -D 0 -a -s 38@36:1080x1920-30 -P 32@36:1080x1920@AR24 -v -F tiles
下图所示为LCD显示内容: