自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hexiaolong2009的专栏

email: 343005384@qq.com

原创 DRM(Direct Rendering Manager)学习简介

DRM(Direct Rendering Manager)学习简介 学习DRM一年多了,由于该架构较为复杂,代码量较多,且国内参考文献较少,初学者学习起来较为困难。因此决定将自己学习的经验总结分享给大家,希望对正在学习DRM的同学有所帮助,同时交流经验。 由于本人工作中只负责Display驱动...

2018-11-10 19:41:56

阅读数 6797

评论数 14

翻译 Render Hell —— 史上最通俗易懂的GPU入门教程(五)

Render Hell – Book V 避免使用小网格 检查是否真的有必要使用小网格,或者是否可以将多个小网格组合成一个大网格。如果你有小网格,可以和 Graphic 工程师聊一聊,获取关于多边形个数“最佳点”(sweet spot,即低于该三角形个数的网格将无法得到更快的渲染速度)的信息。所...

2020-02-08 00:36:10

阅读数 95

评论数 0

翻译 Render Hell —— 史上最通俗易懂的GPU入门教程(四)

Render Hell – Book IV 首先,在填充命令缓冲区之前,你可以对所有的命令进行排序(例如按 Render State 进行排序),这样就可以大大减少那些不必要的 Change State 命令,因为在切换状态之前,你已经遍历了所有使用相同 Render State 的网格。

2020-02-08 00:35:29

阅读数 57

评论数 0

翻译 Render Hell —— 史上最通俗易懂的GPU入门教程(三)

Render Hell – Book III 欢迎来到第三篇!这里我们将检查一些在渲染过程中可能出现的问题。但首先,我们来点小练习: 知道一个问题是有好处的,而真正去感受一个问题则更有助于理解。所以让我们试着感觉自己像个 CPU / GPU 吧。

2020-02-08 00:34:42

阅读数 44

评论数 0

翻译 Render Hell —— 史上最通俗易懂的GPU入门教程(二)

Render Hell – Book II Pipeline 详解 关于本篇文章,我收到的大多数积极反馈是:非常漂亮的演示说明,但是你的 Pipeline 已经是6年前的了!最初我一直不明白这句话是什么意思,直到 Christoph Kubisch 加入到我的 Render Hell 创作中来,我...

2020-02-08 00:33:57

阅读数 135

评论数 0

翻译 Render Hell —— 史上最通俗易懂的GPU入门教程(一)

Render Hell – Book I 如今对美术师的要求越来越高,因为在计算机眼里,他们提供的资源(asset)不过是一堆 **顶点** 和 **纹理** 数据的集合而已。而将这些数据转换为最终的图像,则主要是通过计算机中的 CPU 和 GPU 来完成的。

2020-02-08 00:32:59

阅读数 141

评论数 0

原创 dma-buf 由浅入深(八) —— ION 简化版

本篇我们将在上一篇的基础上,实现一个简化版的ION驱动,以此来实现任意 size 大小的内存分配。 如果你对 dma-buf 还不熟悉,强烈建议先阅读本系列教程的 1~6 篇,对 dma-buf 有一定理解后再回过头来阅读本文。

2020-01-12 20:09:53

阅读数 2659

评论数 0

原创 dma-buf 由浅入深(七) —— alloc page 版本

在前面的 dma-buf 系列文章中,exporter 所分配的内存都是通过 kzalloc() 来分配的。本篇我们换个方式,使用 alloc_page() 来分配内存。

2020-01-12 20:06:09

阅读数 194

评论数 0

原创 dma-buf 由浅入深(六) —— begin / end cpu_access

本篇我们将一起来学习 dma-buf 用于 Cache 同步操作的 begin_cpu_access 和 end_cpu_access 这两个接口。之所以将这两个接口放在第六篇讲解,是因为它们在内核中的使用频率并不高,只有在特殊场景下才派的上用场。

2019-11-26 00:12:46

阅读数 334

评论数 2

原创 dma-buf 由浅入深(五) —— File

