工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

NXP iMX8MP ARM 平臺多屏幕克隆顯示測試

NXP iMX8MP ARM 平臺多屏幕克隆顯示測試

1). 簡介

NXP i.MX8MP ARM SoC 支持 路 Display Controller 分別提供 DSI/HDMI/LVDS 顯示輸出,在 Yocto Linux BSP 下采用 Wayland Backend 基于 DRM subsystem 顯示驅(qū)動,前端默認(rèn)基于 Weston Compositor。因此在默認(rèn)情況下連接多個屏幕的顯示輸出是如下 Extended 模式:

1746780797538451.png 

而為了實現(xiàn)多屏幕 Clone Mode 顯示,就需要修改顯示 buffer 輸出模式如下:

1746780782864026.png 

 

本文就基于上述顯示輸出 pipeline 修改測試 i.MX8MP 多屏 Clone Mode,本文所涉及的方法和實際修改代碼均來自于如下 NXP 論壇文檔,本文僅進行測試演示示例。

https://community.nxp.com/t5/i-MX-Graphics-Knowledge-Base/Weston-clone-mode-on-i-MX8MPlus/ta-p/1791853

 

本文所演示的平臺來自于 Toradex Verdin i.MX8MP 嵌入式平臺。

 

 

2. 準(zhǔn)備

a). Verdin i.MX8MP ARM核心版配合Dahlia 載板,并連接調(diào)試串口用于測試。

b). Dahlia 載板分別由 DSI-HDMI 轉(zhuǎn)接卡和 native HDMI 兩個接口連接兩臺 HDMI 顯示器以便于進行多屏顯示測試。

 

 

3). 修改部署方法之一:通過 Yocto 編譯部署

a). 考慮可維護性和易用性,此方法為推薦方法。

 

b). 首先參考這里說明創(chuàng)建 Yocto/Openembedded 編譯框架當(dāng)前最新版本是對應(yīng)于 Toradex Yocto Linux BSP 7.x 版本的 scarthgap-7.x.y branch。

 

c). 創(chuàng)建定制化 layer meta-customer-demos ,用于添加 Weston 源碼修改相關(guān) patch 文件。

---------------------------------------

$ mkdir -p ../oe_core/layers/meta-customer-demos/conf

$ cd .../oe_core/layers/meta-customer-demos/conf

### create layer.conf file ###

# We have a conf and classes directory, append to BBPATH

BBPATH .= ":${LAYERDIR}"

 

# We have recipes-* directories, add to BBFILES

BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

 

BBFILE_COLLECTIONS += "customer-demos"

BBFILE_PATTERN_customer-demos = "^${LAYERDIR}/"

BBFILE_PRIORITY_customer-demos = "24"

 

# Let us add layer-specific bbappends which are only applied when that

# layer is included in our configuration

BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \

               for layer in BBFILE_COLLECTIONS.split())}"

# Add layer-specific bb files too

BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \

               for layer in BBFILE_COLLECTIONS.split())}"

 

LAYERDEPENDS_customer-demos = " \

    core \

    yocto \

    openembedded-layer gnome-layer multimedia-layer networking-layer \

"

LAYERSERIES_COMPAT_customer-demos = "hardknott honister kirkstone scarthgap"

---------------------------------------

 

d). 在定制化 layer meta-customer-demos 下面添加 Weston bbappend 文件,應(yīng)用相應(yīng)的 patch 文件

---------------------------------------

$ cd .../oe_core/layers/meta-customer-demos/

mkdir -p recipes-graphics/wayland/files

$ cd recipes-graphics/wayland

### cteate weston_12.0.4.imx.bbappend file ###

FILESEXTRAPATHS:prepend := "${THISDIR}/files:"

 

SRC_URI += " \

    file://0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch \

"

---------------------------------------

 

e). 將如下 0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch 補丁文件復(fù)制到 .../oe_core/layers/meta-customer-demos/recipes-graphics/wayland/files 目錄即可。原 NXP 論壇文檔 patch 是基于 Weston 12.0.3 版本,這里對于 Yocto 環(huán)境配置的 12.0.4 版本做了一定的適配修改。

https://gitee.com/simonqin09/verdin-imx8mp-display-clone-mode/blob/master/0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch

 

f). 最終完整 meta-customer-demos layer 文件結(jié)構(gòu)如下

meta-customer-demos

├── conf

│   └── layer.conf

├── recipes-graphics

│   └── wayland

│       ├── files

│       │   └── 0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch

│       └── weston_12.0.4.imx.bbappend

 

g). 修改 bblayers.conf 和 local.conf 文件

-------------------------------

### modify bblayer.conf ###

--- a/build/conf/bblayers.conf  

+++ b/build/conf/bblayers.conf  

@@ -34,7 +34,7 @@

   ${TOPDIR}/../layers/meta-openembedded/meta-python \

   ${TOPDIR}/../layers/meta-freescale-distro \

   ${TOPDIR}/../layers/meta-toradex-demos \

+  ${TOPDIR}/../layers/meta-customer-demos \

   \

   \

   ${TOPDIR}/../layers/meta-toradex-distro \

 

### add below to local.conf ###

# add Freescale EULA

ACCEPT_FSL_EULA = "1"

-------------------------------

 

h). 編譯 Yocto Linux image

-------------------------------

### compile Reference-Multimedia image ###

$ MACHINE="verdin-imx8mp" bitbake tdx-reference-multimedia-image

-------------------------------

 

i). Yocto Linux image部署

參考這里通過Toradex Easy installer將上面編譯好的image更新部署到模塊

 

 

4). 修改部署方法之二:通過直接修改 Weston 源碼編譯部署

a). 在不具備 Yocto 編譯條件下可以考慮此方法。

 

