0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux系统中图形显示方案

Linux爱好者 来源:Linux与SoC 作者:spy_os 2021-09-14 10:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux系统中图形显示方案 1

FBDEV

Framebuffer device

社区参与度不高,基本转移到了DRM。

DRM/KMS

Direct Rendering Manager / KernelMode Setting

主流的图形显示方法,社区参与度高,支持图形系统精细化操作,基本形成了一套图显系统开发的生态标准。

V4L2

Video For Linux 2

主要用于视频捕获的应用场景,并且需要特定输出设备,对复杂图显控制器的支持不佳

DRM系统组成 2 kernel层面的DRM系统包含两大部分,一部分是图显设备的DRM抽象,另外一部分是图显设备的显存控制。
涵盖了linux系统中DRM系统组成,kernel为用户层提供标准的DRM接口,在用户层依据DRM库构建各种图显协议,图显应用层基于这些中间件完成应用程序的开发。

##显存Framebuffer

申请的一块用于存储显示数据的内存区域,主要包括:
1)内存区域大小范围
2)内存中待显示数据的帧格式
3)内存中有效的区域,该部分是待显示数据


其实现方法主要有3种:
1)基于CMA的
drivers/gpu/drm/drm_fb_cma_helper.c
2)基于Scatter Gather
drivers/gpu/drm/tegra/
3)基于IOMMU
drivers/gpu/drm/exynos/exynos_drm_iommu.c

显存区域定义

c6fd1bec-1468-11ec-8fb8-12bb97331649.png

帧格式定义

支持的帧格式以FOURCC格式来呈现,其定义形式如下:
1/*24bppRGB*/
2#defineDRM_FORMAT_RGB888fourcc_code('R','G','2','4')
3#defineDRM_FORMAT_BGR888fourcc_code('B','G','2','4')
4
5/*32bppRGB*/
6#defineDRM_FORMAT_XRGB8888fourcc_code('X','R','2','4')
7#defineDRM_FORMAT_XBGR8888fourcc_code('X','B','2','4')
8#defineDRM_FORMAT_RGBX8888fourcc_code('R','X','2','4')
9#defineDRM_FORMAT_BGRX8888fourcc_code('B','X','2','4')

创建FRAME BUFFER

创建成功可在dev下看见fb设备

c709dc24-1468-11ec-8fb8-12bb97331649.png


##CRTC

CRT Controller, 阴极射线管控制,对显示buffer进行扫描,并产生时序信号

CRTC funcs

 1staticconststructdrm_crtc_funcsade_crtc_funcs={
 2.destroy=drm_crtc_cleanup,
 3.set_config=drm_atomic_helper_set_config,
 4.page_flip=drm_atomic_helper_page_flip,
 5.reset=drm_atomic_helper_crtc_reset,
 6    .atomic_duplicate_state=drm_atomic_helper_crtc_duplicate_state,
 7.atomic_destroy_state=drm_atomic_helper_crtc_destroy_state,
 8.enable_vblank=ade_crtc_enable_vblank,
 9.disable_vblank=ade_crtc_disable_vblank,
10};

CRTC helper funcs

1staticconststructdrm_crtc_helper_funcsade_crtc_helper_funcs={
2.mode_fixup=ade_crtc_mode_fixup,
3.mode_set_nofb=ade_crtc_mode_set_nofb,
4.atomic_begin=ade_crtc_atomic_begin,
5.atomic_flush=ade_crtc_atomic_flush,
6.atomic_enable=ade_crtc_atomic_enable,
7.atomic_disable=ade_crtc_atomic_disable,
8};

##PLANE

c7530322-1468-11ec-8fb8-12bb97331649.png

PLANE funcs

