ZHCAAX6 May 2021 DRA710 , DRA712 , DRA714 , DRA716 , DRA718 , DRA722 , DRA724 , DRA725 , DRA726 , DRA745 , DRA746 , DRA74P , DRA750 , DRA756 , DRA75P , DRA76P , DRA77P , DRA780 , DRA781 , DRA782 , DRA783 , DRA785 , DRA786 , DRA787 , DRA788 , DRA790 , DRA791 , DRA793 , DRA797 , TDA2EG-17 , TDA2HF , TDA2HG , TDA2HV , TDA2LF , TDA2P-ABZ , TDA2P-ACD , TDA2SA , TDA2SG , TDA2SX
Linuxis a reg TM ofLinus Torvalds in the U.S. and other countries.
Other TMs
DRM/KMS 框架专用于管理显示、图形和合成子系统,如图 1-1 所示。
借助其他 Linux 多媒体框架和应用程序,通常可使用 DRM/KMS 框架执行以下操作:
DRM 器件:负责聚合其他组件。向用户空间显示的器件(处理所有用户空间请求。)
DRM 帧缓冲区:此为标准对象,存储有关要显示的内容的信息。
CRTC:CRTC 表示 CRT 控制器,它将帧缓冲区内容扫描至一个或多个显示器,并更新帧缓冲区。
层面:一个层面就是一个图像层。
编码器:负责将帧转换为适当的格式,以便通过连接器传输。
连接器:表示显示器连接器(HDMI、DP、VGA、DVI 等),将信号传输至显示器。检测显示器的连接/拆卸。显示显示器支持的模式。
在 vision SDK Linux 中,DSS 由在 IPU 上运行的软件控制。因此,需要禁用 omapdrm,并且基于 Linux 的 DRM 应用程序会停止正常运行,因为没有能够进行模式设置(显示内容)的 DRM 器件。引入了一个虚拟 DRM 框架来创建多个能够进行模式设置的 DRM 器件,并将它们显示在用户空间中。
使用 vDRM 框架,一方面,vDRM 支持 Linux 显示。另一方面,M4 可以控制 DSS 硬件。因此,当 M4 启动时,它可以按 M4 显示内容。
表 1-1 显示 PSDKLA 和 VISION SDK 的 DRM 比较。
类型 | PSDKLA | VISION SDK |
---|---|---|
DRM | DRM | 虚拟 DRM |
DSS | 由 A15 控制 (Linux) | 由 M4 控制 (RTOS) |
Omapdrm 支持 | 是 | 否 |
Fb0 | 是 | 否 |
通常,IVI 系统可能包括三个部分:HMI 层面、标识层面和 RVC 视频层面。仪表组系统可能包括两个部分:HMI 层面和动画层面。
如图 1-2 所示,标准框架(即直接渲染管理器 (DRM))驻留在内核空间,因此,用户空间程序必须使用内核系统调用来请求其服务。创建了一个名为 libdrm 的库,以方便用户空间程序与 DRM 子系统进行交互。该库只是一个包装器,它为 DRM API 的每个 ioctl 提供一个用 C 编写的函数,并提供常量、结构和其他辅助元素。
在此框架中,需要在 Linux 中禁用 omapdrm,因为 DSS 由在 IPU 上运行的软件控制。基于 DRM 的 Linux 应用程序将无法工作,因为没有能够进行模式设置(显示内容)的 DRM 器件。
虚拟 DRM 可创建多个能够进行模式设置的 DRM 器件,并将它们显示在用户空间中。每个 DRM 器件可包含多个 DRM 连接器,每个连接器能够配置为将预定义的分辨率和帧速率公开。每个 DRM 连接器都会在内部创建一个 DRM 编码器、一个 DRM 层面(主要)和一个 DRM CRTC,这些是 DRM API 正常工作所必需的。
此外,每个 DRM 器件创建一个 vdrm 控制器器件,Linux 应用程序可打开该器件以读取 DRM 应用程序提交的缓冲区。Vision SDK 可使用 dispDistSrcLink 的多个实例运行链(用例),其中每个链接读取一个 vdrm 控制器器件,以获取 DRM 应用程序提交给虚拟 DRM 器件中特定 CRTC 的缓冲区。
Linux 应用程序可以继续调用 DRM API 以在 DRM CRTC 上显示 DRM 帧缓冲区,即使 vision SDK 应用程序/链未运行,或者运行的链不包含与 CRTC 关联的 dispDistSrcLink。
从 VISION SDK 0304 开始,SDK 中提供了 vDRM 框架支持。
若要使 Linux 显示内容,需要在 M4 上运行 dispDistSrcLink 和 DisplayLink,以便 Linux 应用程序缓冲区可以传输至 M4 进行显示。使用以下步骤运行 Linux 应用程序:
SDK 还提供了快速启动方法来运行用例。使用以下步骤运行此用例。
由于 IVI/cluster/ADAS,项目对启动时间有特定的要求。与标准 DRM 显示框架不同。vDRM 框架可以调整多核架构并改善启动时性能。
对于 PSDKLA + VISION-SDK 架构,我们通常使用早期启动晚期附加的模式。图 3-1 显示了启动流程。
某些基于 omapdrm 的应用程序不能与虚拟 DRM 一同使用。因此,我们需要调整 vDRM 要求。以下是一些示例:Gstreamer/viddec3test/modetest/kmscube。可以从附件下载这些二进制文件。
对于 gstreamer,它不能与预构建的 gstreamer drm 分配器一起工作。它需要 Gstreamer OmapDRM 分配器支持。我们提供了一个补丁来支持此功能。
使用以下步骤运行解码功能:
PROCESSOR_SDK_VISION_03_05_00_00/vision_sdk/apps/configs/tda2xx_evm_linux_all/cfg.mk
# Both IVAHD_INCLUDE & IPUMM_INCLUDE should not be set to "yes"
# Only one should be enabled to avoid IVA-HD resource conflict
IPUMM_INCLUDE=yes
IVAHD_INCLUDE=no
root@dra7xx-evm# cd /opt/vision_sdk
root@dra7xx-evm# ./vision_sdk_load.sh
root@dra7xx-evm# ./apps.out
# press 1 to select : single camera usecases
# press 8 to select : dispDistSrc -> display usecase
root@dra7xx-evm# gst-launch-1.0 playbin uri=file:///home/root/test.mp4 video-sink=waylandsink
如果构建过程中包含 IPUMM,则可在 ssh 终端上运行以下任何一个命令来验证多媒体。
root@dra7xx-evm# viddec3test -w 640x480 --fps 24 /usr/share/ti/video/TearOfSteel-Short-1920x800.mov
对于 vDRM 框架,您可以运行以下操作以查看每个卡的 DRM 相关信息:
root@dra7xx-evm# modetest -n /dev/dri/card1
root@dra7xx-evm# modetest -n /dev/dri/card1
root@dra7xx-evm# modetest -n /dev/dri/card2
kmscube 是一个小型演示程序,介绍了如何在没有像 X11、wayland 或类似合成器的情况下,使用 DRM/KMS(内核模式设置)、GBM(图形缓冲区管理器)和 EGL 来驱动裸机图形,以便使用 OpenGL 或 OpenGL ES 呈现内容。
对于 vDRM 框架,请使用以下命令运行 kmscube。如果要运行 kmscube,请确保 weston 已停止(默认情况下,weston 在 /dev/dri/card0 上运行)。
root@dra7xx-evm# kmscube -d /dev/dri/card0
默认情况下,Weston 在 /dev/dri/card0 上运行。用户使用 vDRM 显示用户应用的示例。
请检查文件:/etc/powervr.ini。
[default]
#WindowSystem=libpvrws_WAYLAND.so
[weston]
DbmDriverName=vdrm
[kmscube]
DbmDriverName=vdrm
GbmNumBuffers=5
确保在此文件中配置 Weston。然后,您可以检查 Weston 状态并运行 Weston 应用程序。
配置基于 EGL 的应用程序,请参阅文件:/etc/powervr.ini。
[default]
#WindowSystem=libpvrws_WAYLAND.so
[weston]
DbmDriverName=vdrm
[kmscube]
DbmDriverName=vdrm
GbmNumBuffers=5
如果要添加用户应用,请添加应用配置,如下所示:
[user_app]
DbmDriverName=vdrm
GbmNumBuffers=5
除了配置之外,还需要在应用中配置器件名称。提供了一个补丁 (0001-add-flag-for-device-node-name.patch) 以供您参考。
对于那些通常使用不同管道通道的用例,您希望显示 Linux 和 VISION-SDK 应用程序。您可以在这些用例中更改 Alpha 和 Zorder 设置。
双显示器演示需要两个屏幕来显示不同的内容:一个屏幕用于仪表组,另一个屏幕用于环视。
附件提供了一个双显示器演示用例。
从 Vision-SDK 3.4 开始,文件系统构建过程发生了一些变动,以支持更小的文件系统。尽管作为 Processor-SDK Linux Automotive 的一部分提供的文件系统约为 700MB,但作为 Vision SDK 发行版一部分的文件系统约为 60MB。移除传统 ADAS 用例不需要的组件可减小空间大小。
按照以下说明重新构建 Vision SDK 文件系统: