基于 NXP iMX8MP 平臺(tái)簡(jiǎn)單測(cè)試 PySide6 應(yīng)用
1). 簡(jiǎn)介
Python binding 的 Qt GUI 庫(kù)一直以來(lái)有兩種,最初是由 Riverbank Computing 公司在 2000 年初發(fā)布,基于 Qt4 版本推出的 PyQt4,后來(lái)隨著 Qt 庫(kù)版本的演進(jìn)也陸續(xù)跟進(jìn)到 PyQt5 和最新的 PyQt6,由于發(fā)布的比較早其代碼成熟以及文檔完善的也比較早,之前我們也寫過(guò) PyQt5 測(cè)試的相關(guān)文章,但是 PyQt 的 License 相對(duì)比較嚴(yán)格,是 GPLv3 和 Commercial 兩種,所以如果是商業(yè)產(chǎn)品開(kāi)發(fā)使用,不購(gòu)買 Commercial License 就要開(kāi)源整個(gè)應(yīng)用。
基于這種情況,Qt官方早至 Nokia 時(shí)期的 2009 年就發(fā)布了對(duì)應(yīng) Pyqt 的 Python binding 項(xiàng)目 PySide,采用 LGPL License ;然后到了 Qt Digia 時(shí)期的 2015年,才發(fā)布了 PySide 1.2.x 版本,對(duì)應(yīng) Qt4.8.x 版本;但是由于推出的時(shí)間比較晚等原因,Pyside 1.x 的流行度并不太好。接下來(lái) Qt 基于新發(fā)布的 Qt5 版本,啟動(dòng) Qt for Python 項(xiàng)目,最終基于 Qt 5.12.x 發(fā)布了 PySide2,由于支持 LGPL License以及 Qt 官方的支持,PySide2 逐漸成熟文檔也日趨完善,接受度也越來(lái)越高。然后針對(duì)最新的 Qt6 版本,Qt for Python 項(xiàng)目也繼續(xù)從 Qt 6.6 版本開(kāi)始發(fā)布了最新的 PySide6 版本,本文就基于 NXP i.MX8M plus處理器平臺(tái)簡(jiǎn)單測(cè)試 PySide6 的部署運(yùn)行。
本文所演示的平臺(tái)來(lái)自于 Toradex Verdin i.MX8MP 嵌入式平臺(tái)。
2. 準(zhǔn)備
a). Verdin i.MX8MP ARM核心版配合Dahlia 載板,并連接調(diào)試串口和 HDMI 顯示器用于測(cè)試。
3). Verdin i.MX8MP Yocto Linux 編譯部署
a). 首先參考這里說(shuō)明創(chuàng)建 Yocto/Openembedded 編譯框架,當(dāng)前最新版本是對(duì)應(yīng)于 Toradex Yocto Linux BSP 6.x 版本的 kirkstone-6.x.y branch。
b). 由于默認(rèn)配置只包含了 meta-qt5 layer,因此需要參考如下操作將 meta-qt5 替換為 包含 PySide6 支持在內(nèi)的 meta-qt6 layer,本文測(cè)試基于 Qt 6.6.x 版本,可以跟進(jìn)實(shí)際需求改為不低于 Qt 6.6 的版本。
-------------------------------
### 移除 meta-qt5 layer ###
$ cd
$ rm -rf meta-qt5
### add meta-qt6 layer ###
$ git clone -b 6.6.3 git://code.qt.io/yocto/meta-qt6.git
### add meta-clang layer for PySide6 ###
$ git clone -b kirkstone https://github.com/kraj/meta-clang.git
-------------------------------
c). 參考這里文章說(shuō)明增加 packagegroup-tdx-qt6.bb 和 tdx-reference-multimedia-qt6-image.bb 文件
d). 修改 bblayers.conf 和 local.conf 文件
-------------------------------
### modify bblayer.conf ###
--- a/build/conf/bblayers.conf 2023-03-30 11:13:22.946533642 +0800
+++ b/build/conf/bblayers.conf 2023-03-28 16:01:12.614534560 +0800
@@ -34,7 +34,7 @@
${TOPDIR}/../layers/meta-openembedded/meta-python \
${TOPDIR}/../layers/meta-freescale-distro \
${TOPDIR}/../layers/meta-toradex-demos \
- ${TOPDIR}/../layers/meta-qt5 \
+ ${TOPDIR}/../layers/meta-qt6 \
+ ${TOPDIR}/../layers/meta-clang \
\
\
${TOPDIR}/../layers/meta-toradex-distro \
### add below to local.conf ###
# remove x11 related
DISTRO_FEATURES:remove = " directfb x11"
# add python3/python3-pyside6 and Chinese fonts support
IMAGE_INSTALL:append = " python3 python3-pip python3-pyside6 python3-numpy ttf-droid-sans ttf-droid-sans-fallback ttf-droid-sans-mono ttf-droid-serif freetype"
# enable gstreamer for qtmultimedia if needed
PACKAGECONFIG:append:pn-qtmultimedia = " gstreamer"
# add Freescale EULA
ACCEPT_FSL_EULA = "1"
-------------------------------
e). 編譯 Yocto Linux image
-------------------------------
### compile Reference-Multimedia image ###
$ MACHINE="verdin-imx8mp" bitbake tdx-reference-multimedia-qt6-image
### compile SDK ###
$ MACHINE="verdin-imx8mp" bitbake tdx-reference-multimedia-qt6-image -c populate_sdk
-------------------------------
f). Yocto Linux image部署
參考這里通過(guò)Toradex Easy installer將上面編譯好的image更新部署到模塊
4). PySide6 Example應(yīng)用獲取和測(cè)試
a). Qt 官方網(wǎng)站這里提供了豐富的 PySide6 Examples 示例應(yīng)用,更多開(kāi)發(fā)指導(dǎo)文檔可以參考如下:
https://doc.qt.io/qtforpython-6.6/index.html
b). 分別使用一個(gè) Qt Multimedia 應(yīng)用和一個(gè) Qt Charts 應(yīng)用進(jìn)行測(cè)試
./ Qt Multimedia 應(yīng)用 – 詳細(xì)說(shuō)明請(qǐng)參考這里,可以從頁(yè)面直接下載應(yīng)用 mediaplayer 文件夾并上傳到 Verdin i.MX8MP Yocto Linux /home/root 目錄
./ Qt Charts 應(yīng)用 – 詳細(xì)說(shuō)明請(qǐng)參考這里,可以從頁(yè)面直接下載應(yīng)用 chartthemes 文件夾并上傳到 Verdin i.MX8MP Yocto Linux /home/root 目錄
c). 創(chuàng)建開(kāi)機(jī)自啟動(dòng)systemd service文件
-------------------------------
[Unit]
Description=Start a wayland application
After=weston.service
Requires=weston.service
[Service]
Type=simple
User=root
PAMName=login
Environment=WAYLAND_DISPLAY=/run/wayland-0
Environment=QT_QPA_PLATFORM=wayland-egl
### if is mediaplayer app
ExecStart=python3 /home/root/mediaplayer/mediaplayer.py
### if is chartthemes app
ExecStart=python3 /home/root/chartthemes/main.py
Restart=on-failure
RestartSec=1
[Install]
WantedBy=graphical.target
-------------------------------
d). enable service 并測(cè)試
-------------------------------
$ systemctl enable wayland-app-launch
$ reboot
-------------------------------
e). 重啟后分別啟動(dòng) mediaplayer 和 chartthemes 應(yīng)用效果如下
// 注意下如果要使用 mediaplayer 播放視頻文件,由于 QtMultimedia 6.6 版本播放媒體需要調(diào)用 Gstreamer videoconvertscale 元件,而這個(gè)元件是要 Gstreamer 1.22 版本以上才支持,如果當(dāng)前 Yocto 版本中支持的版本過(guò)低需要通過(guò)單獨(dú)升級(jí) Gstreamer 或者整體升級(jí) Yocto 版本來(lái)滿足。
5). 總結(jié)
本文基于 NXP i.MX8MP 處理器簡(jiǎn)單演示了 PySide6 應(yīng)用的部署運(yùn)行。
提交
Verdin AM62使用CODESYS
Verdin AM62 引腳復(fù)用配置
TI AM62X Secure Boot 流程簡(jiǎn)述
基于 TI AM62 測(cè)試 QtWayland 部署
Verdin AM62 LVGL 移植