内核和参考
内容
考虑几个问题:
- 在使用modetest时,-a参数代表atomic,这个是什么?
- 在学习 DRM应用程序进阶Property-何小龙 的模块时, 提到的Atomic原子操作是什么?
- 前边DRM和GEM学习时,未涉及到显示模块的几要素(framebuffer,plane,crtc,encoder,connector),这个又是怎么用的?
- kms中的property又是啥?提到的helper又是什么?
- kms中的各个层在驱动是如何表示的?
学习KMS只要要先明白这几个问题, 需要先熟悉下 何小龙 翻译的: Atomic mode setting design overview,
这个是学习后边章节的基础部分,需要先了解了 修改原因, 设计框架, 才会知道 为什么要这样做;
参考
- Atomic mode setting design overview, part 1 和 2 翻译版本 // 必须先看这两部分
- 何小龙-DRM 驱动程序开发(VKMS) 和 DRM应用程序进阶Property、atomic-crtc、atomic-plane
什么是Atomic
在学习 DRM应用程序进阶Property-何小龙 时, 我们可以看到,现在使用的都是 Atomic 原子操作接口 来对DPU的 显示模块5要素(framebuffer,plane,crtc,encoder,connector)进行初始化和配置的。
为什么叫“Atomic Commit”?
本次commit操作,要么成功,要么保持原来的状态不变。 即如果中途操作失败了,那些已经生效的配置需要恢复成之前的状态,就像没发生过commit操作似的,这就是Atomic的含义。
Atomic的优点
减少上层应用接口的维护工作量。当开发者有新的功能需要添加时,无需增加新的函数名和IOCTL,只需在底层驱动中新增一个property,然后在自己的应用程序中获取/操作该property的值即可。 增强了参数设置的灵活性。一次IOCTL可以同时设置多个property,减少了user space与kernel space切换的次数,同时最大限度的满足了不同硬件对于参数设置的要求,提高了软件效率。 维护属性的原子操作配置。一次操作 要么成功, 要么失败。 符合 wayload 的 每一帧都是完美的(every frame is perfect)口号。