自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 DRM驱动(十)之page_flip

本文详细阐述了drmModePageFlip刷新图像如何避免撕裂的过程,并且详细分析了对应kernel driver的逻辑。

2023-12-28 10:31:49 1838

原创 DRM驱动(九)之drm_vblank

本文从app到kernel drm driver,vblank更新的详细过程。

2023-12-28 10:16:52 1915

原创 分析layer是否参与合成

本文详细分析了SurfaceFlinger中哪些layer不会被合成,哪些layer会被合成,以及是否合成的原理。详细分析了整个程序的流程。

2023-12-22 10:45:05 821 2

原创 SurfaceFlinger处理事务

app向surfaceflinger提交事务之后,surfaceflinger会缓存事务;当vsync到来之后,会执行进行处理。onMessageInvalidate的主要功能:处理事务刷新图像。

2023-12-21 14:08:18 536

原创 SurfaceFlinger layer之间的对应关系

本文详细分析了SurfaceFligner中Layer流转的过程,以便于了解SurfaceFlinger的合成过程

2023-11-07 14:08:19 1091

原创 10 分析SurfaceComposerClient提交事务过程

分析SurfaceComposerClient提交事务的整个流程,以及SurfaceFlinger对应的处理机制

2023-11-06 19:24:50 625

原创 07 深入理解surface unlockAndPost

app通过Surface unlockAndPost进行queueBuffer,进而调用onFrameAvailable;使用processNextBufferLocked进行Transaction事务提交到SurfaceFlinger,让SurfaceFlinger根据Transaction进行合成操作。

2023-11-03 16:20:24 343

原创 05 深入解析surfaceControl getSurface

SurfaceControl::getSurface()返回的实际是BBQSurface,BBQSurface继承Surface,可以使用Surface表示。BBQSurface是对生产者,handle的封装,其中包含了对buffer的操作。并且本文对FrameAvailableListener的初始化进行了简要阐述

2023-11-03 14:50:57 525

原创 06 深入解析surface lock

本文主要讲述了surface lock的主要流程和作用

2023-10-30 19:48:41 247

原创 04 深入探究waitForService<ISurfaceComposer>

本文梳理了一下waitForService的内部机制,和Bpxxx的创建过程,并简单了解BpSurfaceComposer/BnSurfaceComposer之间的交互。

2023-10-24 20:10:16 364

原创 03 构造surfaceComposerClient

surfaceComposerClient的创建过程

2023-10-24 19:34:22 394

原创 02 最简单的SurfaceFlinger应用程序

获取屏幕大小 SurfaceComposerClient::getActiveDisplayMode(displayToken, &displayMode);获取要显示的屏幕,这里获取的是主屏SurfaceComposerClient::getInternalDisplayToken。设置surface属性;推图 surface->unlockAndPost()创建SurfaceComposerClient。创建SurfaceControl。向buffer里填充图像数据。

2023-10-24 10:59:07 670

原创 09 SurfaceFinger layer创建过程

本篇讲述了app创建Surface时SurfaceFlinger主要做哪些工作

2023-10-19 20:28:48 580

原创 08 surfaceflinger初始化

本文介绍了surfaceflinger的初始化流程,和一些重要的成员如Display,DisplayDevice,HWComposer的初始化过程

2023-10-13 08:53:59 327

原创 01 Android12 surfaceflinger详解

SurfaceFlinger是Android操作系统中的一个Service,它负责接收所有Window的Surface作为输入,并根据ZOrder、透明度、大小、位置等参数,计算出每个Surface在最终合成图像中的位置,然后交由CPU或GPU生成最终的显示Buffer,最后显示到特定的显示设备上

2023-10-11 22:57:41 847

原创 DRM驱动(八)之crtc_state生命周期

本文介绍了drm中各个组件state的创建,使用和销毁的生命周期。算是对之前内容的补充,把一些细节放大来阐述。

2023-03-17 22:46:38 1439 2

原创 DRM驱动(七)之atomic_commit

atomic_commit,drm框架中逻辑比较复杂的一块,这里通过简短的语言和思维导图把刷图的过程呈现出来,并说明每个回调接口的作用

2022-09-20 23:04:24 4960

原创 DRM驱动(六)之atomic_check

atomic_check主要用来检查应用设置的参数是否存在与驱动不相符的地方,drm框架会check通用的参数,并会调用各个由厂商实现组件的atomic_check来进行参数检查。

2022-09-18 09:36:42 2898

原创 DRM驱动(五)之drm_atomic_state

本节介绍了应用调用drmModeSetCrtc时传入参数转换为struct drm_atomic_state的过程

2022-06-04 22:15:36 3974

原创 DRM驱动(四)之ADD_FB

gem obj创建之后需要与一块drm_framebuffer进行绑定使用,因为最终刷图使用的是fb。使用接口drmModeAddFB会创建drm_framebuffer并与上节创建的gem obj进行绑定。本文阐述了内核创建drm_framebuffer的整个过程。

2022-04-22 23:13:00 6924 6

原创 DRM驱动(三)之CREATE_DUMB

我会根据我们如何创建一个drm的buf呢,或者你已经知道可以使用drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &create)可以为显示创建buff,但此函数在内核又做了什么呢?下面一起学习一下内核如何为应用创建显存。

2022-04-04 23:22:40 7117 16

原创 DRM驱动(二)之DRM驱动模块简介

做过显示的都知道,目前大多数厂商已经抛弃fb框架,使用drm驱动来管理显示。其中的优点是芯片厂商不必重复造轮子,只需将自己显示处理器的配置流程实现为函数,由drm驱动调用即可。同时drm也为用户提供同一接口,方便使用。

2022-04-04 20:01:46 8685 1

原创 DRM驱动(一)之显示处理器介绍

显示处理器将在内存中的图像数据,转化为电信号送到显示设备,比如早期的LCDC。后面进行了拓展,可以处理一些简单的图像,比如缩放、旋转、合成等,如瑞芯的vop,高通的sde。合成后送到下一级的接口,这里的接口指的是lvds,mipi等。处理简单的图像使用显示处理器可以节省gpu功耗。

2022-04-03 22:17:26 8217

原创 Display DRM架构之component

刚开始做显示驱动的时候就一直接触到component组件,DRM中的各个模块使用component来管理。最近学习了一下这一块源码,彻底明白了component的机制。为什么引入component机制为什么会引入这个这个机制呢?display和camera等这种框架会涉及到很多模块,像高通处理中,里面有MDP,mipi,hdmi,edp等等其他模块;模块之间会存在依赖,就需要考虑加载顺序。虽然内核也提供了像core_initcall,arch_initcall,late_initcall这些接口

2021-08-29 23:58:04 2864

原创 使用input子系统完成键值上报

好久没有写过单独的驱动了,今天使用正点原子的alpha开发板,写了一个关于使用input子系统完成按键键值上报的驱动。先理一下整个驱动的思路:1.先在设备树里配置按键的信息。会将添加的信息生成一个platform_device。2.使用platform_device设备模型作为整个框架。(根据设备树中的compatible,与驱动中的of_device_id中的compatible进行...

2020-03-15 23:06:29 1460 3

空空如也

空空如也

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

TA关注的人

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