Android Qcom Display学习(五)

本文详细介绍了高通平台上的UEFI启动流程,包括XBL和ABL两个部分,以及在Display初始化中的重要作用。讲解了UEFI如何检测和配置屏幕,如SW_RENDER模式、面板检测和Override机制。同时,涉及关键函数如MDPPlatformConfigure在配置显示过程中的应用,以及不同阶段的配置参数和结构体。

该系列文章总目录链接与各部分简介: Android Qcom Display学习(零)
https://www.guidgenerator.com/online-guid-generator.aspx

什么是UEFI

高通平台UEFI有关介绍
高通605平台屏调试(4):UEFI初始化流程
Android SDM660开机流程- UEFI XBL 代码流程分析

第一次接触到UEFI(Unified Extensible Firmware Interfacen ,统一可扩展固件接口)是实习的时候,主要是服务器的底层,当时以为只有服务器或者PC主机的Bootloader才是UEFI,现在也忘的差不多了,在高通平台上继续学习一下

高通UEFI主要分为XBL和ABL两部分组成。
XBL负责芯片驱动及充电等核心应用功能,XBL核心是none-HLOS boot_image代码的一部分,属于高通私有代码。
ABL包括芯片无关的应用,ABL则在开源Linux Android代码树里,负责Linux加载启动及fastboot等功能组件。
高通UEFI启动流程:SEC(安全验证) DXE(驱动执行环境) BDS(启动设备选择) RT(OS Loader)
uefi

Display

高通UEFI研究[五]
【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
LCD Porting的原则:先点亮Kernel,再点亮UEFI。
amss/BOOT.XF.4.1/boot_images/QcomPkg/Drivers/DisplayDxe/DisplayDxe.inf DisplayDxe.c
amss/BOOT.XF.4.1/boot_images/QcomPkg/Library/MDPLib/MDPLib.c DisplayUtils.c
在这里插入图片描述

(1)ABL fastboot override list     boverride
(2)XBL dynamic  detect panel id   bDetectPanel 
(3)SW RENDER  bSWRender 比如DISP_MODE_PANEL_NONE DISP_MODE_SKIP_BOOTLOADER 

SetupPlatformPanelConfig判断是否是SW RENDER(3)或者override panel(1)或者default panel(2);
default panel中pDetectPanel = TRUE才触发DynamicDSIPanelDetection,(1)(3)有一个满足都不会执行
ENTRY_POINT                    = DisplayDxeInitialize
    MDPSetProperty(MDP_DISPLAY_PRIMARY, MDP_DISPLAY_PROPERTY_ABL_INTERFACE_INIT, NULL)
    	Display_Utils_Initialize();/* 初始化ABL Later中Display的配置内容 */
    		checkTargetPanelSupport(); /* 获取支持的面板列表 */
    			MDPPlatformConfigure(MDP_DISPLAY_PRIMARY, MDPPLATFORM_CONFIG_GETPANELDTINFO, &sPlatformParams) ↓↓↓
    		CheckPanelOverride(); /* 检查是否fastboot oem panel name手动设置新的面板,默认不处理 bPanelOverride */
    		pDisplayContext->bOverride  = ParsePanelOverrideCommand(panelOverrideStr, &pDisplayContext->sDisplayParams);↓↓↓
    MDPInit(&sInitParam, MDP_INIT_FLAG_MMU_INIT)  /* MDPInit获取当前屏的硬件配置和屏的信息 */
    	MDPPlatformConfigure(MDP_DISPLAY_PRIMARY, MDPPLATFORM_CONFIG_SW_RENDERER, &sPlatformParams) ↓↓↓
    	FALSE == bSWRender /* SW_RENERER模式是没有屏的情况下,使用了一个默认的最低配置 */
    		MDPPlatformConfigure(MDP_DISPLAY_PRIMARY, MDPPLATFORM_CONFIG_GETPLATFORMINFO, &sPlatformParams) 
	MDPPower
<think>嗯,用户想学习Android QCOM显示相关的知识。从用户的问题来看,ta应该是嵌入式开发或Android系统开发的工程师,需要深入了解高通平台的显示子系统。 用户可能刚接触这个领域,需要系统性的学习路径。考虑到Android显示系统本身就很复杂,加上高通平台的私有实现,学习曲线会比较陡峭。我应该帮ta梳理清楚知识框架,避免一开始就陷入细节。 从提供的引用材料来看,内容涉及显示架构、MDP处理器、DRM模块、开机logo加载机制等。这些确实是QCOM显示的核心模块,但引用比较零散,需要我重新组织成逻辑连贯的体系。 特别注意到用户引用的章节提到了UEFI环境下的显示初始化,这个通常是在bootloader阶段完成的。看来用户的学习需求可能覆盖从底层驱动到上层框架的全栈知识。 在组织回答时,应该按从整体到局部、从抽象到具体的顺序: 先说明Android显示系统的通用架构,再突出高通的特有组件 重点解释MDP和SDE这些专属硬件模块的作用 补充开机流程中显示初始化的特殊机制 最后给出具体的学习资源路径 用户可能最关心的是实际开发中的重点难点,比如: 如何调试屏幕闪烁问题 怎样优化显示功耗 开机logo定制化的方法 这些实操性内容应该放在知识框架中适当位置 考虑到用户是工程师,回答要兼顾理论性和实践性。既要讲清楚技术原理,也要给出查看代码的具体路径(比如内核驱动位置、HAL接口文件等) 最后生成的问题要能引导用户深化学习,比如关于DRM框架的深入原理,或是MDP的带宽优化技巧。这些问题应该覆盖用户可能遇到的典型工作场景。</think>以下是Android QCOM显示系统的学习路径与核心知识梳理,结合高通平台特性整理: --- ### **一、Android显示系统分层架构** ```mermaid graph TD A[应用层] -->|SurfaceFlinger| B[Android框架层] B -->|HWC/HAL| C[硬件抽象层HAL] C -->|MDP/SDE驱动| D[内核驱动层] D -->|DSI/DP接口| E[物理显示设备] ``` --- ### **二、高通显示核心组件** 1. **MDP/SDE (Display Processor)** - 高通专属显示处理单元,负责图层合成、色彩管理、分辨率转换 - 关键能力: $$ \text{Throughput} = \sum_{i=1}^{n} (LayerWidth_i \times LayerHeight_i \times RefreshRate) $$ *需满足总线带宽限制* 2. **DRM/KMS (Direct Rendering Manager)** - 内核级显示资源管理框架 - 高通实现:`msm_drm` 驱动模块 - 控制流程: ```c drmModeSetCrtc(crtc_id, buffer_id, x, y, &connector_id, 1, mode); ``` 3. **显示流水线 (Display Pipeline)** ```plaintext AP → MDP → DSI控制器 → PHY → LCD面板 ↘ DP接口 → Type-C ``` --- ### **三、关键学习模块** 1. **显示初始化流程** - Bootloader阶段加载Logo(参考引用[3]): ```c DisplayUtilsRenderLogo() → LoadFile("logo_720x1280.bmp") ``` - UEFI显示协议:`gQcomDisplayUtilsProtocolGuid` 2. **HAL层实现** - 源码位置:`hardware/qcom/display/` - 核心接口: - `hwc_composer_device_1_t` :合成策略控制 - `qService->getDisplayConfig()` :获取EDID数据 3. **面板驱动调试** - DSI时序配置: ```c struct dsi_display_mode timing = { .h_active = 1080, .v_active = 2400, .refresh_rate = 120 // Hz }; ``` - 背光控制:`PWM或WLED驱动` --- ### **四、实战调试技巧** 1. **日志过滤命令** ```bash adb logcat | grep -E "SDE|MDP|DSI" ``` 2. **关键内核节点** - 显示状态:`/d/dri/0/debug/dump` - 带宽监测:`/sys/kernel/debug/dri/0/perf` 3. **功耗优化点** - 动态刷新率(DFS):`sys/class/drm/card0/display_*` - 区域刷新(ROI):通过`SDE_UPDATE_DIRTY_REGIONS`启用 --- ### **学习资源建议** 1. **官方文档** - [高通显示架构白皮书](https://www.qualcomm.com) (需NDA账号) 2. **代码路径** - 驱动核心:`kernel/msm-xxx/drivers/gpu/drm/msm/` - HAL实现:`vendor/qcom/opensource/display/` 3. **调试工具** - QPST工具套件中的Display Analyzer ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值