Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312449
  • 博文数量: 101
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 774
  • 用 户 组: 普通用户
  • 注册时间: 2018-10-15 14:13
个人简介

搭建一个和linux开发者知识共享和学习的平台

文章分类

全部博文(101)

文章存档

2024年(15)

2023年(24)

2022年(27)

2019年(8)

2018年(27)

分类: LINUX

2024-10-29 14:06:29

Linux显示系统框架DRI(Direct Rendering Infrastructure),它涉及一些不同层次的专有名词如下:

{BANNED}最佳底层,在GPU内部:

  • Framebuffer:一种底层的显示缓存,具体细分为如颜色缓存、深度缓存等多种,在这些缓存的共同作用下,{BANNED}最佳终形成在屏幕上显示的图像;

Linux内核层:

  • DRM(Direct Rendering Manager):主要负责负责数据流,即通过软件或硬件加速,生成{BANNED}最佳终目标图像,存储在Framebuffer中。

  • KMS(Kernel Mode Setting):主要负责控制流,根据显示器类型以及显示模式设置,将生成的Framebuffer数据信息送到显示端口上(VGA、HDMI等)。

  • Libdrm库:Kernel将这DRM/KMS抽象出来,封装成libdrm库供上层的Display Server使用。

中间件层:

  • OpenGL:简单理解为它是一个操作图形、图像的API规范;

  • OpenGL ES:是OpenGL的嵌入式版本,适用于在低功耗显示设备渲染高效的2D、3D 图形,当然需要GPU的驱动支持;

  • Vulkan:是另一种2D、3D操作图形、图像的API规范;

  • Mesa:是一种开源的OpenGL的库实现,OpenGL是接口规范,Mesa是具体实现;

{BANNED}最佳上层,应用程序及框架:

Display Server:一个普通的应用程序 client 通常不会直接与 KMS 进行交互,而是先和 display server(例如 X11 的 Xorg、Wayland等)进行交互, display server 负责将多个 client 的图像合成成一张图像,并将这张图像通过 Libdrm 的接口提交给内核。

树莓派GPU的软硬件资源

这部分名词很很多,先粗略介绍一遍。

一些GPU可以用于加速的内容:

  • 绘制 2D 图形(如GPU填充)

  • 绘制 3D 场景(如多边形、纹理和变换)

  • 视频压缩/解压缩(如H.264等)

  • 视频编辑和过滤(如相机镜头校正、虚拟背景等)

  • 合成(叠加和混合图层)

  • 非视频的东西,比如神经网络

树莓派GPU相关硬件部分:

  • 运行 Linux 和通用代码的 ARM CPU

  • Broadcom的VideoCore GPU,具体包括:

  • - VPU,GPU内部的一个通用处理器,用于运行GPU专用的操作系统固件

  • - 压缩/解压缩器

  • - 视频捕捉助手

  • - 3D渲染的QPU着色器单元

  • - 执行输出时间缩放和合成的硬件视频缩放器 (HVS, Hardware Video Scaler)

  • - 将HVS输出转换为视频信号的编码器

树莓派GPU相关软件部分:

  • VideoCore 固件是在 VPU 上运行的专有代码,总体管理 GPU,并包括对 OpenGL 和视频压缩/解压缩的一些支持

  • VideoCore API:

  • - EGL,用于OpenGL的标准 C API,Pi 有两种实现:① Broadcom libbrcmEGL ② Mesa libEGL

  • - DispmanX,用于控制帧缓冲区分层和合成

  • - MMAL,用于多媒体抽象层

  • - OpenMAX (OMX),用于一种用于音频/视频的标准

  • - OpenVG,用于 2D 图形的标准

Linux 内核及子系统:

  • 直接渲染管理器 (DRM) 提供对视频硬件的访问

  • - “vc4”DRM 驱动程序为 VideoCore IV 和 VI执行2D处理,并为 VideoCore IV 执行 3D

  • - “v3d”DRM 驱动程序为 VideoCore VI (RPi 4专用) 进行 3D 处理

  • 内核模式设置 (KMS) 是 DRM 的一部分,管理视频模式和输出时间合成

  • Video4Linux 2 (V4L2) 管理视频捕获以及硬件视频压缩/解压缩

  • DMA-buf 在子系统之间共享内存,例如。V4L2 和 DRM 之间

