显卡驱动开发DRM⼊门--Apple的学习笔记
由于之前的blog提及kmscube的源码我没有找到,所以只能在⽹上搜索了。
DRM简介
DRM是Linux⽬前主流的图形显⽰框架,同时DRM可以统⼀管理GPU和Display驱动,使得软件架构更为统⼀,⽅便管理和维护。⽽且drm是集成在linux kernel中的。
上海高考状元DRM从模块上划分,可以简单分为3部分:libdrm、KMS、GEM。
1. libdrm:对底层接⼝进⾏封装,向上层提供通⽤的API接⼝,主要是对各种IOCTL接⼝进⾏封装。
2)KMS:Kernel Mode Setting,主要作⽤是更新画⾯和设置显⽰参数
3)GEM:Graphic Execution Manager,主要负责显⽰buffer的分配和释放
然后我⾃⼰运⾏出错的代码是返回设置参数不正确。mode参数⽐如我设置1440x900,然后还有⽔平同步和垂直同步等信息。它从connector需要⼀路进⾏绑定。
张用良不杀蜂
蚂蚁酒
绑定关系.png
调试问题
车的图片大全调试的时候出现过的权限问题。我下载的drm how-to⼯程在ubuntu本机验证通过,但是开发板运⾏就报错,ccs9调试发现drmModeSetCrtc 返回参数⽆效。video初始化都是会建⽴设备/dev/dri/card0。之前调试运⾏在linux本机card0被x11等占⽤着资源,所以也会返回⽆权限。所以ubuntu下我本机调试的时候是使⽤ctrl+alt+F3切换到tty界⾯,然后通过ctrl+alt+F2再切换回图形界⾯。
connector的TDMS
纯洁的反义词drmModeSetCrtc⾥到底做了什么,但是当我还没有下载到libdrm的源码,我只能⾃⼰分析传⼊参数。学习了下HDMI接⼝TDMS协议。
显⽰屏的显⽰原理:
当CRT显⽰器显⽰⼀幅图像时,电⼦枪是从左到右、从上到下来扫描屏幕的。由电⼦枪打出的电⼦经由偏转线圈的偏转得以打到屏幕的不同点上。电⼦束在从左到右扫描完⼀⾏后,需要回到起始⽅向进⾏下⼀⾏的扫描,这个返回的⼯作由回程转换器来完成。
一颗爱你的心
蔺相如读音专业名词
⽔平同步:同步⼀⾏,然后进⾏下⼀⾏
垂直同步:同步⼀帧。
60Hz刷新率就是指,每秒显⽰60帧(图像)
假设分辨率为800*600,则每秒有60次垂直同步。⽽每次垂直同步包括了600次⽔平同步。
另外传输的数据包括图像数据(8bit调制为10bit每通道进⾏传输),控制信号(⽤来说明下⼀次传输哪类信号),⾳频数据(4bit)。通道包括rgb共3通道,最后加⼀通道为clock。
HDMI TDMS.png
我此时怀疑是否ioctrl后底层驱动配置不⽀持。然后⼜看了下硬件原理⽤的是TDA19988的解码芯⽚说只⽀持到1280的解码,那么1440x900之前为什么也能⽀持?关于TDA在上图中是什么位置有点搞不明⽩,之后再研究下。然后总是显⽰tilcdc初始化成功,tilcdc到底是个什么东西。重要兜了个圈⼦⼜回到了TI官⽹,LCDC是LCD controller的缩写,ti就是TI,说⽩了tilcdc就是am335的⼀个lcd模块。就
和我现在⼀直做的can模块⼀样。
感恩父母的句子LCDC模块