Linux DRM Graphic 显示简单介绍
来源:互联网 发布:js触发resize事件 编辑:程序博客网 时间:2024/05/16 15:55
刚开始收到任务准备接手 DRM 工作的时候,直接先看下代码路径,
[~/github_projs/linux] (analogix_dp_upstream) 817h40m $ ls drivers/gpu/drm/amd drm_edid.c drm_panel.c msmarmada drm_edid_load.c drm_pci.c nouveauast drm_encoder_slave.c drm_plane_helper.c omapdrmati_pcigart.c drm_fb_cma_helper.c drm_platform.c panelatmel-hlcdc drm_fb_helper.c drm_prime.c qxlbochs drm_flip_work.c drm_probe_helper.c r128bridge drm_fops.c drm_rect.c radeoncirrus drm_gem.c drm_scatter.c rcar-dudrm_agpsupport.c drm_gem_cma_helper.c drm_sysfs.c rockchipdrm_atomic.c drm_global.c drm_trace.h savagedrm_atomic_helper.c drm_hashtab.c drm_trace_points.c shmobiledrm_auth.c drm_info.c drm_vma_manager.c sisdrm_bridge.c drm_internal.h drm_vm.c stidrm_bufs.c drm_ioc32.c exynos tdfxdrm_cache.c drm_ioctl.c fsl-dcu tegradrm_context.c drm_irq.c gma500 tilcdcdrm_crtc.c drm_legacy.h i2c ttmdrm_crtc_helper.c drm_lock.c i810 udldrm_crtc_internal.h drm_memory.c i915 vgemdrm_debugfs.c drm_mipi_dsi.c imx viadrm_dma.c drm_mm.c Kconfig virtiodrm_dp_helper.c drm_modes.c Makefile vmwgfxdrm_dp_mst_topology.c drm_modeset_lock.c mgadrm_drv.c drm_of.c mgag200
好特么高端,直接就放在了 “gpu/” 路径下。GPU 这东西一直很神秘,说说当时我心里飘过的关键字:"高逼格"、"ARM Mali"、"代码不开源"。心里一顿暗爽,这么高端的东西肯定很好玩。老习惯先百度几篇中文的资料来看看,结果一搜,出来的全特么是什么 "数字版权保护" 的叽叽。不开森啊、不开森 :/ 难道是这个东西太新了,git log 一看,提交时间也是 2008 年啊,看来只能说当时关键字匹配不好。
commit c0e09200dc0813972442e550a5905a132768e56cAuthor: Dave Airlie <airlied@redhat.com>Date: Thu May 29 10:09:59 2008 +1000 drm: reorganise drm tree to be more future proof. With the coming of kernel based modesetting and the memory manager stuff, the everything in one directory approach was getting very ugly and starting to be unmanageable. This restructures the drm along the lines of other kernel components. It creates a drivers/gpu/drm directory and moves the hw drivers into subdirectores. It moves the includes into an include/drm, and sets up the unifdef for the userspace headers we should be exporting. Signed-off-by: Dave Airlie <airlied@redhat.com>
当时也不会翻墙,所以就硬着头皮,直接以 HDMI 开始,代码里面加 LOG 来看看这是个什么鬼。换在现在,我就不用这种方法来坑大家了(不然写这个博客,也就太没意思了)。首先 WIKI 搜下 "Linux DRM",出来的内容不错,原文贴出来:
The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible forinterfacing with GPUs of modern video cards. DRM exposes an API that user space programscan use to send commands and data to the GPU, and perform operations such as configuringthe mode setting of the display. DRM was first developed as the kernel space component ofthe X Server's Direct Rendering Infrastructure,[1] but since then it has been used by othergraphic stack alternatives such as Wayland.
WIKI 里面概括的还是比较清楚的,如上面英文所诉,DRM 由两个部分组成:一是 Kernel 的子系统,这个子系统对硬件 GPU 操作进行了一层框架封装。二是提供了一个 libdrm 库,里面封装了一系列 API,用来进行图像显示。整体看来和在 Android 上用的 Direct Frame Buffer 差不多嘛,Android Kernel 走的是 FB 的框架,然后 Android HAL 层那边抽象出了一个 FBDEV,用来进行 FB IOCTRL 的统一管理。然而 DRM 就相当于对图形设备进行集中处理,并且多出了个漂亮的 libdrm 库。都说没图说个 JB,来来贴两张 WIKI 上面的对比图片 (左边是 Without DRM,右边是 With DRM,点击图片可以看大图)
乍眼一看,跟 GPU 没毛线关系(有点伤心),看起来更像是显示接口的开发(但是也挺有意思的)。其中的 VOP(Video Output Processor) 又指 SoC 的 LCDC 模块,主要可以完成图层渲染、色彩信号转换(YUV - > RGB)、LCDC Timing 输出,而 HDMI / eDP 则具体的显示接口。而 GEM / FBDEV 我猜是和硬件 IOMMU 内存管理相关的东西,drm_drv 则应该是 Rockchip Drm Platform 和 DRM 大框架对接的部分。
好勒,今天介绍的差不多了,以后有机会再具体介绍下具体 DRM 具体的显卡驱动怎么写,以及问问神秘的 GPU 小组,看看 DRM 和 GPU 有没有配合起来。
Thanks,
- Yakir
- Linux DRM Graphic 显示简单介绍
- Linux DRM介绍
- CSGL-C Sharp Graphic Library的简单介绍
- DRM架构介绍
- Widevine DRM介绍
- GPU/DRM介绍
- OMA DRM介绍
- Linux中的DRM
- Linux中的DRM
- linux drm 架构
- linux drm 架构
- Linux中的DRM
- linux drm框架
- linux drm 架构
- DRM
- DRM
- DRM
- DRM
- codeforces 505C C. Mr. Kitayuta, the Treasure Hunter (dp)
- HDOJ 2147 kiki's game(基础博弈)
- 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误
- scrapy生成json中文乱码解决
- 如何将文件夹里的PHP代码放到一个文件里
- Linux DRM Graphic 显示简单介绍
- socket 同步异步阻塞非阻塞
- 使用快递100网站提供接口查询物流
- Android app优化总结
- Android tp的虚拟按键处理
- EXTJS 自学1 介绍
- Android 添加和删除桌面快捷方式
- scala 基础
- Java - 类加载机制