国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    17791

    瀏覽量

    193177
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94771
  • Linux
    +關注

    關注

    88

    文章

    11760

    瀏覽量

    219033
  • DRM
    DRM
    +關注

    關注

    0

    文章

    48

    瀏覽量

    15610

原文標題:Linux 中基于 DRM 的圖形顯示系統概述

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在Linux列出USB設備

    如何在Linux列出USB設備。 1、lsusb命令 lsusb命令是列出USB設備信息的常用命令。它會顯示設備的廠商ID、產品ID、設備速度等詳細信息。如果你的Linux
    發表于 12-24 08:19

    迅為iTOP-3568開發板?Linux驅動開發實戰:menuconfig圖形化配置實驗

    迅為iTOP-3568開發板?Linux驅動開發實戰:menuconfig圖形化配置實驗
    的頭像 發表于 11-24 15:29 ?770次閱讀
    迅為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 ?761次閱讀
    USB<b class='flag-5'>顯示</b>器<b class='flag-5'>方案</b>

    華納云服務器Linux系統電源管理與節能優化配置方法

    在云計算時代,Linux系統的電源管理優化成為提升云服務器能效的關鍵環節。本文將深入解析Linux內核的電源管理機制,從CPU調頻策略到磁盤休眠設置,提供一套完整的節能配置方案。通過調
    的頭像 發表于 08-21 15:09 ?920次閱讀

    Linux網絡性能調優方案

    在當今高并發、大流量的互聯網環境下,網絡性能往往成為系統的瓶頸。作為一名資深運維工程師,我在生產環境遇到過無數次因為TCP/IP參數配置不當導致的性能問題。今天分享一套完整的Linux網絡性能調優
    的頭像 發表于 08-06 18:01 ?1332次閱讀

    Linux系統安裝技巧與分區策略

    還記得第一次裝Linux系統時的忐忑嗎?面對fdisk命令行界面,不知道該如何下手。經歷過無數次系統重裝、數據丟失的痛苦后,我總結出了這套"零事故"的分區方案
    的頭像 發表于 08-06 17:51 ?1093次閱讀

    Linux系統性能調優方案

    關鍵要點預覽:本文將深入解析Linux系統性能瓶頸的根本原因,提供可直接落地的調優方案,讓你的系統性能提升30-50%!
    的頭像 發表于 08-06 17:49 ?878次閱讀

    Linux系統目錄結構全面剖析

    Linux文件系統采用層次化的目錄結構,這種設計遵循了Unix哲學的"一切皆文件"原則。理解Linux目錄層次架構對于系統管理員、運維工程
    的頭像 發表于 07-21 17:33 ?778次閱讀

    Linux系統中網絡配置詳解

    網絡配置是Linux系統運維的核心技能之一。正確理解和配置子網掩碼、網關等網絡參數,直接影響系統的網絡連通性和性能。本文將深入探討Linux
    的頭像 發表于 07-17 11:01 ?1199次閱讀

    Linux系統iptables與firewalld防火墻的區別

    防火墻是一種網絡安全設備,用于監控和控制網絡流量,根據預定義的安全規則來允許或阻止數據包通過。Linux系統主要有兩種防火墻解決方案:iptables和firewalld。
    的頭像 發表于 07-14 11:24 ?730次閱讀

    干貨分享 | 零基礎上手!TSMaster圖形信號表達式實操指南

    TSMaster軟件支持在圖形里面的信號表達式功能,主要用于多信號表達式運算和顯示的場景。本文將以A2L的標定變量為例,介紹如何使用圖形
    的頭像 發表于 06-06 20:03 ?887次閱讀
    干貨分享 | 零基礎上手!TSMaster<b class='flag-5'>圖形</b>信號表達式實操指南

    詳解Linux系統的服務管理

    Linux,無論何時當你安裝任何帶有服務和守護進程的包,系統默認會把這些服務的初始化及 systemd腳本添加進去,不過此時它們并沒有被啟用。
    的頭像 發表于 05-23 15:10 ?836次閱讀
    詳解<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 ?665次閱讀

    圖形顯示控制芯片RA6809可適用于哪些應用場景

    泵、呼吸機、心電監護儀、美容儀等)、電動車載控屏等。 ?功能優勢?:內建SDRAM緩存和JPEG解碼器,支持高分辨率顯示與動態圖像處理,滿足用戶對清晰度和流暢度的需求?。 ?3. 其他定制化顯示
    發表于 03-21 11:08