1staticstructdrm_plane_funcsade_plane_funcs={
2.update_plane=drm_atomic_helper_update_plane,
3.disable_plane=drm_atomic_helper_disable_plane,
4.destroy=drm_plane_cleanup,
5.reset=drm_atomic_helper_plane_reset,
6.atomic_duplicate_state=drm_atomic_helper_plane_duplicate_state,
7.atomic_destroy_state=drm_atomic_helper_plane_destroy_state,
8};

PLANE helper funcs

1staticconststructdrm_plane_helper_funcsade_plane_helper_funcs={
2.atomic_check=ade_plane_atomic_check,
3.atomic_update=ade_plane_atomic_update,
4.atomic_disable=ade_plane_atomic_disable,
5};

##ENCODER/CONNECTOR

ENCODER负责将CRTC输出的timing时序转换成外部设备所需要的信号的模块,如HDMI转换器CONNECTOR 连接物理显示设备的连接器,如HDMI、DisplayPort、DSI总线,通常和Encoder驱动绑定在一起。

c762328e-1468-11ec-8fb8-12bb97331649.png

ENCODER/helper funcs

 1staticconststructdrm_encoder_helper_funcsdw_encoder_helper_funcs={
 2.atomic_check=dsi_encoder_atomic_check,
 3.mode_valid=dsi_encoder_mode_valid,
 4.mode_set=dsi_encoder_mode_set,
 5.enable=dsi_encoder_enable,
 6.disable=dsi_encoder_disable
 7};
 8
 9staticconststructdrm_encoder_funcsdw_encoder_funcs={
10.destroy=drm_encoder_cleanup,
11};

CONNECTOR/helper funcs

 1staticconststructdrm_connector_helper_funcs
 2panel_bridge_connector_helper_funcs={
 3.get_modes=panel_bridge_connector_get_modes,
 4};
 5
 6staticconststructdrm_connector_funcspanel_bridge_connector_funcs={
 7.reset=drm_atomic_helper_connector_reset,
 8.fill_modes=drm_helper_probe_single_connector_modes,
 9.destroy=drm_connector_cleanup,
10.atomic_duplicate_state=drm_atomic_helper_connector_duplicate_state,
11.atomic_destroy_state=drm_atomic_helper_connector_destroy_state,
12};

##ioctl注册

c776b2c2-1468-11ec-8fb8-12bb97331649.png

component组件系统 3kernel中的component框架是为了subsystem能够按照一定的顺序初始化设备而提出的架构。subsystem中由较多设备模块组成,而内核加载每个模块时间不定。则需要component框架来保证需最后初始化的设备加载前,所需设备全部加载完毕。在component中,包含两个基本概念,master和component。

master是设备树中的“超级设备(superdevice)”,负责管理该超级设备下的普通设备。component是由master管理的普通设备,要先初始化。

#初始化分为两部分

master即超级设备,执行probe使用component_master_add_with_match函数注册自己到component框架中。

component即普通设备,执行probe使用component_add函数注册自己到component框架中。

##Master初始化

 1staticintkirin_drm_platform_probe(structplatform_device*pdev)
 2{
 3structdevice*dev=&pdev->dev;
 4structdevice_node*np=dev->of_node;
 5structcomponent_match*match=NULL;
 6structdevice_node*remote;
 7
 8remote=of_graph_get_remote_node(np,0,0);
 9if(!remote)
10return-ENODEV;
11
12drm_of_component_match_add(dev,&match,compare_of,remote);
13of_node_put(remote);
14
15returncomponent_master_add_with_match(dev,&kirin_drm_ops,match);
16}

