自定义博客皮肤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的专栏

专注于 Linux Graphics

  • 博客(97)
  • 资源 (11)
  • 收藏
  • 关注

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

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

2018-11-10 19:41:56 96578 59

翻译 LWN 翻译:Atomic Mode Setting 设计简介(下)

紧接上篇文章,本篇翻译起来有难度,同时对读者的技术背景有一定要求,适合深入研究 DRM 驱动的开发人员阅读。通过阅读本文,你将了解如下内容:1. DRM_MODE_ATOMIC_ALLOW_MODESET 标志位的由来及其作用2. 驱动中随处可见的 ww_lock 到底是什么鬼?有什么作用?3. atomic helper 与 legacy helper 相比,都做了哪些优化?4. Atomic 框架中的 DPMS 为什么只有“ON”和“OFF”这两种状态?

2021-02-11 00:23:40 5513 1

原创 Linux Graphics 周刊(第 9 期)

Mesa 21.0 即将发布

2021-01-12 00:17:00 4370

翻译 LWN 翻译:Atomic Mode Setting 设计简介(上)

通过阅读本文,你将了解以下内容:1. Atomic mode setting 产生的背景2. Atomic KMS 与谷歌 ADF 相比有哪些优势3. TEST_ONLY 模式的正确打开方式4. KMS state 的使用方法5. Atomic check 和 commit 的功能

2020-12-21 22:45:09 7156 1

原创 Linux Graphics 周刊(第 8 期)

Khronos 发布 Vulkan 光线追踪(Ray Tracing)最终版

2020-12-03 00:41:31 2150

原创 Linux Graphics 周刊(第 7 期)

* drm/crtc: 关于使用 kthread worker 来实现 non-blocking commit 的讨论* drm/cma-helper: 默认使用 drm_gem_cma_default_funcs callbacks* drm/atomic: 让 CRTC & Connector atomic 函数统一使用 drm_atomic_state 参数* Vulkan 1.2.158 新增 VK_KHR_fragment_shading_rate 扩展

2020-11-17 03:07:40 2687

原创 Linux Graphics 周刊(第 6 期)

drm-next for linux-5.11

2020-10-29 22:58:19 2961 1

原创 DRM 驱动 mmap 详解:(二)CMA Helper

CMA 是 Contiguous Memory Allocator 的缩写,它本身指代的是一种内存分配器(或内存分配策略),专用于分配物理连续的大块内存,以满足大内存需求的设备(如 Display、Camera)。CMA 除了具有内存分配的功能外,还具有内存迁移的功能,使得同一块 CMA 区域既可以被系统使用也可以被专用的 DMA 设备占用,从而大大提高了内存的使用率。要想使用 CMA 内存,需要在内核配置中开启 CONFIG_CMA 配置宏。

2020-10-09 22:10:27 8720 1

原创 Linux Graphics 周刊(第 5 期)

Android11 正式发布

2020-10-04 22:12:37 2633

原创 XDC2020

* ARM 拥抱 Panfrost 开源社区;* gfx-pps 介绍:使用 Perfetto 工具跟踪 GPU 性能问题;* V3DV 完成 Vulkan 1.0 符合性测试,准备 Upstream 到 Mesa 主线;* VK_EXT_extended_dynamic_state 扩展是如何诞生的;* 关于 OpenGL 与 Vulkan 之间的互操作性;* VK_EXT_present_timing 简介;* AMD Trusted Memory Zone (TMZ) 简介;

2020-10-04 00:45:19 3518

原创 Linux Graphics 周刊(第 4 期)

* LPC2020: Linux kernel 添加 Rust 支持 * LPC2020: 只需要一笔 Patch,Android AOSP 就可以在 kernel-5.9 主线上运行

2020-09-13 23:31:52 2248 2

原创 Linux Graphics 周刊(第 3 期)

ION 将从 kernel 主线中彻底移除

2020-09-01 22:52:03 2473

原创 Linux Graphics 周刊(第 2 期)

DRM:1. 修复 dma-heap 导出 name 不准确的问题2. 为 dma-heap 添加 Device Heap3. 为 dma-heap 引入自定义 CMA Heap4. 为 dma-heap 添加 Chunk HeapAOSP:1. 新增 AidlMessageQueue 结构体2. systrace 新增 system property 跟踪信息Vulkan:1. Vulkan-Docs 仓库或将 master 分支更名为 main 分支

2020-08-25 22:09:01 2667

原创 Linux Graphics 周刊(第 1 期)

1. 彻底废弃 drm_driver 中的 prime callbacks,全面启用 GEM Object functions2. 为 GEM vmap 添加 I/O memory 的支持3. dma-heap:添加 system-uncached HEAP4. DMA Heap vs GEM5. dma-buf: 为每个进程添加 buffer 使用状态的 ftrace 信息6. backlight: 代码优化,新增宏定义及操作接口7. Huawei Hikey970 DRM/KMS 驱动

2020-08-25 21:48:13 3648 4

原创 DRM 驱动 mmap 详解:(一)预备知识

本文并不打算讲解 mmap 系统调用的原理及其相关细节,因为这涉及到 linux 内存管理的诸多概念,大家只需要了解如何去写一个简单的 mmap 驱动程序就可以了,为后续 drm mmap 驱动的编写做准备。

2020-08-21 08:06:49 12779 2

翻译 翻译:Vulkan VK_EXT_extended_dynamic_state 介绍

原文作者并不是一上来就讲解该 extension 是什么、怎么用,而是先介绍 vulkan pipeline 、shader、dynamic state 这些基本概念,然后通过问题来引出 VK_EXT_extended_dynamic_state 以及它的用法,最后还介绍了该 extension 产生的故事背景,整篇阅读起来十分顺畅。因此本人决定将其翻译成中文,分享给大家,方便大家阅读。

2020-07-13 23:34:55 2702

翻译 翻译:Mainline Explicit Fencing

本文翻译自 Gustavo Padovan 于 2016 年 9 月发表在 Collabora 官网的三篇文章,Gustavo 本人也是内核中 dma-fence 的提交作者。通过本文,我们可以了解到 dma-fence 最初是如何演变而来的,以及它是如何在 graphics pipeline 中起作用的。

2020-07-05 14:49:47 4681 2

翻译 翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书

译者注以下为正文。介绍多年来,显示行业一直普遍认为显示器是以固定的刷新率(refresh rate)运行的,如 60Hz。这与以下事实形成鲜明对比:送给显示器的图像内容多种多样,每种图像都有自己独特的、变化的帧率(frame rate)。当显示的刷新率与图像内容自身的帧率不同步时,用户可能会察觉到撕裂(tearing)和卡顿(stutter)之类的异常效果。在移动应用程序中(如平板、笔记本电脑),对于静态图像和视频播放来说,较高的显示刷新率不仅显得多余,还增加了系统功耗,降低了续航能力。这些因素使得我

2020-07-01 21:37:59 8684

翻译 LWN 翻译:DMA-BUF cache handling: Off the DMA API map (part 2)

在上一篇文章中,我绍了一些关于 ION、DMA-BUF Heap、DMA API 的背景知识,以及 CPU Cache “所有权”的基本概念,最后站在传统 DMA API 的角度来描述 DMA-BUF 是如何处理 cache 同步问题的。文章最后还讨论了为什么传统的 DMA API 在现代移动平台上性能会这么差。本文将和大家一起探讨如何让 DMA-BUF exporter 避免不必要的 cache 操作的方法,并就如何改进这些方法提出了一些大致的建议。

2020-06-21 19:42:43 3432 2

原创 DRM GEM 驱动程序开发(dumb)

在上一篇《关于 DRM 中 DUMB 和 PRIME 名字的由来》 文章中,我们知道了 dumb buffer 名字的由来。本篇,我们将一起来写一个最简单的 GEM 驱动程序。

2020-06-18 17:50:08 15289 23

