当前位置: 首页 > news >正文

我所理解的高通UEFI之display的流程和移植

UEFI的流程

UEFI跟uboot一样在OS加载启动之前,正确的指定启动服务,并向内核传递信息,代替原先的uboot。它包含了上电、驱动实现,以及os环境的建立和应用程序(类似于fastboot)。这个os是UEFI自己独立运行独有。

UEFI由XBL和ABL组成:

  • XBL:原先的LK移到这里,负责驱动和充电功能,属于高通的私有代码。其中大量的使用了protocol,包含了驱动函数指针和数据,也就是驱动,在ABL可以直接调用。

  • ABL:应用程序,主要作用是加载引导kernel,和fastboot。在Android 代码测。

lcd流程:

  • DisplayDxeInitialize 函数入口:Drivers/DisplayDxe/DisplayDxe.inf 文件中ENTRY_POINT=DisplayDxeInitialize。位置:BOOT.XF.4.1\boot_images\QcomPkg\Drivers\DisplayDxe\DisplayDxe.c

  • CreateEventEx:创建回调函数,关于给屏幕上下电

  • DisplayPwr_InitLPMSupport:初始化相关,如电源、时钟。

  • MDPSetProperty:初始化ABL上下文,获得支持的屏。位置QcomPkg\Library\MDPLib\MDPLib.c

  • Display_Utils_Initialize:通过 MDP_DISPLAY_PROPERTY_ABL_INTERFACE_INIT 类型进入

  • CheckTargetPanelSupport:获取所有的panel 列表

  • MDPPlatformConfigure:获取gPanelList数组,保存在psPanelDTInfo中,从头文件#include "MDPPlatformLib.h"可以看出,调用的是 /MDPPlatformLibBoot/MDPPlatformLib.c 中的代码

  • MDP_SetBootServiceVariable: QcomTokenSpace GUID 配置变量PanelCount和PanelList

  • CheckPanelOverride:检查ABL是否有配置覆盖

  • MDPInit:初始化屏。位置boot_images/QcomPkg/Library/MDPLib/MDPLib.c

  • MDP_OSAL_CALLOC:分配 DSI 和 I2C 相关的缓存内存资源

  • MDPPlatformConfigure:判断是否有硬件加速

  • MDPPlatformConfigure:获取平台芯片id

  • sInitParam.aSupportedDisplays[MDP_DISPLAY_PRIMARY]):如果配置了MDP_DISPLAY_PRIMARY

  • MDPPower:上电

  • MDPDetect:检查默认配置的屏幕,通过MDPDetectPanel 读取LCD id,选择具体屏的xml

  • DisplayDxeSelectMode:配置显示屏的模式

  • MDPSetProperty:使能主屏显示prop属性

  • InstallMultipleProtocolInterfaces:仅当检测到面板时才安装显示协议。

UEFI之display的移植:

  1. BOOT.XF.4.1/boot_images/QcomPkg/Settings/Panel下复制一份xml修改其中的数据:Panel_cptf_xxxx_1440_vid.xml

  1. SocPkg/AgattiPkg/LAA/Core.fdf :把该xml加入编译,guid可以用工具生成