b). 參考如下下載對應(yīng)版本 Weston-imx 源碼,本文依然使用 12.0.4 版本示例,并進行修改

-------------------------------

### download weston-imx source code ###

$ git clone -b weston-imx-12.0.3 https://github.com/nxp-imx/weston-imx.git

### apply patch for clone mode ###

$ cd weston-imx

$ git apply ../../0001-weston-imx-12.0.4-LF6.6.52_2.2.0-clone-mode-8MP.patch

### modify meson.build file to adopt cross compile ###

$ vi protocol/meson.build

--- a/protocol/meson.build

+++ b/protocol/meson.build

@@ -1,5 +1,9 @@

 dep_scanner = dependency('wayland-scanner', native: false)

-prog_scanner = find_program(dep_scanner.get_variable(pkgconfig: 'wayland_scanner'))

+if meson.is_cross_build()

+       prog_scanner = find_program('wayland-scanner', dep_scanner.get_variable(pkgconfig: 'wayland_scanner'))

+else

+       prog_scanner = find_program(dep_scanner.get_variable(pkgconfig: 'wayland_scanner'))

+endif

 

 dep_wp = dependency('wayland-protocols', version: '>= 1.31',

        fallback: ['wayland-protocols', 'wayland_protocols'])

-------------------------------

 

c). 參考如下文章編譯并 export 交叉編譯 toolchain 相關(guān)環(huán)境變量

https://developer.toradex.cn/linux-bsp/os-development/build-yocto/linux-sdks

 

d). 編譯修改好的 weston-imx 源碼

-------------------------------

### export SDK environments ###

$ source/environment-setup-armv8a-tdx-linux

### compile ###

$ cd weston-imx

meson build/ --prefix=/usr -Ddoc=false -Dbackend-drm-screencast-vaapi=false -Dcolor-management-lcms=false -Dpipewire=false \

-Dbackend-x11=false -Drenderer-g2d=true -Dbackend-pipewire=false -Dbackend-rdp=false -Dbackend-vnc=false -Dxwayland=false

$ DESTDIR=./opt/weston ninja -C build/ install

-------------------------------

 

e). 將編譯好的 weston 相關(guān)庫文件部署到 Verdin i.MX8MP BSP7.x Linux

-------------------------------

### package ###

$ cd weston-imx/build/opt/weston/

$ tar cjvf ../../../weston_mod.tar.bz2 *

### copy weston_mod.tar.bz2 package to Verdin i.MX8MP Linux ###

### deploy weston binaries ###

root@verdin-imx8mp-06849028:~# tar xvf weston_mod.tar.bz2 /

-------------------------------

 

 

5). 多屏顯示測試

a). 上述修改部署完成后,不做任何修改,DSI-HDMI 和 native HDMI 屏幕默認(rèn)啟動后是 Extended 顯示模式

NXP iMX8MP ARM 平臺多屏幕克隆顯示測試6544.png 

 

b). 如下修改 /etc/xdg/weston/weston.ini 來使能 clone mode

-------------------------------

--- a/etc/xdg/weston/weston.ini

+++ b/etc/xdg/weston/weston.ini

@@ -3,6 +3,7 @@

 repaint-window=16

 idle-time=0

 #enable-overlay-view=1

+clone-mode=1

 

 [shell]

-------------------------------

 

c). 重新啟動后 DSI-HDMI 和 native HDMI 屏幕使能為 Clone 顯示模式

NXP iMX8MP ARM 平臺多屏幕克隆顯示測試6874.png 

 

d). 另外,如果是 DSI/native HDMI/native LVDS 同時顯示的話,根據(jù) NXP 論壇原文說明,可以在 /etc/xdg/weston/weston.ini 文件中增加如下配置組合,實現(xiàn)兩個屏幕 Clone mode 顯示,另外一個屏幕 Extented mode 顯示。

-------------------------------

...

clone-connector-id=

extend-connector-id=

[cloneoutput]

conn_id=

mode=

...

-------------------------------

 

// 其中屏幕 connector-id 通過如下 modetest 命令可以獲取

-------------------------------

### get encoders devices ###

# Type DSI - DSI #

# Type TMDS - native HDMI #

root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 5 Encoders                           

Encoders:

id      crtc    type    possible crtcs  possible clones

37      33      DSI     0x00000001      0x00000001

39      36      TMDS    0x00000002      0x00000002

 

Connectors:

### get display connector-ids ###

# connector-id 38 - DSI display #

# connector-id 40 - native HDMI display #

root@verdin-imx8mp-06849028:~# modetest -M imx-drm |grep -C 1 connected                          

id      encoder status          name            size (mm)       modes   encoders

38      37      connected       HDMI-A-1        0x0             12      37

  modes:

--

                value:

40      39      connected       HDMI-A-2        0x0             20      39

  modes:

-------------------------------

 

 

6). 總結(jié)

本文基于 NXP i.MX8MP 處理器平臺測試了 Yocto Linux 下多屏幕 Clone 模式顯示,不過請注意如 NXP 論壇原文說明,此方法僅限于 NXP i.MX8MP 平臺應(yīng)用。

 

參考文檔

https://community.nxp.com/t5/i-MX-Graphics-Knowledge-Base/Weston-clone-mode-on-i-MX8MPlus/ta-p/1791853

審核編輯(
王靜
)
投訴建議

提交

查看更多評論
其他資訊

查看更多

Yocto meta-toradex-security layer 創(chuàng)建獨立數(shù)據(jù)分區(qū)

NXP iMX8MP ARM 平臺 EMQX 部署測試

NXP iMX8QM 通過 SCFW 隔離 AP_M4 核資源

上手測試 Hailo:在 Toradex 模塊上加速邊緣 AI

Yocto Linux 量產(chǎn) BSP 鏡像定制