翻译 LWN 翻译:DMA-BUF cache handling: Off the DMA API map (part 1)

kernel 中的 DMA API 都是用来在 CPU 和 device 之间共享 memory 的。近年来,传统的 DMA API 已经被运用到 ION、DMA-BUF 和 DMA-BUF Heap 这些接口中,但是在接下来的讲解中我们会看到,关于内存共享的效率问题,到现在都还没能被彻底解决掉。

2020-06-14 15:01:54 3790

原创 关于 DRM 中 DUMB 和 PRIME 名字的由来

在上一篇《DRM驱动程序开发(VKMS)》文章里,我们学习了如何编写一个最简单的 KMS 驱动。而本篇,我将以叙述的形式为大家讲解 DRM GEM 的相关概念,代码留到下一篇进行讲解。我知道,大多数的 DRM 初学人员,在刚接触到 GEM 相关概念时,首先困惑的不是 GEM 架构有多难,而是 GEM 里面的那些专业术语到底是怎么来的?为什么要这样命名?比如本篇要讲的“DUMB”和“PRIME”,当你得知它们的作用时,你甚至会有些愤慨:它们的名字和它们的功能简直毫无逻辑关系!是 DRM 社区的大佬们都喜欢

2020-05-19 00:41:27 13224 14

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

VKMS 是 “Virtual Kernel Mode Setting” 的缩写,它于2018年7月5日被合入到 linux-4.19 主线版本中,并存放在 drivers/gpu/drm/vkms 目录下。之所以称它为 Virtual KMS,是因为该驱动不需要真实的硬件,它完全是一个软件虚拟的“显示”设备,甚至连显示都算不上,因为当它运行时,你看不到任何显示内容。

2020-04-27 00:12:37 25745 48

原创 Wayland/Weston 启动方式简介

本文简单介绍 Weston 常用的几种 backend 启动方式。目前最新的 Weston 8.0.0 支持如下几种 backend:drm-backendfbdev-backendheadless-backendrdp-backendwayland-backendx11-backend其中 headless-backend 不带任何 UI 界面,主要用于 weston 自测试,rdp-backend 则用于远程桌面。这两个 backend 本文不做介绍。

2020-03-17 14:26:25 19721

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

Render Hell – Book V避免使用小网格检查是否真的有必要使用小网格,或者是否可以将多个小网格组合成一个大网格。如果你有小网格,可以和 Graphic 工程师聊一聊,获取关于多边形个数“最佳点”(sweet spot,即低于该三角形个数的网格将无法得到更快的渲染速度)的信息。所以,如果你确实需要保留某个小网格,你可能需要采取一些措施来让事情顺利进行。你也需要注意多材质的问题。如果有一个大网格,却使用了5种材质,则在渲染过程中该大网格会被拆开,这意味着你现在又有了5个小网格。也许 Altl

2020-02-08 00:36:10 3249 2

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

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

2020-02-08 00:35:29 3344

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

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

2020-02-08 00:34:42 4485

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

Render Hell – Book IIPipeline 详解关于本篇文章,我收到的大多数积极反馈是:非常漂亮的演示说明,但是你的 Pipeline 已经是6年前的了!最初我一直不明白这句话是什么意思,直到 Christoph Kubisch 加入到我的 Render Hell 创作中来,我才明白这句话的含义。他是一名就职于 NVIDIA 的技术开发工程师,无论我有什么样的问题,他都会为我一一解答。请相信我,我的问题实在是太多了!????

2020-02-08 00:33:57 9027 5

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

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

2020-02-08 00:32:59 13724 5

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

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

2020-01-12 20:09:53 19855 17

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

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

2020-01-12 20:06:09 10347 6

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

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

2019-11-26 00:12:46 14023 3

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

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

2019-11-26 00:12:33 20497 5

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

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

2019-11-26 00:12:20 21226 14

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