FILE FREEFORM = 439836d3-599f-4156-a671-f98a64d8482b {SECTION UI = "Panel_cptf_xxxxx_1440_vid.xml"SECTION RAW = QcomPkg/Settings/Panel/Panel_cptf_ili8911_1440_vid.xml}
  1. Include/Library/MDPPlatformLib.h 添加lcd宏:MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO

  1. SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLibPanelConfig.h,将lcd宏、功能函数、xml绑定

 { MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,               // ePanelSelected"Panel_cptf_xxxx_1440_vid.xml",                          // pPanelXmlConfigPanel_Default_PowerUp,                                      // pPanel_PowerUpPanel_Default_PowerDown,                                     // pPanel_PowerDownPanel_Default_Reset,                                        // pPanel_ResetPanel_Default_Peripheral_Power,                             // pPanel_Peripheral_PowerPanel_Default_Brightness_Enable,                            // pPanel_Brightness_EnablePanel_Default_Brightness_Level                              // pPanel_Brightness_Level},
  1. SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLib.c: fastBootPanelList和uefiPanelList

  • 添加fastBootPanelList:将lcd宏和xml及kernel的dts绑定

  PANEL_CREATE_ENTRY("cpft_xxxx_1440_vid",      MDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,  "qcom,mdss_dsi_cpft_xxxx_video:",   DISP_INTF_DSI, DISP_TOPOLOGY_CONFIG_NONE,  DISP_TIMING_CONFIG_NONE,PLL_OVERRIDE_NONE, DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER,  DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER,     DISP_MODE_SINGLE_DSI | DISP_MODE_SKIP_BOOTLOADER),
  • uefiPanelList:将LCD的id和lcd宏绑定,读取id后会选择该lcd宏,选取该lcd配置

{  0x06,                                                  // uCmdType0x05,                                              // total number of retry on failures{{{0xDA, 0x00},                                       // address to read ID1{0xid, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback}, {{0xDB, 0x00},                                       // address to read ID2{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback},{{0xDC, 0x00},                                       // address to read ID3{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}     // expected readback}},0,                                                     // Lane remap order {0, 1, 2, 3}NULL,                                               // psPanelCfg (panel configuration)0,                                                     // uPanelCfgSizeMDPPLATFORM_PANEL_xxxxx_1440_HDPLUS_VIDEO,          // eSelectedPanel 0                                                      // uFlags},
  1. ./SocPkg/AgattiPkg/Library/MDPPlatformLib/MDPPlatformLibPanelCommon.h 设置修改lcd rest gpio:

#define DEFAULT_DISP_RESET_GPIO           82 
  1. 如果开机需要修改gpio的配置状态,可以修改SocPkg/AgattiPkg/Settings/TLMM/loader/TLMMChipset.xml

uefi-kernel之lcd移植

  1. vendor/qcom/proprietary/devicetree-4.19/qcom:复制其他panel dtsi并修改相关的proch值

&mdss_mdp {dsi_cpft_xxxx_video: qcom,mdss_dsi_cpft_xxxx_video {qcom,mdss-dsi-panel-name = "cptf xxxx video mode dsi panel";qcom,mdss-dsi-panel-controller = <&mdss_dsi0>;qcom,mdss-dsi-panel-type = "dsi_video_mode";qcom,mdss-dsi-panel-destination = "display_1";....
  1. ./bengal-sde-display.dtsi 添加头文件 :

#include "dsi-panel-cpft-xxxx-1440-plus-vid.dtsi"
  1. ./scuba-idp.dtsi添加电源、reset、背光模式

&dsi_cpft_xxxx_video {qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";qcom,bl-pmic-pwm-period-usecs = <100>;qcom,mdss-dsi-bl-min-level = <1>;qcom,mdss-dsi-bl-max-level = <4095>;qcom,platform-reset-gpio = <&tlmm 82 0>;qcom,platform-reset-gpio-always-on;qcom,platform-en-gpio = <&tlmm 105 0>;
};
  1. 添加clock时序:记得用2.0.0的时序表格

&dsi_cpft_xxxx_video {qcom,mdss-dsi-t-clk-post = <0x09>;qcom,mdss-dsi-t-clk-pre = <0x15>;qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0","src_byte_clk0", "src_pixel_clk0","shadow_byte_clk0", "shadow_pixel_clk0";qcom,mdss-dsi-display-timings {timing@0 {qcom,mdss-dsi-panel-phy-timings =[1C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 19 02 03 01 02 04 a01C 07 02 03 01 02 04 a0         ];qcom,display-topology = <1 0 1>;qcom,default-topology-index = <0>;};};
};
  1. 如果没有亮屏,可以试试息屏在亮屏。如果可以亮屏,则是xbl没亮问题而引起kernel亮屏失败。

相关文章:

我所理解的高通UEFI之display的流程和移植

UEFI的流程UEFI跟uboot一样在OS加载启动之前&#xff0c;正确的指定启动服务&#xff0c;并向内核传递信息&#xff0c;代替原先的uboot。它包含了上电、驱动实现&#xff0c;以及os环境的建立和应用程序&#xff08;类似于fastboot&#xff09;。这个os是UEFI自己独立运行独有…...

iozone -a fsync: I/O error

iozone -a fsync: I/O error iozone: interrupted exit iozone 问题表现是手机老化后重启不开机。检查不开机Log&#xff0c;发现/data/system/packages.xml文件有损坏&#xff0c;pull 离线日志&#xff0c;发现出问题前后的日志也不能pull&#xff0c;pull出来的离线日志解压…...

Element UI框架学习篇(五)

Element UI框架学习篇(五) 1 准备工作 1.1 在zlz包下创建数据传输对象类EmpDTO package com.zlz.dto;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;//根据前台来的 Data public class EmpDTO {private String name;private Stri…...

SpringBoot 全局异常处理用法及原理

SpringBoot 全局异常处理用法及原理 Springboot或springMVC项目中&#xff0c; 我们一般会设置一个全局异常处理&#xff0c; 来对异常进行兜底。 业务代码执行过程中抛出的异常&#xff0c; 如果业务逻辑没有主动捕获&#xff0c;那么异常就会一直往上抛&#xff0c;最后进入…...

浏览器中HTTP请求流程是如何处理的

HTTP 是一种允许浏览器向服务器获取资源的协议&#xff0c;是 Web 的基础&#xff0c;通常由浏览器发起请求&#xff0c;用来获取不同类型的文件&#xff0c;例如 HTML 文件、CSS 文件、JavaScript 文件、图片、视频等。 浏览器端发起 HTTP 请求流程&#xff1a; 1. 构建请求…...

【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net

文章目录博主精品专栏导航一、前言1.1、什么是图像分割&#xff1f;1.2、语义分割与实例分割的区别1.3、语义分割的上下文信息1.4、语义分割的网络架构二、网络 数据集2.1、经典网络的发展史&#xff08;模型详解&#xff09;2.2、分割数据集下载三、算法详解3.1、U-Net3.1.1、…...

七、插件机制

Interceptor MyBatis 插件模块中最核心的接口就是 Interceptor 接口&#xff0c;它是所有 MyBatis 插件必须要实现的接口&#xff0c;其核心定义如下&#xff1a; public interface Interceptor {// 插件实现类中需要实现的拦截逻辑Object intercept(Invocation invocation) …...

kmp算法

前缀函数 π[i]max⁡k0,⋯,i{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]}\pi\left[i\right] \max\limits_{k 0,\cdots, i}\left\{k|s\left[0,\cdots,k-1\right] s\left[i-\left(k-1\right) ,\cdots, i\right]\right\} π[i]k0,⋯,imax​{k∣s[0,⋯,k−1]s[i−(k−1),⋯,i]} 简单来说…...

【Python】正则表达式简单教程

0x01 正则表达式概念及符号含义 掌握正则表达式&#xff0c;只需要记住不同符号所表示的含义&#xff0c;以及对目标对象模式&#xff08;或规律&#xff09;的正确概括。 1、基础内容 字符匹配 在正则表达式中&#xff0c;如果直接给出字符&#xff0c;就是精确匹配。\d 匹…...

SAP ABAP Odata

GetEntity和GetEntitys GetEntitys 创建Odata Project 导入结构 选择需要的字段 设定Key 勾选字段的creatable、updatable、sortable、nullable、filterable属性值。 再依上述步骤创建ZPOITEM结构和实体集 3. 创建ZPOHEADER和ZPOITEM的Association 两个实体集的关联字段&…...

Android native ASAN 排查内存泄漏

一、概述 android 对native - c/c 的调试和排查是比较难受的一件事。我看周遭做window &#xff0c; linux 甚至ios的调试排查起c的代码都比较方便。习惯了app开发去熟悉native是各种痛苦&#xff0c;最主要是排查问题上。后续有时间打算整理下native 的错误排查使用&#xff…...

Django项目开发

一.认识NoSQL 1.SQL 关系型数据库 结构化: 定义主键&#xff0c;无符号型数据等关联的&#xff1a;结构化表和表之间的关系通过外键进行关联&#xff0c;节省存储空间SQL查询&#xff1a;语法固定 SELECT id,name,age FROM tb_user WHERE id1 ACID 2.NoSQL 非关系型数据库 Re…...

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解

Debezium系列之:深入理解Debezium Server和Debezium Server实际应用案例详解 一、认识Debezium Server二、下载Debezium Server三、解压Debezium Server四、查看Debezium Server目录五、Debezium Server配置六、Debezium Server启动输出样式七、源配置八、格式配置九、Transfo…...

IDE2022源码编译tomcat

因为学习需要&#xff0c;我需要源码编译运行tomcat对其源码进行一个简单的追踪分析。由于先前并未接触过java相关的知识&#xff0c;安装阻力巨大。最后请教我的开发朋友才解决了最后的问题。将其整理出来&#xff0c;让大家能够快速完成相关的部署。本文仅解决tomcat-8.5.46版…...

214 情人节来袭,电视剧 《点燃我温暖你》李峋同款 Python爱心表白代码,赶紧拿去用吧

大家好&#xff0c;我是徐公&#xff0c;六年大厂程序员经验&#xff0c;今天为大家带来的是动态心形代码&#xff0c;电视剧 《点燃我温暖你》同款的&#xff0c;大家赶紧看看&#xff0c;拿去向你心仪的对象表白吧&#xff0c;下面说一下灵感来源。 灵感来源 今天&#xff…...

数据库范式

基本概念 函数依赖 x→yx\rightarrow yx→y&#xff0c;当确定xxx的时候&#xff0c;yyy也可以确定 例&#xff1a; 学号→\rightarrow→姓名&#xff0c;当知道了学号&#xff0c;就知道了学生姓名 学号,课程号→\rightarrow→成绩&#xff0c;当知道了学号和课程号&#xff…...

CUDA中的底层驱动API

文章目录CUDA底层驱动API1. Context2. Module3. Kernel Execution4. Interoperability between Runtime and Driver APIs5. Driver Entry Point Access5.1. Introduction5.2. Driver Function Typedefs5.3. Driver Function Retrieval5.3.1. Using the driver API5.3.2. Using …...

【博客616】prometheus staleness对PromQL查询的影响

prometheus staleness对PromQL查询的影响 1、prometheus staleness 官方文档的解释&#xff1a; 概括&#xff1a; 运行查询时&#xff0c;将独立于实际的当前时间序列数据选择采样数据的时间戳。这主要是为了支持聚合&#xff08;sum、avg 等&#xff09;等情况&#xff0c…...

多传感器融合定位十三-基于图优化的建图方法其二

多传感器融合定位十二-基于图优化的建图方法其二3.4 预积分方差计算3.4.1 核心思路3.4.2 连续时间下的微分方程3.4.3 离散时间下的传递方程3.5 预积分更新4. 典型方案介绍4.1 LIO-SAM介绍5. 融合编码器的优化方案5.1 整体思路介绍5.2 预积分模型设计Reference: 深蓝学院-多传感…...

linux 服务器线上问题故障排查

一 线上故障排查概述 1.1 概述 线上故障排查一般从cpu,磁盘,内存,网络这4个方面入手; 二 磁盘的排查 2.1 磁盘排查 1.使用 df -hl 命令来查看磁盘使用情况 2.从读写性能排查:iostat -d -k -x命令来进行分析 最后一列%util可以看到每块磁盘写入的程度,而rrqpm/s以及…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...