在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux系統(tǒng)中圖形顯示方案

Linux愛好者 ? 來源:Linux與SoC ? 作者:spy_os ? 2021-09-14 10:43 ? 次閱讀
Linux系統(tǒng)中圖形顯示方案 1

FBDEV

Framebuffer device

社區(qū)參與度不高,基本轉(zhuǎn)移到了DRM。

DRM/KMS

Direct Rendering Manager / KernelMode Setting

主流的圖形顯示方法,社區(qū)參與度高,支持圖形系統(tǒng)精細(xì)化操作,基本形成了一套圖顯系統(tǒng)開發(fā)的生態(tài)標(biāo)準(zhǔn)。

V4L2

Video For Linux 2

主要用于視頻捕獲的應(yīng)用場(chǎng)景,并且需要特定輸出設(shè)備,對(duì)復(fù)雜圖顯控制器的支持不佳

DRM系統(tǒng)組成 2 kernel層面的DRM系統(tǒng)包含兩大部分,一部分是圖顯設(shè)備的DRM抽象,另外一部分是圖顯設(shè)備的顯存控制。
涵蓋了linux系統(tǒng)中DRM系統(tǒng)組成,kernel為用戶層提供標(biāo)準(zhǔn)的DRM接口,在用戶層依據(jù)DRM庫(kù)構(gòu)建各種圖顯協(xié)議,圖顯應(yīng)用層基于這些中間件完成應(yīng)用程序的開發(fā)。

##顯存Framebuffer

申請(qǐng)的一塊用于存儲(chǔ)顯示數(shù)據(jù)的內(nèi)存區(qū)域,主要包括:
1)內(nèi)存區(qū)域大小范圍
2)內(nèi)存中待顯示數(shù)據(jù)的幀格式
3)內(nèi)存中有效的區(qū)域,該部分是待顯示數(shù)據(jù)


其實(shí)現(xiàn)方法主要有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

顯存區(qū)域定義

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

幀格式定義

支持的幀格式以FOURCC格式來呈現(xiàn),其定義形式如下:
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')

創(chuàng)建FRAME BUFFER

創(chuàng)建成功可在dev下看見fb設(shè)備

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


##CRTC

CRT Controller, 陰極射線管控制,對(duì)顯示buffer進(jìn)行掃描,并產(chǎn)生時(shí)序信號(hào)

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負(fù)責(zé)將CRTC輸出的timing時(shí)序轉(zhuǎn)換成外部設(shè)備所需要的信號(hào)的模塊,如HDMI轉(zhuǎn)換器CONNECTOR 連接物理顯示設(shè)備的連接器,如HDMI、DisplayPort、DSI總線,通常和Encoder驅(qū)動(dòng)綁定在一起。

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注冊(cè)

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

component組件系統(tǒng) 3kernel中的component框架是為了subsystem能夠按照一定的順序初始化設(shè)備而提出的架構(gòu)。subsystem中由較多設(shè)備模塊組成,而內(nèi)核加載每個(gè)模塊時(shí)間不定。則需要component框架來保證需最后初始化的設(shè)備加載前,所需設(shè)備全部加載完畢。在component中,包含兩個(gè)基本概念,master和component。

master是設(shè)備樹中的“超級(jí)設(shè)備(superdevice)”,負(fù)責(zé)管理該超級(jí)設(shè)備下的普通設(shè)備。component是由master管理的普通設(shè)備,要先初始化。

#初始化分為兩部分

master即超級(jí)設(shè)備,執(zhí)行probe使用component_master_add_with_match函數(shù)注冊(cè)自己到component框架中。

component即普通設(shè)備,執(zhí)行probe使用component_add函數(shù)注冊(cè)自己到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}

##設(shè)備樹定義

圖顯系統(tǒng)設(shè)備樹定義要遵循component框架的定義,使得各個(gè)組件能夠組成一個(gè)完成的拓?fù)浣Y(jié)構(gòu)。
 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提供的測(cè)試程序,可以查詢顯示設(shè)備的支持狀況,進(jìn)行基本的顯示測(cè)試,以及設(shè)置顯示的模式

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

編輯:jq


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16451

    瀏覽量

    179490
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7145

    瀏覽量

    89594
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11346

    瀏覽量

    210421
  • DRM
    DRM
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    15148