在上一篇《kmap/vmap》中,我们学习了如何使用 CPU 在 kernel 空间访问 dma-buf 物理内存,但如果使用CPU直接去访问 memory,那么性能会大大降低。因此,dma-buf 在内核中出现频率最高的还是它的 dma_buf_attach() 和 dma_buf_map_attachment() 接口。本篇我们就一起来学习如何通过这两个 API 来实现 DMA 硬件对 dma-buf 物理内存的访问。

2019-11-26 00:12:05 26218 10

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

在上一篇《最简单的 dma-buf 驱动程序》中,我们学习了编写 dma-buf 驱动程序的三个基本步骤,即 dma_buf_ops 、 dma_buf_export_info、 dma_buf_export()。在本篇中,我们将在 exporter-dummy 驱动的基础上,对其 dma_buf_ops 的 kmap / vmap 接口进行扩展,以此来演示这两个接口的使用方法。

2019-11-26 00:11:46 25689 1

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

如果你和我一样,是一位从事Android多媒体底层开发的工程师,那么你对 dma-buf 这个词语一定不会陌生,因为不管是 Video、Camera 还是 Display、GPU,它们的buffer都来自于ION,而 ION 正是基于 dma-buf 实现的。假如你对 dma-buf 的理解并不深刻,又期望找个时间来彻底公关一下,那么很高兴,这几篇文章一定能让你对 dma-buf 有个更深入、更透彻的理解。

2019-11-26 00:11:02 62273 19

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

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

2019-08-11 23:45:13 15260 14

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

本篇将以最简单的代码形式,演示如何在远程操作BufferQueue。前面两篇文章《最简单的BufferQueue测试程序(一)》和《最简单的BufferQueue测试程序(二)》演示的都是在本地同一进程中操作BufferQueue,而实际使用过程中往往会出现Producer和Consumer位于不同的进程,这时候就需要通过binder调用来实现跨进程操作BufferQueue了。

2019-08-11 19:56:42 1945 1

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

在上一篇《最简单的BufferQueue测试程序(一)》中,我们了解了BufferQueue最基本的操作方法。除了dequeue/queue/acquire/release这些基本操作接口外,BufferQueue还为我们提供了一些特殊函数,如attach/detach/cancel等。本篇我们将一起来学习这些特殊函数的基本用法。Andriod版本:8.1伪代码void main(vo...

2019-08-10 17:37:34 2250 2

STM32F429 FMC驱动正点原子4.3寸电容触摸屏

STM32F429 FMC驱动正点原子4.3寸电容触摸屏,工程采用STM32CubeMX搭建,详情请参考我的博客。

2015-04-25

S3C2440 camera驱动

自己写的S3C2440 camera裸机驱动,采用类似STM32库函数的架构编写CAMIF接口驱动,适合初学者学习。

2015-04-08

s3c2440 uart driver

基于s3c2440的串口驱动,代码简单易懂,硬件平台为友善mini2440,使用RealView MDK 4.22开发。

2015-03-03

S3C2440 MMU driver

自己写的s3c2440 mmu 库,使用RealView MDK4.22开发环境,硬件平台友善MINI2440。

2015-03-03

S3C2440 lcd driver

基于友善MINI2440的LCD驱动,使用RealView MDK环境开发,代码简单易懂。

2015-03-03

LTDC驱动模板

基于STM32F429 Discovery Demo板的LTDC驱动模板,代码简洁明了,方便大家快速开发

2015-02-28

ClearCase基础培训.pdf

clearcase培训资料,对于刚接触管理软件的新手,是个入门的好资料。

2014-02-20

FatFs 0.01学习笔记.pdf

FatFs学习笔记的pdf文档,图很清晰。

2014-02-19

FatFs0.01源码中文注释

该FatFs版本为最老的0.01版本,本人对其进行了详细的中文注释。用于研究FatFs文件系统的架构很有帮助。

2014-02-19

基于SDIO接口的SD卡IAP源码

采用SDIO接口实现IAP功能的源代码,开发工具RealView MDK。

2013-12-09

MTK背光驱动关键代码

用于MTK功能机下的LCD+KEYPAD背光驱动控制。

2013-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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