由于之前的blog提及kmscube的源码我没有找到,所以只能在网上搜索了。

DRM简介

DRM是Linux目前主流的图形显示框架,同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统一,方便管理和维护。而且drm是集成在linux kernel中的。

DRM从模块上划分,可以简单分为3部分:libdrm、KMS、GEM。

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模块

终于进入正题,我之前除了看graph章节,我还应该要看TI官网的LCDC章节。这里面就写drm及kmscube还有testmode的源码路径。并且还告知dts在有LCD的情况下应该如何配置,看了教程后觉得我的底层驱动当前是正常的,因为运行kmscube能正常显示3D图像。

http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components/Kernel/Kernel_Drivers/Display/LCDC.html

开发linux显卡驱动,显卡驱动开发DRM入门--Apple的学习笔记相关推荐

  1. STM32MP157驱动开发——Linux RS232/485/GPS 驱动

    STM32MP157驱动开发--Linux RS232/485/GPS 驱动 一.简介 二.STM32MP1 UART 驱动分析 1.UART 的 platform 驱动框架 2.uart_drive ...

  2. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  3. linux的can通信busoff,socketCAN内核源码分析是否支持busoff自恢复--Apple的学习笔记

    大总结:诊断小系统搭建步骤总结--Apple的学习笔记的剩余问题2中,我说过要深入下socketCAN内核源码学习.因为这个小项目关于驱动开发太顺利了,导致学习不到什么东东.最主要我一开始走了捷径,看 ...

  4. linux 应用层gpio中断_linux下GPIO中断驱动US100传感器--Apple的学习笔记

    一,前言 资源就的利用起来.linux下串口raw驱动(US100超声波)--Apple的学习笔记已经用US100玩了串口,US100还可以用GPIO和中断来玩.原理就是triq发送大于10us的高电 ...

  5. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...

    <嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...

  6. slua 是c语言开发的吗,初学者必备文档:LUA新手快速学习笔记

    LUA程序设计语言 是一个简洁.轻量.可扩展的脚本语言.LUA读作/'lua/(噜啊),是葡萄牙语中"Luna"(月亮)的意思. LUA的目标是成为一个很容易嵌入其它语言中使用的语 ...

  7. 鸟哥的Linux私房菜(基础版)第五章学习笔记

    第五章 启动关机.在线求助与执行命令的方式 学习笔记 首次登入FC图形界面 KDE的简单操作 切换X Window与命令行模式 用命令行登入Linux 在命令行模式执行命令 基础命令操作 重要的热键 ...

  8. 黑马程序员新版Linux零基础快速入门到精通——学习笔记

    01初识Linux 1.1.操作系统概述 1.1.1.硬件和软件 我们所熟知的计算机是由硬件和软件组成的. 硬件: 计算机系统中由电子.机械和光电元件等组成的各种物理装置的总称. ​ (看的见.摸得着 ...

  9. Linux环境下,网络编程基础概念(仅学习笔记)

    网络编程 进程间通讯IPC各种手段,都是在同一台机器上. 不同计算机通过网络链接上进程相互通讯的机制:网络进程间通讯 network IPC 1)Internet的历史 Internet-" ...

最新文章

  1. Windows Server AppFabric Caching
  2. python有什么作用-大数据学习之python语言有什么作用?
  3. Kotlin 在kotlin内使用Java的一些注意(长篇)
  4. c语言中return的作用_C语言入门基础整理
  5. 论文浅尝 | 使用预训练深度模型和迁移学习方法的端到端模糊实体匹配
  6. 最好的git教程_最好的Git教程
  7. php 文件列表 浏览,简易文件目录浏览器PHP代码
  8. 零售业有效利用物联网的几种方法
  9. 基于matlab的光伏电池通用数学模型,基于MATLAB的光伏电池通用数学模型.doc
  10. 【Docker】使用介绍
  11. ThinkPad T410 拆机(高清)
  12. 【区块链2.0实战学习笔记】————11、搭建以太坊私有链
  13. 高效的睡眠——睡眠革命
  14. 50位中外AI领袖论剑AI World,世界人工智能大会10大亮点全回顾
  15. python计算复数的辐角_Python机器学习(五十六)SciPy fftpack(傅里叶变换)
  16. 知识图谱学习(一)(笔记整理)
  17. Python调用pywin32模拟触屏滑动 刷宝视频,自动刷视频python
  18. C++开源游戏推荐,reshade游戏画质增强工具
  19. 纯Java搭建SS开发环境
  20. 【性能优化】PHP - 优化手段 - 学习/实践

热门文章

  1. C语言对strtok(),与strdup()介绍
  2. python中%r和%s的区别
  3. Python排序函数用法
  4. linux 把mysql大小写关闭_linux中设置mysql大小写不去区分方法
  5. 数据库本地的sa有个叉号_搞定sql数据库出错,做自己的大神!
  6. signal c语言,C 库函数
  7. python distutils模块(貌似是用来打包发布自定义python包的)
  8. yunyang1994 tensorflow_yolov3 对于检测中心点的边缘物体时评估IOU对召回率和精度的影响
  9. linux——vim命令详细说明
  10. Java中的与、或、非以及异或( | ~ ^)运算符的运算原理