Android 车载虚拟化底层技术-Kernel 5.15 -Android13(multi-cards)技术实现

news2024/12/18 0:34:13

系列文章请扫点击如下链接!

Android Display Graphics系列文章-汇总

本文主要包括部分:

一、Android13的Kernel 5.15版本

1.1 Kernel 5.15 情况说明

1.2 前置条件

二、QCM61*5 plane配置

2.1 multi-card配置

2.2 移植msm-lease

2.3 配置信息确认

三、Kernel 5.15 mutil-card方案实现

3.1 移植详细代码实现

一、Android13的Kernel 5.15版本

1.1 Kernel 5.15 情况说明

高通提供Android 13基线代码,有的是基于Kernel 5.15,在前两篇文章中,讲解了Kernel 5.4、5.10中就已经不存在msm-lease了。所以在Kernel  5.15版本上,也是一样的。

在Kernel 5.15中,msm的驱动已经移至 target_ap/vendor/qcom/opensource/display-drivers路径下;需要将msm-lease移植适配到此路径下,msm-lease同样需要移植到此路径下;

1.2 前置条件

移植multi-card的前置条件是,DSI屏和DP屏的驱动已经调试正常,单card(android默认)下是显示相同内容的。

此时再按照以下patch实现multi-card。

二、QCM 6**5 plane配置

2.1 multi-card配置

以QCM61*5为例,说明配置card信息;

下面配置:sde_card1的接口是DSI,并且分配了4个plane;sde_card2的接口是DP1,分配了2个plane。实际使用场景可以根据对现实的需求分配。

+	
+	
+	sde_card1: qcom,sde-kms-lease@0 {
+		compatible = "qcom,sde-kms-lease";
+		qcom,dev-name = "msm_drm1";
+		qcom,lease-connectors = "DSI-1";
+		qcom,lease-planes = "plane-0","plane-1","plane-2","plane-5";
+	};
+	
+	sde_card2: qcom,sde-kms-lease@1 {
+		compatible = "qcom,sde-kms-lease";
+		qcom,dev-name = "msm_drm2";
+
+		qcom,lease-connectors = "DP-1";
+		qcom,lease-planes ="plane-3","plane-4";
+	};
+};
+&sde_dp {
+	status = "okay";
+	qcom,dp-hpd-gpio = <&tlmm 100 0>;
+	qcom,dp-low-power-hw-hpd;
 };

2.2 移植msm-lease

将适合该平台的msm-lease文件放到target_ap/vendor/qcom/opensource/display-drivers/路径下,并在内核中增加配置。

--- a/config/trinketdisp.conf
+++ b/config/trinketdisp.conf
@@ -14,3 +14,4 @@
 export CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG=y
 export CONFIG_DRM_SDE_RSC=y
 export CONFIG_DRM_CLIENT_BOOTSPLASH=y
+export CONFIG_DRM_MSM_LEASE=y
\ No newline at end of file

--- a/config/trinketdispconf.h
+++ b/config/trinketdispconf.h
@@ -16,3 +16,4 @@
 #define CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG 1
 #define CONFIG_DRM_SDE_RSC 1
 #define CONFIG_DRM_CLIENT_BOOTSPLASH 1
+#define CONFIG_DRM_MSM_LEASE 1

在内核中要增加头文件:

kernel_platform/common/include/drm/drmP.h
kernel_platform/common/include/drm/drm_os_linux.h
kernel_platform/common/include/drm/drm_pci.h
kernel_platform/msm-kernel/include/drm/drmP.h
kernel_platform/msm-kernel/include/drm/drm_os_linux.h
kernel_platform/msm-kernel/include/drm/drm_pci.h

修改vendor/qcom/opensource/display-drivers/msm/msm_drv.h

vendor/qcom/opensource/display-drivers/msm/msm_drv.c ,使其调用msm_drm_register()注册drm时,调用msm_lease_drm_unregister()注册lease_drm。

