Android 车载虚拟化底层技术-Kernel4.19-Android10(双card)技术实现
Android Display Graphics系列文章-汇总
前言
对于Linux和Android来说,只要是多屏(>=2)显示的场景都可以显示虚拟化。只是大部分场景对显示稳定性没有要求,系统异常了就都不显示了。但对于容器相关方案,或要求显示隔离的场景,是需要进行显示虚拟化的
本文主要包括部分:
一、Android10的Kernel 4.19版本
1.1 Kernel4.19 情况说明
1.2 前置条件
二、QCM 6350 plane配置
2.1 multi-card配置
2.2 移植msm-lease
三、Kernel4.19mutil-card方案实现
3.1 移植详细代码实现
一、Android10的Kernel 4.19版本
1.1 Kernel4.19 情况说明
高通提供Android 10基线代码,有的是基于Kernel 4.19的或者更新。在Kernel 4.19版本上,kernel/msm-4.19/drivers/gpu/drm/路径下msm-lease文件夹已经不存在了。
此时让系统支持multi-card就需要将上篇文章中说的msm-lease移植过来。
1.2 前置条件
移植multi-card的前置条件是,DSI屏和DP屏的驱动已经调试正常,单card(android默认)下是显示相同内容的。
此时再按照以下patch实现multi-card。
二、QCM 6*50 plane配置
2.1 multi-card配置
以QCM6*50为例,说明配置card信息;
下面配置:sde_card1的接口是DSI,并且分配了4个plane;sde_card2的接口是DP1,也分配了4个plane。实际使用场景可以根据对现实的需求分配。例如DP的显示业务比较单一,就可以只分配"plane-2"和"plane-5"。
+ 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-4","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-2","plane-3","plane-6","plane-7";
+ };
2.2 移植msm-lease
将上个平台的msm-lease文件放到kernel/msm-4.19/drivers/gpu/drm/路径下,并在内核中增加默认配置。
CONFIG_DRM=y
+CONFIG_DRM_MSM_LEASE=y
# CONFIG_DRM_MSM is not set
kernel/msm-4.19/drivers/gpu/drm/Kconfig 中增加编译项
kernel/msm-4.19/drivers/gpu/drm/Kconfig
@@ -294,6 +294,8 @@ source "drivers/gpu/drm/virtio/Kconfig"
source "drivers/gpu/drm/msm/Kconfig"
+source "drivers/gpu/drm/msm-lease/Kconfig"
source "drivers/gpu/drm/fsl-dcu/Kconfig"
kernel/msm-4.19/drivers/gpu/drm/Makefile中增加编译项
kernel/msm-4.19/drivers/gpu/drm/Makefile
obj-$(CONFIG_DRM_MSM) += msm/
+obj-$(CONFIG_DRM_MSM_LEASE) += msm-lease/
obj-$(CONFIG_DRM_TEGRA) += tegra/
移植完成,同样可以看到两个card节点,
三、Kernel4.19mutil-card方案实现
3.1 移植详细代码实现
见 Android Display Graphics系列文章-汇总