在上一篇《dma-buf 由浅入深(四)—— mmap》中,曾提到过 dma_buf_fd() 这个函数,该函数用于创建一个新的 fd,并与 dma-buf 的文件关联起来。本篇我们一起来重点学习 dma-buf 与 file 相关的操作接口,以及它们的注意事项。

2019-11-26 00:12:33

阅读数 436

评论数 0

原创 dma-buf 由浅入深(四) —— mmap

前面的两篇文章《dma-buf 由浅入深(二) —— kmap/vmap》和《dma-buf 由浅入深(三) —— map attachment》都是在 kernel space 对 dma-buf 进行访问的,本篇我们将一起来学习,如何在 user space 访问 dma-buf。当然,use...

2019-11-26 00:12:20

阅读数 447

评论数 0

原创 dma-buf 由浅入深(三) —— map attachment

在上一篇《kmap/vmap》中,我们学习了如何使用 CPU 在 kernel 空间访问 dma-buf 物理内存,但如果使用CPU直接去访问 memory,那么性能会大大降低。因此,dma-buf 在内核中出现频率最高的还是它的 dma_buf_attach() 和 dma_buf_map_at...

2019-11-26 00:12:05

阅读数 397

评论数 0

原创 dma-buf 由浅入深(二) —— kmap / vmap

在上一篇《最简单的 dma-buf 驱动程序》中,我们学习了编写 dma-buf 驱动程序的三个基本步骤,即 dma_buf_ops 、 dma_buf_export_info、 dma_buf_export()。在本篇中,我们将在 exporter-dummy 驱动的基础上,对其 dma_buf...

2019-11-26 00:11:46

阅读数 402

评论数 1

原创 dma-buf 由浅入深(一) —— 最简单的 dma-buf 驱动程序

如果你和我一样,是一位从事Android多媒体底层开发的工程师,那么你对 dma-buf 这个词语一定不会陌生,因为不管是 Video、Camera 还是 Display、GPU,它们的buffer都来自于ION,而 ION 正是基于 dma-buf 实现的。 假如你对 dma-buf 的理解并...

2019-11-26 00:11:02

阅读数 704

评论数 4

原创 BufferQueue 学习总结(内附动态图)

本文仅对BufferQueue最基本的操作接口进行讲解,不包含 SurfaceFlinger、Surface 等上层封装的概念介绍。 阅读完本文后,你将了解如下内容: * 什么是BufferQueue * BufferQueue内部操作的原理是什么 * BufferQueue跨进程操作是怎么实现...

2019-08-11 23:45:13

阅读数 617

评论数 2

原创 最简单的BufferQueue测试程序(三)

本篇将以最简单的代码形式,演示如何在远程操作BufferQueue。 前面两篇文章《最简单的BufferQueue测试程序(一)》和《最简单的BufferQueue测试程序(二)》演示的都是在本地同一进程中操作BufferQueue,而实际使用过程中往往会出现Producer和Consumer位...

2019-08-11 19:56:42

阅读数 164

评论数 0

原创 最简单的BufferQueue测试程序(二)

在上一篇《最简单的BufferQueue测试程序(一)》中,我们了解了BufferQueue最基本的操作方法。除了dequeue/queue/acquire/release这些基本操作接口外,BufferQueue还为我们提供了一些特殊函数,如attach/detach/cancel等。本篇我们将...

2019-08-10 17:37:34

阅读数 162

评论数 0

原创 最简单的BufferQueue测试程序(一)