Linux 用户框架、应用层和工具

  • X windows 及其整个生态系统,包括:

  • - 直接渲染基础设施 (DRI),允许客户端共享硬件以进行直接渲染(使用 DRM、OpenGL 等)

  • - GL X 扩展 (GLX),允许客户端发送 GL 命令(间接渲染)或直接访问硬件(直接渲染)

  • Mesa,一种 OpenGL 实现

  • - “vc4”Mesa 驱动程序使用 vc4 DRM 驱动程序来支持 VideoCore IV (RPi <= 3) 上的 OpenGL 2.1

  • - “v3d”Mesa 驱动程序使用 v3d DRM 驱动程序(以及用于模式设置的 vc4)来支持 VideoCore VI (RPi 4) 上的 OpenGL 2.1 和 OpenGL ES 3.1

  • FFmpeg,一组用于音频/视频处理的工具和软件库

  • GStreamer,使用硬件和软件构建块的音频/视频管道系统

  • VLC(和 libvlc),一种流行的视频播放器

树莓派GPU的配置方式

在了解了树莓派GPU的软硬件资源之后,来看一下要让上述资源协同工作,有哪几种配置方式?及有什么优缺点。

Legacy non-GL

  • 此模式支持但已弃用。

  • 在此模式下,DRM 和 KMS 不可用。

  • V4L2内部使用MMAL提供硬件视频压缩/解压缩。

  • DispmanX、MMAL 和 OMX 均可用。

  • X服务器使用DispmanX切换模式,并直接渲染到帧缓冲区(framebuffer),没有硬件加速。

  • 内核可以制作简单非加速的帧缓冲区(framebuffer)和渲染控制台文本之外。

GL with "Fake/Firmeware KMS" (FKMS)

  • 这是一种折中的传统模式,在树莓派 OS Buster 上是默认配置模式。

  • 在此模式下,DRM 和 KMS 可用,但使用 DispmanX 进行模式设置和帧缓冲区管理(framebuffer),因此是“假”。

  • V4L2 如上包装 MMAL。

  • OpenGL 可通过“vc4”和“v3d”Mesa 驱动程序使用,这些驱动程序通过 DRM 使用 VideoCore 资源,无需专有 VPU 固件。

  • DispmanX、MMAL 和 OMX 均可用。

  • X服务器呈现为 DRM 并使用 KMS 来切换模式。

GL with Full KMS

  • 这是 在树莓派 OS Bullseye 的推荐设置和默认设置。

  • 在此模式下,DRM 和 KMS 直接管理 GPU,无需依赖专有的 VideoCore VPU 固件。

  • V4L2仍然如上包装MMAL。

  • OpenGL 可通过上述“VC4”和“V3D”Mesa 驱动程序使用。

  • DispmanX 和 OMX 不可用,因为内核已接管 GPU。omxplayer 等程序无法运行。MMAL 仍然可用。VLC使用MMAL进行硬件解压。

  • X服务器呈现为 DRM 并使用 KMS 来切换模式。

总结与配置建议

总结:

  • Fake KMS:允许VPU固件控制 DRM/KMS 渲染管道,如果想使用常规的OpenGL(其版本仅限于 2.1),FKMS 是必需的。如桌面软件(X服务器)倾向于使用 OpenGL 进行合成和像素推送,但在性能或功耗方面并不理想。

  • Full KMS:使用 Linux 内核来控制 DRM/KMS 管道,与常规的OpenGL不兼容,但使用GLES,并且可以运行更多功能。树莓派的VideoCore VI GPU 驱动可以执行 OpenGL ES 3.2,但不能执行 OpenGL 3.0。

推荐:选择“Full KMS”

  • 对于开发,目标是通用 API(OpenGL、X11、DRI/DRM/KMS、V4L2)或使用它们的库(gstreamer、ffmpeg)。在完整的 KMS 下运行,这是{BANNED}最佳面向未来的开源接口。

  • 对于 3D,请使用 OpenGL 并首选 Mesa 的 vc4/v3d 驱动程序(而不是 Broadcom EGL 层)。

  • 对于桌面视频播放,更喜欢 VLC而不是 omxplayer 或其他播放器。

选择方式:在/boot/config.txt中dtoverlay=vc4-kms-v3d

阅读(187) | 评论(0) | 转发(0) |
0

上一篇:Linux V4L2 async框架

下一篇:linux gpiolib框架

给主人留下些什么吧!~~