什么是KMS —— 内核模式设置
DRM 管得宽,内部是分工的。KMS 全称是 Kernel Mode Setting(内核模式设置),它就是 DRM 里面专门负责“把画面送上屏幕”的那个大总管。
在 KMS 出现之前,设置屏幕分辨率、色彩深度这些活儿,都是在用户态运行的程序(比如早期的 X Server)在干。这就导致开机的时候,从内核启动的企鹅 Logo 切换到图形桌面时,屏幕经常会闪烁、花屏或者黑一下;而且如果用户态的显示程序崩了,显卡硬件就卡死在那里,连个错误终端都切不出来。后来大家觉得这太坑了,就把这部分“硬件模式设置”的权力直接收编进了内核里,这就是 KMS。
要理解 KMS 怎么干活,看这张经典的内核层流水线图最直接:

KMS 把复杂的显示硬件抽象成了几个核心组件,你在屏幕上看到的每一帧画面,都是顺着这条管线流出来的:
- Plane(图层) 这玩意儿相当于硬件级别的图层。比如你在跑系统 UI 的同时,底下还放着个视频。KMS 可以分配两个不同的 Plane,一个放 UI 界面的显存(Framebuffer),一个直接接视频解码出来的数据。这两个图层在底层硬件直接叠加混合,完全不需要消耗 CPU 去算透明度。
- CRTC(CRT 控制器) 虽然名字里带着古老的 CRT(大头显示器),但现在它代表的是显示控制器(像在咱们平时搞的 Rockchip 芯片里,它对应的物理硬件叫 VOP,Video Output Processor)。CRTC 是这条流水线的大脑,负责把 Plane 里的像素数据读出来,按照设定的分辨率和刷新率(时序)往后发。
- Encoder(编码器) CRTC 吐出来的是芯片内部原始的数字像素数据,外面的屏幕接口可不认识。Encoder 的任务就是做翻译。比如你要接 HDMI 屏幕,Encoder 就把数据转成 TMDS 信号;要是接板子上的 MIPI 屏幕,就转成 DSI 信号。
- Connector(连接器) 这就是最后那道物理关卡,代表了板子上的接口(比如 HDMI 母座、eDP 排线座)。它不仅负责往外传画面,还负责通过 I2C 针脚去读外接显示器的 EDID 数据,这样 KMS 就能知道你插上的屏幕到底支持 1080P 还是 4K。
留下评论