##Component初始化

 1staticintdsi_probe(structplatform_device*pdev)
 2{
 3structdsi_data*data;
 4structdw_dsi*dsi;
 5structdsi_hw_ctx*ctx;
 6intret;
 7
 8data=devm_kzalloc(&pdev->dev,sizeof(*data),GFP_KERNEL);
 9if(!data){
10DRM_ERROR("failedtoallocatedsidata.
");
11return-ENOMEM;
12}
13dsi=&data->dsi;
14ctx=&data->ctx;
15dsi->ctx=ctx;
16
17ret=dsi_parse_dt(pdev,dsi);
18if(ret)
19returnret;
20
21platform_set_drvdata(pdev,data);
22
23returncomponent_add(&pdev->dev,&dsi_ops);
24}

##设备树定义

图显系统设备树定义要遵循component框架的定义,使得各个组件能够组成一个完成的拓扑结构。
 1ade:ade@f4100000{
 2compatible="hisilicon,hi6220-ade";
 3reg=<0x00xf41000000x00x7800>;
 4reg-names="ade_base";
 5hisilicon,noc-syscon=<&medianoc_ade>;
 6resets=<&media_ctrl MEDIA_ADE>;
 7interrupts=<01154>;/*ldiinterrupt*/
 8
 9clocks=<&media_ctrl HI6220_ADE_CORE>,
10<&media_ctrl HI6220_CODEC_JPEG>,
11<&media_ctrl HI6220_ADE_PIX_SRC>;
12/*clockname*/
13clock-names="clk_ade_core",
14"clk_codec_jpeg",
15"clk_ade_pix";
16
17assigned-clocks=<&media_ctrl HI6220_ADE_CORE>,
18<&media_ctrl HI6220_CODEC_JPEG>;
19assigned-clock-rates=<360000000>,<288000000>;
20dma-coherent;
21status="disabled";
22
23port{
24ade_out:endpoint{
25remote-endpoint=<&dsi_in>;
26};
27};
28};
29
30dsi:dsi@f4107800{
31compatible="hisilicon,hi6220-dsi";
32reg=<0x00xf41078000x00x100>;
33clocks=<&media_ctrl  HI6220_DSI_PCLK>;
34clock-names="pclk";
35status="disabled";
36
37ports{
38#address-cells=<1>;
39#size-cells=<0>;
40
41/*0forinputport*/
42port@0{
43reg=<0>;
44dsi_in:endpoint{
45remote-endpoint=<&ade_out>;
46};
47};
48};
49};
modetest 4是由libdrm提供的测试程序,可以查询显示设备的支持状况,进行基本的显示测试,以及设置显示的模式

c78eeb76-1468-11ec-8fb8-12bb97331649.png

编辑:jq


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17649

    浏览量

    190291
  • 数据
    +关注

    关注

    8

    文章

    7315

    浏览量

    93993
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    218013
  • DRM
    DRM
    +关注

    关注

    0

    文章

    48

    浏览量

    15572

原文标题:Linux 中基于 DRM 的图形显示系统概述

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为iTOP-3568开发板 Linux驱动开发实战:menuconfig图形化配置实验

    迅为iTOP-3568开发板 Linux驱动开发实战:menuconfig图形化配置实验
    的头像 发表于 11-24 15:29 532次阅读
    迅为iTOP-3568开发板 <b class='flag-5'>Linux</b>驱动开发实战:menuconfig<b class='flag-5'>图形</b>化配置实验

    工业级-专业液晶图形显示加速器RA8889ML3N简介+显示方案选型参考表

    本帖最后由 MTCN2013 于 2025-11-17 15:23 编辑 专业液晶图形显示加速器能够有效减少对MCU运算资源的占用,对于只需普通单片机运算资源的仪器仪表来说,专业图形显示
    发表于 11-14 16:03

    USB显示方案

    (1920x1080)& 2K/全高画质 @60Hz  -支持系统: PART02 SMI768优势        慧荣科技图形显示芯片和解决方案针对国产CPU进行了适配,包括中科龙芯
    的头像 发表于 08-29 10:46 537次阅读
    USB<b class='flag-5'>显示</b>器<b class='flag-5'>方案</b>

    华纳云服务器Linux系统电源管理与节能优化配置方法

    在云计算时代,Linux系统的电源管理优化成为提升云服务器能效的关键环节。本文将深入解析Linux内核的电源管理机制,从CPU调频策略到磁盘休眠设置,提供一套完整的节能配置方案。通过调
    的头像 发表于 08-21 15:09 600次阅读

    Linux网络性能调优方案

    在当今高并发、大流量的互联网环境下,网络性能往往成为系统的瓶颈。作为一名资深运维工程师,我在生产环境遇到过无数次因为TCP/IP参数配置不当导致的性能问题。今天分享一套完整的Linux网络性能调优
    的头像 发表于 08-06 18:01 965次阅读

    Linux系统安装技巧与分区策略

    还记得第一次装Linux系统时的忐忑吗?面对fdisk命令行界面,不知道该如何下手。经历过无数次系统重装、数据丢失的痛苦后,我总结出了这套"零事故"的分区方案
    的头像 发表于 08-06 17:51 815次阅读

    Linux系统性能调优方案

    关键要点预览:本文将深入解析Linux系统性能瓶颈的根本原因,提供可直接落地的调优方案,让你的系统性能提升30-50%!
    的头像 发表于 08-06 17:49 596次阅读

    Linux系统目录结构全面剖析

    Linux文件系统采用层次化的目录结构,这种设计遵循了Unix哲学的"一切皆文件"原则。理解Linux目录层次架构对于系统管理员、运维工程
    的头像 发表于 07-21 17:33 600次阅读

    Linux系统中网络配置详解

    网络配置是Linux系统运维的核心技能之一。正确理解和配置子网掩码、网关等网络参数,直接影响系统的网络连通性和性能。本文将深入探讨Linux
    的头像 发表于 07-17 11:01 880次阅读

    Linux系统iptables与firewalld防火墙的区别

    防火墙是一种网络安全设备,用于监控和控制网络流量,根据预定义的安全规则来允许或阻止数据包通过。Linux系统主要有两种防火墙解决方案:iptables和firewalld。
    的头像 发表于 07-14 11:24 559次阅读

    详解Linux系统的服务管理

    Linux,无论何时当你安装任何带有服务和守护进程的包,系统默认会把这些服务的初始化及 systemd脚本添加进去,不过此时它们并没有被启用。
    的头像 发表于 05-23 15:10 628次阅读
    详解<b class='flag-5'>Linux</b><b class='flag-5'>系统</b><b class='flag-5'>中</b>的服务管理

    Linux系统管理的核心概念

    在前一篇文章,我们深入探讨了Linux的文件操作命令,如cp、mv、rm,以及文本处理命令grep、wc和管道符。本文将继续深入Linux系统
    的头像 发表于 05-15 17:05 496次阅读

    图形显示控制芯片RA6809可适用于哪些应用场景

    泵、呼吸机、心电监护仪、美容仪等)、电动车载控屏等。 ‌功能优势‌:内建SDRAM缓存和JPEG解码器,支持高分辨率显示与动态图像处理,满足用户对清晰度和流畅度的需求‌。 ‌3. 其他定制化显示
    发表于 03-21 11:08

    哇!5.2秒进入应用界面!Linux快速启动方案分享,基于全志T113-i国产平台

    T113-i国产平台优势 全志T113-i处理器可运行Linux操作系统、Qt炫酷图形界面,并可支持1080P高清视频编解码、4G大数据传输、LCD/LVDS/MIPI三种显示、原
    发表于 01-23 09:53

    速显微正式发布针对图形显示场景定义的多功能MPU芯片--GC9002

    ,用于存储代码和素材。同时合封 0 或 4MB HyperRAM作为内存,通过系统级 DCache 访问, DCache 容量为 16KB。 图形显示输出支持 RGB565 、(Q)SPI 和 8080 接口。摄像头输入支持 B
    的头像 发表于 01-13 11:28 1225次阅读
    速显微正式发布针对<b class='flag-5'>图形</b><b class='flag-5'>显示</b>场景定义的多功能MPU芯片--GC9002