移植完成,同样可以看到两个card节点,

2.3 配置信息确认

可以查看上两篇文章 中此章节内容

三、Kernel 5.15 mutil-card方案实现

3.1 移植详细代码实现

dtsi的card配置信息,修改路径在target/vendor/qcom/proprietary/


diff --git a/display-devicetree/display/trinket-sde-display-iot-dp-idp.dtsi b/display-devicetree/display/trinket-sde-display-iot-dp-idp.dtsi

--- a/display-devicetree/display/trinket-sde-display-iot-dp-idp.dtsi

+++ b/display-devicetree/display/trinket-sde-display-iot-dp-idp.dtsi

@@ -16,7 +16,7 @@

 &mdss_mdp {

 	qcom,sde-crtc-num-pref = <5>;

 	qcom,sde-reg-dma-version = <0>;

-	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp>;

+	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp &sde_card1 &sde_card2>;

 };



 &qupv3_se5_i2c {

diff --git a/display-devicetree/display/trinket-sde-display-iot-dp-usbc-idp.dtsi b/display-devicetree/display/trinket-sde-display-iot-dp-usbc-idp.dtsi

--- a/display-devicetree/display/trinket-sde-display-iot-dp-usbc-idp.dtsi

+++ b/display-devicetree/display/trinket-sde-display-iot-dp-usbc-idp.dtsi

@@ -5,5 +5,6 @@

 };



 &mdss_mdp {

-	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp>;

+	/delete-property/ connectors;

+	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp &sde_card1 &sde_card2>;

 };

diff --git a/display-devicetree/display/trinket-sde-display-iot-idp.dtsi b/display-devicetree/display/trinket-sde-display-iot-idp.dtsi

--- a/display-devicetree/display/trinket-sde-display-iot-idp.dtsi

+++ b/display-devicetree/display/trinket-sde-display-iot-idp.dtsi

@@ -36,7 +36,7 @@

 };



 &mdss_mdp {

-	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp>;

+	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp &sde_card1 &sde_card2>;

 };



 &qupv3_se2_i2c {

diff --git a/display-devicetree/display/trinket-sde-display.dtsi b/display-devicetree/display/trinket-sde-display.dtsi

--- a/display-devicetree/display/trinket-sde-display.dtsi

+++ b/display-devicetree/display/trinket-sde-display.dtsi

@@ -135,12 +135,34 @@

 		cell-index = <0>;

 		label = "wb_display";

 	};

+	

+	

+	sde_card1: qcom,sde-kms-lease@0 {

+		compatible = "qcom,sde-kms-lease";

+		qcom,dev-name = "msm_drm1";

+		qcom,lease-connectors = "DSI-1";

+		qcom,lease-planes = "plane-0","plane-1","plane-2","plane-5";

+	};

+	

+	sde_card2: qcom,sde-kms-lease@1 {

+		compatible = "qcom,sde-kms-lease";

+		qcom,dev-name = "msm_drm2";

+

+		qcom,lease-connectors = "DP-1";

+		qcom,lease-planes ="plane-3","plane-4";

+	};

+};

+&sde_dp {

+	status = "okay";

+	qcom,dp-hpd-gpio = <&tlmm 100 0>;

+	qcom,dp-low-power-hw-hpd;

 };



 &mdss_mdp {

-	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp>;

+	connectors = <&smmu_sde_unsec &smmu_sde_sec &sde_wb &ivi_serder_driver &sde_dsi &sde_dp &sde_card1 &sde_card2>;

 };



+

 &dsi_sim_vid {

 	qcom,dsi-select-clocks = "pll_byte_clk0", "pll_dsi_clk0";




*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************详见如下系列文章**************************

Android Display Graphics系列文章-汇总

Android Display Graphics系列文章-汇总
*****************************************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FFmpeg】FFmpeg 内存结构 ⑥ ( 搭建开发环境 | AVPacket 创建与释放代码分析 | AVPacket 内存使用注意事项 )

文章目录 一、搭建开发环境1、开发环境搭建参考2、项目搭建 二、AVPacket 创建与释放代码分析1、AVPacket 创建与释放代码2、Qt 单步调试方法3、单步调试 - 分析 AVPacket 创建与销毁代码 三、AVPacket 内存使用注意事项1、谨慎使用 av_init_packet 函数2、av_init_packet 函数…

C# DLT645 97/07数据采集工具

电表模拟器 97协议测试 07协议测试 private void btnSend_Click(object sender, EventArgs e) {string addr txtAddr.Text.Trim();string data txtDataFlg.Text.Trim();byte control 0x01;switch (cmbControl.SelectedIndex){case 0: control (byte)0x01; break;// 97协议c…

颜色代码表: 一站式配色方案设计工具集网站

大家好&#xff0c;我是一名设计师&#xff0c;同时也是一名开发者。平时的工作中&#xff0c;相信很多设计师和我一样经常遇到一个问题&#xff1a;设计配色方案时&#xff0c;工具太分散了。寻找颜色搭配灵感需要去一个网站&#xff0c;颜色代码转换要开另一个&#xff0c;检…

Android显示系统(13)- 向SurfaceFlinger提交Buffer

Android显示系统&#xff08;01&#xff09;- 架构分析 Android显示系统&#xff08;02&#xff09;- OpenGL ES - 概述 Android显示系统&#xff08;03&#xff09;- OpenGL ES - GLSurfaceView的使用 Android显示系统&#xff08;04&#xff09;- OpenGL ES - Shader绘制三角…

WebSocket 与 Server-Sent Events (SSE) 的对比与应用

目录 ✨WebSocket&#xff1a;全双工通信的利器&#x1f4cc;什么是 WebSocket&#xff1f;&#x1f4cc;WebSocket 的特点&#x1f4cc;WebSocket 的优点&#x1f4cc;WebSocket 的缺点&#x1f4cc;WebSocket 的适用场景 ✨Server-Sent Events (SSE)&#xff1a;单向推送的轻…

Mysql 深度分页查询优化

Mysql 分页优化 1. 问题根源 问题&#xff1a; mysql在数据量大的时候&#xff0c;深度分页数据偏移量会增大&#xff0c;导致查询效率越来越低。 问题根源&#xff1a; 当使用 LIMIT 和 OFFSET 进行分页时&#xff0c;MySQL 必须扫描 OFFSET LIMIT 行&#xff0c;然后丢弃前…

SpringBoot - 动态端口切换黑魔法

文章目录 关键技术点核心原理Code 关键技术点 利用 Spring Boot 内嵌 Servlet 容器 和 动态端口切换 的方式实现平滑更新的方案&#xff0c;关键技术点如下&#xff1a; Servlet 容器重新绑定端口&#xff1a;Spring Boot 使用 ServletWebServerFactory 动态设置新端口。零停…

linux(CentOS8)安装PostgreSQL16详解

文章目录 1 下载安装包2 安装3 修改远程连接4 开放端口 1 下载安装包 官网下载地址&#xff1a;https://www.postgresql.org/download/ 选择对应版本 2 安装 #yum源 yum -y install wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redha…

spring学习(spring-bean实例化(无参构造与有参构造方法实现)详解)

目录 一、spring容器之bean的实例化。 &#xff08;1&#xff09;"bean"基本概念。 &#xff08;2&#xff09;spring-bean实例化的几种方式。 二、spring容器使用"构造方法"的方式实例化bean。 &#xff08;1&#xff09;无参构造方法实例化bean。 &#…

ElasticSearch学习5

基本Rest命令说明&#xff1a; method url地址 描述 PUT&#xff08;创建,修改&#xff09; localhost:9200/索引名称/类型名称/文档id 创建文档&#xff08;指定文档id&#xff09; POST&#xff08;创建&#xff09; localhost:9200/索引名称/类型名称 创建文档&…

分享本周所学——三维重建算法3D Gaussian Splatting(3DGS)

大家好&#xff0c;欢迎来到《分享本周所学》第十二期。本人是一名人工智能初学者&#xff0c;刚刚读完大二。前几天自学了一下3D Gaussian Splatting&#xff08;3DGS&#xff09;&#xff0c;觉得非常有意思。写这篇文章主要是因为网上大部分关于3DGS的文章都比较晦涩&#x…

【中工开发者】鸿蒙商城app

这学期我学习了鸿蒙&#xff0c;想用鸿蒙做一个鸿蒙商城app&#xff0c;来展示一下。 项目环境搭建&#xff1a; 1.开发环境&#xff1a;DevEco Studio2.开发语言&#xff1a;ArkTS3.运行环境&#xff1a;Harmony NEXT base1 软件要求&#xff1a; DevEco Studio 5.0.0 Rel…

【Qt】按钮类控件:QPushButton、QRadioButton、QCheckBox、ToolButton

目录 QPushButton 例子&#xff1a; QRadioButton 例子&#xff1a; 按钮的常见信号函数 单选按钮分组 例子&#xff1a; QCheckButton 例子&#xff1a; QToolButton QWidget的常见属性及其功能对于它的派生类控件都是有效的(也就是Qt中的各种控件)&#xff0c;包括…

UI框架DevExpress XAF v24.2新功能预览 - .NET Core / .NET增强

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在上文中…

ArrayList源码分析、扩容机制面试题,数组和List的相互转换,ArrayList与LinkedList的区别

目录 1.java集合框架体系 2. 前置知识-数组 2.1 数组 2.1.1 定义&#xff1a; 2.1.2 数组如何获取其他元素的地址值&#xff1f;&#xff08;寻址公式&#xff09; 2.1.3 为什么数组索引从0开始呢&#xff1f;从1开始不行吗&#xff1f; 3. ArrayList 3.1 ArrayList和和…

阿里云服务器手动部署LNMP环境【官方文档注意事项】

这是官方文档 注意&#xff1a; 要添加安全组&#xff0c;端口为80。否则最后用浏览器访问公网IP没有结果。 Mysql密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符&#xff0c;并且密码总长度至少为 8 个字符。sudo mysqladmin -uroot -p<ol…

Invalid default value for ‘gender‘,mysql在idea中字符集设置,default

默认值default创建错误的&#xff0c;设置数据库字符集 我的错误&#xff1a;Invalid default value for ‘gender’ -- 修改数据库字符集 alter database db01 charset utf8;

240004基于Jamva+ssm+maven+mysql的房屋租赁系统的设计与实现

基于ssmmavenmysql的房屋租赁系统的设计与实现 1.项目描述2.运行环境3.项目截图4.源码获取 1.项目描述 该项目在原有的基础上进行了优化&#xff0c;包括新增了注册功能&#xff0c;房屋模糊查询功能&#xff0c;管理员和用户信息管理等功能&#xff0c;以及对网站界面进行了优…

使用Navicat从SQL Server导入表数据到MySQL

在表上右键选择导入向导 选择ODBC 1.内输入ip即可&#xff0c;不需要端口号 一定要勾选允许保存密码 选择需要的表&#xff0c;下一步 根据需求&#xff0c;可修改表名、是否新建表 根据需求修改不同表的字段类型和长度 按需选择导入方式

STM32F407+LAN8720A +LWIP +FreeRTOS ping通

使用STM32CUBEIDE自带的 LWIP和FreeROTS 版本说明STM32CUBEIDE 操作如下1. 配置RCC/SYS2. 配置ETH/USART3. 配置EHT_RESET/LED4. 配置FreeRTOS5. 配置LWIP6. 配置时钟7. 生成单独的源文件和头文件,并生成代码8. printf重定义9. ethernetif.c添加lan8720a复位10. MY_LWIP_Init …