本示例代码使用BufferQueue最基本的操作接口,演示了BufferQueue操作的基本流程。 Android版本:8.1 伪代码 void main(void) { createBufferQueue(); consumerConnect() connect(); deque...

2019-08-10 11:08:52

阅读数 301

评论数 0

原创 DRM 驱动程序开发(开篇)

前言 在前面的《最简单的DRM应用程序》系列文章中,我们学习了如何使用 libdrm 接口编写 DRM 应用程序。从本篇开始,我们将进入一个全新的世界,一起来学习如何在 kernel 空间编写 DRM 驱动程序。 Objects 在开始编写 DRM 驱动程序之前,我有必要对 DRM 内部的 ...

2019-05-04 09:01:50

阅读数 4129

评论数 13

翻译 DRM (Direct Rendering Manager) 的发展历史

https://en.wikipedia.org/wiki/Direct_Rendering_Manager#History

2019-03-23 12:47:38

阅读数 1445

评论数 5

原创 DRM应用程序进阶 (atomic-plane)

前言 在上一篇《DRM应用程序进阶(atomic-crtc)》文章中,我们学习了如何通过libdrm的atomic接口实现modeseting的操作。本篇,我们将一起来学习如何通过atomic接口,来实现 drmModeSetPlane() 相同的操作。 Atomic Commit plane u...

2019-02-20 21:37:34

阅读数 2570

评论数 17

原创 DRM应用程序进阶 (atomic-crtc)

前言 在上一篇《DRM应用程序进阶(Property)》中,我们学习了Property的基本概念及作用。在本篇中,我们将一起来学习如何操作这些Property,即libdrm Atomic接口的用法。 Atomic 为什么叫“Atomic Commit”? 初学者第一次接触到DRM时,总会好奇当初...

2019-02-15 23:04:04

阅读数 2425

评论数 0

原创 DRM应用程序进阶 (Property)

前言 通过前面几篇《最简单的DRM应用程序》系列文章,我们学习了如何编写一个最基本的DRM应用程序。但是,这些程序所使用的接口,在如今的DRM架构中其实早已经被标记为 Legacy(过时的) 接口了,而目前DRM主要推荐使用的是 Atomic(原子的) 接口。Atomic接口我会在下篇文章中重点介...

2019-02-13 22:42:32

阅读数 2133

评论数 11

原创 最简单的DRM应用程序 (plane-test)

在上一篇 最简单的DRM应用程序 (page-flip)中,我们学习了drmModePageFlip()的用法。而在更早的两篇文章中,我们还学习了drmModeSetCrtc()的使用方法。但是这两个接口都只能全屏显示framebuffer的内容,如何才能在屏幕上只显示framebuffer的一部...

2018-12-10 02:26:18

阅读数 3742

评论数 38

原创 最简单的DRM应用程序 (page-flip)

在上一篇 最简单的DRM应用程序 (double-buffer)中,我们了解了DRM更新图像的一个重要接口drmModeSetCrtc()。在本篇文章中,我们将一起来学习DRM另一个重要的刷图接口:drmModePageFlip()。 drmModePageFlip()的功能也是用于更新显示内容的...

2018-12-01 15:50:20

阅读数 3724

评论数 25

原创 最简单的DRM应用程序 (double-buffer)

在上一篇 最简单的DRM应用程序 (single-buffer)中,我们学习了如何去编写一个最基本的DRM应用程序。而本篇文章,将在 modeset-single-buffer 的基础上,对其进行扩展,使用双buffer机制的案例,来加深大家对drmModeSetCrtc()函数的印象。 使用上一...

2018-11-24 19:52:35

阅读数 2707

评论数 2

原创 最简单的DRM应用程序 (single-buffer)

在学习DRM驱动之前,应该首先了解如何使用DRM驱动。以下使用伪代码的方式,简单介绍如何编写一个最简单的DRM应用程序。 伪代码: int main(int argc, char **argv) { /* open the drm device */ open(&amp...

2018-11-17 11:53:00

阅读数 5785

评论数 6

原创 LCD显示异常分析——撕裂(tear effect)

概述 在上一篇《LCD显示异常分析——开机闪现花屏》中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear effect)问题进行详细分析,以及给出这类问题的常用解决方法。 本文适用范围: 对象:LCD驱动调试人员 硬件:带GRAM的LCD (如SPI/MC...

2018-02-13 23:58:31

阅读数 4486

评论数 9

原创 LCD显示异常分析——开机闪现花屏

概述最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现。其实这类问题的原理分析并不难,只是在给别人解释的时候不太好描述,因此,我特地写了这篇文章,好让大家能够更容易、更直观的理解这类花屏问题的原因,也希...

2018-01-30 01:08:44

阅读数 6027

评论数 4

原创 STM32F429 Discovery FMC驱动原子4.3寸LCD

本人手里有块STM32F429 Discovery板子,因为某种原因需要使用8080接口的LCD,而该块开发板自带的LCD接口采用LTDC驱动,所以就在正点原子这里买了一块4.3寸电容触摸屏,驱动IC为NT35510。 为了快速搭建软件工程,本人使用STM32CubeMX工具生成代码模板,...

2015-04-25 19:36:19

阅读数 4104

评论数 0

原创 S3C2440之Camera驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 Camera驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。 最初,本人在网上下载了许多mini2440 camera驱动的代码,但结果都不尽人意,因为这些代码看起来都比较晦涩难懂...

2015-04-08 10:59:14

阅读数 743

评论数 0

原创 S3C2440之UART驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置。 该源码结...

2015-03-03 18:08:03

阅读数 854

评论数 0

原创 S3C2440之MMU驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出自己写的S3C2440 MMU代码库。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。 该源码结构简单明了,原始工程下载地址:点击打开链接

2015-03-03 17:36:41

阅读数 908

评论数 1

原创 S3C2440之LCD驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 LCD控制初始化代码。使用友善MINI2440开发板,LCD为320*240,开发环境为RealView MDK 4.22。 该源码结构简单明了,原始工程下载地址:点击打开链接

2015-03-03 15:49:12

阅读数 963

评论数 0

原创 STM32F429之LTDC驱动图解

本文基于ST官方demo板STM32F429 Discovery硬件平台,以看图说话的形式给大家讲解LTDC的主要参数配置。关于本文提到的代码部分均摘自本人另一片文章《STM32F429之LTDC代码模板》,LCD硬件为240x320,驱动IC为ili9341。本文目的意在让大家通过几张图就能掌握...

2015-03-02 00:34:21

阅读数 11839

评论数 4

原创 STM32F429之LTDC代码模板

好记心不如烂笔头,为了方便以后快速查阅代码,提高开发效率,在这里特将LTDC驱动的初始化代码贴上来。本代码是基于ST官方STM32F429 Discovery Demo板的,学习LTDC驱动时参考了Demo板的官方例程,但是总觉得官方例程写得有点繁琐,不简洁明了,于是在此基础上重新整理代码得到如下...

2015-02-28 16:47:16

阅读数 5370

评论数 0

原创 Windows Phone 8.1 驱动开发——SPB 简介

SPB是Simple Peripheral Bus的简称,直译过来就是简单外设总线,它包括I2C总线、SPI总线。SPB是在Windows 8以后才被驱动支持的,而在之前如果系统想访问I2C外围设备,则只能通过BIOS程序间接的访问,没法直接访问外设寄存器。在系统启动时,ACPI固件会根据配置表扫...

2015-01-21 23:37:07

阅读数 2144

评论数 0

原创 Windows Phone 8.1 驱动开发——如何调用ACPI Method

今天给大家讲解一下,在KMDF(Kernel-Mode Driver Framework)中是如何调用ACPI配置表中用户定义的Method。在ACPI中,凡是以下划线开头的Method(如_STA)都系统预定义的Method,它们都由Windows OS自己调用,其他用户自定义Method则由驱...

2015-01-20 00:20:51

阅读数 3263

评论数 0

原创 Windows Phone 8.1 驱动开发——注册表read/write

在做Windows Phone驱动开发时,时常需要和注册表打交道,因此,作为手机驱动开发人员,有必要了解一下注册表相关的知识。本人目前对注册表也不怎么了解,也只是大概的知道在Windows Phone下,驱动的inf文件并不像桌面Windows那样提供驱动自动安装程序,在Windows Phone...

2015-01-18 19:28:28

阅读数 1257

评论数 0

原创 Windows Phone 8.1 驱动开发——GPIO Device

在上一节 Windows Phone 8.1 驱动开发——GPIO 简介 中,我们了解了Windows 8系统中GPIO驱动的大体架构,由于在工作中手机驱动开发人员很少涉及到GPIO Controller驱动的开发,该部分都由平台厂商开发完成,所以这里给大家讲解一下GPIO Peripheral ...

2015-01-18 03:55:34

阅读数 3041

评论数 1

提示
确定要删除当前文章?
取消 删除