原文標(biāo)題:Linux 中基于 DRM 的圖形顯示系統(tǒng)概述

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    哇!5.2秒進(jìn)入應(yīng)用界面!Linux快速啟動(dòng)方案分享,基于全志T113-i國(guó)產(chǎn)平臺(tái)

    T113-i國(guó)產(chǎn)平臺(tái)優(yōu)勢(shì) 全志T113-i處理器可運(yùn)行Linux操作系統(tǒng)、Qt炫酷圖形界面,并可支持1080P高清視頻編解碼、4G大數(shù)據(jù)傳輸、LCD/LVDS/MIPI三種顯示、原
    發(fā)表于 01-23 09:53

    盤點(diǎn)Linux系統(tǒng)的常見命令

    作為運(yùn)維同學(xué)怎能不知道Linux系統(tǒng)的lsmod、lsof、lspci、lsscsi命令呢,今天就來盤一盤她及實(shí)例。
    的頭像 發(fā)表于 12-03 09:48 ?365次閱讀
    盤點(diǎn)<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>的常見命令

    基于全志T113-i的系統(tǒng)快速啟動(dòng)顯示Qt界面、LVGL界面案例

    方案說明 創(chuàng)龍科技基于T113-i實(shí)現(xiàn)了Linux系統(tǒng)快速啟動(dòng)進(jìn)入應(yīng)用界面方案。經(jīng)測(cè)試,核心板從上電至顯示開機(jī)
    的頭像 發(fā)表于 11-27 09:18 ?624次閱讀
    基于全志T113-i的<b class='flag-5'>系統(tǒng)</b>快速啟動(dòng)<b class='flag-5'>顯示</b>Qt界面、LVGL界面案例

    如何判斷Linux系統(tǒng)的位數(shù)

    給你一個(gè) Linux 系統(tǒng),如何判斷它的位數(shù)? 我經(jīng)常用的,有這么幾種方式。 第一個(gè),使用命令: uname -m。 uname命令在 Linux 中用于顯示與操作
    的頭像 發(fā)表于 11-24 10:28 ?277次閱讀

    Linux系統(tǒng)shell命令解析

    shell是Linux系統(tǒng)的用戶界面,提供了用戶與內(nèi)核交互的一種接口,它接收用戶輸入的命令并到送到內(nèi)核去執(zhí)行,因此也被稱為Linux的命令解釋器。
    的頭像 發(fā)表于 11-05 15:40 ?379次閱讀

    如何在低成本ARM平臺(tái)部署LVGL免費(fèi)圖形庫(kù),基于全志T113-i

    系統(tǒng)創(chuàng)建圖形用戶界面(GUI),采用C語(yǔ)言編寫,具有高效性和可定制性,在各種微控制器平臺(tái)和顯示硬件上開發(fā)用戶界面時(shí)備受歡迎。LVGL具社區(qū)免費(fèi)開源、控件資源豐富、跨平臺(tái)可移植等特點(diǎn)。 社區(qū)免費(fèi)開源
    發(fā)表于 10-29 09:55

    Linux開發(fā)怎么學(xué)?

    的應(yīng)用程序和工具可供使用,如文本編輯器、圖形界面、數(shù)據(jù)庫(kù)等。學(xué)習(xí) Linux 應(yīng)用程序可以幫助你更好地應(yīng)用 Linux 系統(tǒng)。 7.學(xué)習(xí) Linu
    發(fā)表于 10-10 14:34

    Linux系統(tǒng)man命令的基本使用

    Linux系統(tǒng)提供了相對(duì)比較豐富的幫助手冊(cè)(man),man是manual的縮寫,在日常linux系統(tǒng)管理中經(jīng)常用到,今天就簡(jiǎn)單聊聊man。man 本身也提供自己的幫助手冊(cè),通過man
    的頭像 發(fā)表于 09-29 15:59 ?552次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>man命令的基本使用

    物聯(lián)網(wǎng)系統(tǒng)TFT_LCD屏主流驅(qū)動(dòng)方案詳解

    物聯(lián)網(wǎng)系統(tǒng)為什么要使用 TFT-LCD驅(qū)動(dòng) 芯片 在物聯(lián)網(wǎng)系統(tǒng)中使用TFT-LCD(薄膜晶體管液晶顯示器)驅(qū)動(dòng)芯片的原因主要可以歸納為以下幾點(diǎn): 專業(yè)性與高效性 1、專業(yè)
    的頭像 發(fā)表于 09-23 18:06 ?762次閱讀
    物聯(lián)網(wǎng)<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>TFT_LCD屏主流驅(qū)動(dòng)<b class='flag-5'>方案</b>詳解

    哇!0.8秒啟動(dòng)!Linux快速啟動(dòng)方案分享,全志T113-i國(guó)產(chǎn)平臺(tái)!

    -5.4.61、Linux-RT-5.4.61LinuxSDK:T113_Tina5.0-V1.0(Linux) T113-i快速啟動(dòng)方案說明為了滿足客戶需求,我司基于全志T113-i國(guó)產(chǎn)處理器實(shí)現(xiàn)了
    發(fā)表于 08-22 11:54

    如何更改Linux文件系統(tǒng)終端顯示顏色

    自己制作的簡(jiǎn)單 Linux 文件系統(tǒng),你會(huì)發(fā)現(xiàn)終端顯示為黑白色,很不好看
    的頭像 發(fā)表于 08-12 17:29 ?719次閱讀
    如何更改<b class='flag-5'>Linux</b>文件<b class='flag-5'>系統(tǒng)</b>終端<b class='flag-5'>顯示</b>顏色

    3568F-Linux系統(tǒng)使用手冊(cè)

    的Reserved memory合并 顯示。因此,實(shí)際的CMA內(nèi)存地址、大小信息以系統(tǒng)啟動(dòng)打印信息為準(zhǔn)。 8程序開機(jī)自啟動(dòng)說明 在Linux系統(tǒng)下,可通過init進(jìn)程方式和system
    發(fā)表于 07-25 15:45

    微軟將優(yōu)化Windows Subsystem for Linux并加入圖形用戶界面設(shè)置

    微軟宣布提升Windows Subsystem for Linux(WSL)性能,推出全新設(shè)置應(yīng)用提供圖形化配置環(huán)境。
    的頭像 發(fā)表于 05-31 11:26 ?601次閱讀

    介紹一種嵌入式Linux的錄音降噪方案

    降噪不僅只能從硬件入手,本文為您介紹一種嵌入式Linux的錄音降噪方案。該方案完全依靠軟件實(shí)現(xiàn),最大程度上降低投入。
    的頭像 發(fā)表于 05-21 11:52 ?623次閱讀

    3562-Linux系統(tǒng)啟動(dòng)卡制作及系統(tǒng)固化

    至 eMMC 的方 法。 使用瑞芯微創(chuàng)建升級(jí)磁盤工具 SDDiskTool_v1.74 可將 Linux 系統(tǒng)鏡像通過讀卡器固化 至 Micro SD 卡,將 Micro SD 卡制作成“SD
    的頭像 發(fā)表于 03-05 15:58 ?359次閱讀
    3562-<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>啟動(dòng)卡制作及<b class='flag-5'>系統(tǒng)</b>固化
    主站蜘蛛池模板: 国产精品夜色7777青苹果 | 高清欧美色欧美综合网站 | 色黄网站成年女人色毛片 | 五月天婷婷社区 | 亚洲一区二区福利视频 | 人人爽天天爽夜夜爽qc | 全午夜免费一级毛片 | 欧美激情综合亚洲五月蜜桃 | 女女同免费播放毛片 | 亚洲精品影视 | aaaaaa精品视频在线观看 | 五月天丁香婷 | 亚洲不卡视频在线 | 五月天婷婷色图 | 高清一区二区三区四区五区 | 日本不卡视频在线观看 | 美女网站色黄 | 奇米影视7777久久精品 | 四虎永久免费观看 | 天堂资源在线官网 | 成人免费视频一区 | 亚洲黄色天堂 | 免费一级特黄特色大片在线观看看 | 色综合天天综合网看在线影院 | 欧美巨波霸乳影院67194 | 日日操夜夜操天天操 | 欧美18xxoovideos | 欧美午夜视频 | 美女全黄网站免费观看 | 国产精品三级a三级三级午夜 | 四虎在线永久免费视频网站 | 噜噜噜噜私人影院 | 天天操视频 夜夜 | 色综合天天综合网国产人 | 天堂8中文在线bt | 青楼社区51在线视频视频 | 拍拍拍无挡视频免费全程1000 | 在线aa| 婷婷国产在线 | 天天色天天色天天色 | 色黄在线观看 |