1. 首先需要获取Neardi 最新的SDK(kernel 版本5.10及以后).
由于Rockchip SDK所提供的buildroot是weston wayland桌面, DRM显示框架。因此, 在开发QT时需要以此来设置编译选项。
2. 配置buildroot
2.1 启用 Qt5
在 Buildroot 配置界面中,启用 Qt5 和相关模块:
ARCH=arm64 make menuconfig
导航到以下路径并选择需要的选项:
Target packages → Graphics libraries and applications → qt5
- 勾选以下选项:
qt5base(必须,核心模块,提供基础功能)
qt5declarative(支持 QML 和 Qt Quick)
qt5quickcontrols(Qt Quick Controls 1,用于构建 UI 控件)
qt5quickcontrols2(Qt Quick Controls 2,现代控件库,推荐使用)
qt5multimedia(如果需要音频/视频支持)
qt5svg(如果需要 SVG 渲染支持)
qt5widgets(如果使用传统的 QWidget 界面)
qt5wayland(用于支持 Wayland,强烈推荐)
qt5opengl(支持 OpenGL 和 OpenGL ES)
eglfs support(轻量级的显示后端)
2.2 QT5依赖
- 启用 Qt5 的依赖项
glibc 或 uclibc-ng:提供基本 C 库支持。
zlib:用于压缩功能。
freetype:字体支持。
fontconfig:字体配置。
harfbuzz:字体渲染支持。
icu:国际化支持。
libjpeg、libpng、libtiff:图像处理库。
sqlite:用于存储配置和缓存。
2.3 图形显示依赖
Direct Rendering Manager (DRM):
libdrm:用于 GPU 交互。
OpenGL ES 和 EGL:
libgles 和 libegl:提供 OpenGL ES 和 EGL 支持。
Wayland(推荐使用):
wayland:核心库。
wayland-protocols:扩展协议。
weston:Wayland 显示服务器。
2.4 Buildroot 配置文件
选择编译选项后, 保存配置文件,
ARCH=arm64 make savedefconfig
生成的配置文件, 内容如下:
--- a/buildroot/configs/rockchip_rk3576_defconfig
+++ b/buildroot/configs/rockchip_rk3576_defconfig
@@ -1,25 +1,220 @@
-#include "base/base.config"
-#include "bus/can.config"
-#include "bus/pci.config"
-#include "chips/rk3576_aarch64.config"
-#include "font/chinese.config"
-#include "fs/exfat.config"
-#include "fs/ntfs.config"
-#include "fs/vfat.config"
-#include "gpu/gpu.config"
-#include "multimedia/audio.config"
-#include "multimedia/camera.config"
-#include "multimedia/gst/audio.config"
-#include "multimedia/gst/camera.config"
-#include "multimedia/gst/rtsp.config"
-#include "multimedia/gst/video.config"
-#include "multimedia/mpp.config"
-#include "wifibt/bt.config"
-#include "wifibt/wireless.config"
-#include "tools/benchmark.config"
-#include "tools/common.config"
-#include "tools/test.config"
-#include "network/chromium.config"
-#include "npu2.config"
-#include "powermanager.config"
-#include "weston.config"
+BR2_aarch64=y
+BR2_cortex_a72_a53=y
+BR2_TOOLCHAIN_BUILDROOT_CXX=y
+BR2_PRIMARY_SITE="http://sources.buildroot.net"
+BR2_BACKUP_SITE=""
+BR2_GNU_MIRROR="http://mirrors.kernel.org/gnu"
+BR2_CCACHE=y
+BR2_FORCE_HOST_BUILD=y
+BR2_TARGET_GENERIC_HOSTNAME="rk3576"
+BR2_TARGET_GENERIC_ISSUE="Welcome to RK3576 Buildroot"
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_ROOTFS_MERGED_USR=y
+BR2_TARGET_GENERIC_ROOT_PASSWD="rockchip"
+BR2_TARGET_SERIAL_SHELL_SH=y
+BR2_ROOTFS_OVERLAY="board/rockchip/common/base board/rockchip/rk3576/fs-overlay/"
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/rockchip/common/post-build.sh"
+BR2_LINUX_KERNEL_CUSTOM_LOCAL=y
+BR2_LINUX_KERNEL_CUSTOM_LOCAL_LOCATION="$(TOPDIR)/../kernel"
+BR2_PACKAGE_ROCKCHIP=y
+BR2_PACKAGE_RK3576=y
+BR2_PACKAGE_CAMERA_ENGINE=y
+BR2_PACKAGE_CAMERA_ENGINE_RKAIQ_RKISP_DEMO=y
+BR2_PACKAGE_GSTREAMER1_ROCKCHIP=y
+BR2_PACKAGE_LIBV4L_RKMPP=y
+BR2_PACKAGE_RKNPU2=y
+BR2_PACKAGE_RKSCRIPT=y
+BR2_PACKAGE_RKTOOLKIT=y
+BR2_PACKAGE_RKWIFIBT=y
+BR2_PACKAGE_RKWIFIBT_APP=y
+BR2_PACKAGE_ROCKCHIP_ALSA_CONFIG=y
+BR2_PACKAGE_ROCKCHIP_MALI=y
+BR2_PACKAGE_ROCKCHIP_MPP=y
+BR2_PACKAGE_ROCKCHIP_MPP_ALLOCATOR_DRM=y
+BR2_PACKAGE_ROCKCHIP_MPP_TESTS=y
+BR2_PACKAGE_ROCKCHIP_RGA=y
+BR2_PACKAGE_ROCKCHIP_TEST=y
+BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="board/rockchip/common/base/busybox.fragment"
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_ALSA_UTILS=y
+BR2_PACKAGE_ALSA_UTILS_ALSACONF=y
+BR2_PACKAGE_ALSA_UTILS_AMIXER=y
+BR2_PACKAGE_ALSA_UTILS_APLAY=y
+BR2_PACKAGE_BLUEZ_ALSA_HCITOP=y
+BR2_PACKAGE_FFMPEG=y
+BR2_PACKAGE_GSTREAMER1=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_INSTALL_TOOLS=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIORATE=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_AUDIOTESTSRC=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ENCODING=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_TCP=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEOTESTSRC=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VIDEORATE=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_ALSA=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_OGG=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_THEORA=y
+BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_VORBIS=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_JPEG=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PNG=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ALPHA=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_APETAG=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUDIOPARSERS=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUPARSE=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_AUTODETECT=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_DEINTERLACE=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_FLV=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_ID3DEMUX=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MATROSKA=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MULTIFILE=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTP=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTPMANAGER=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_RTSP=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_UDP=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOBOX=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOCROP=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOFILTER=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_VIDEOMIXER=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_MPG123=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_V4L2=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_GDKPIXBUF=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_PULSE=y
+BR2_PACKAGE_GST1_PLUGINS_GOOD_PLUGIN_SOUPHTTPSRC=y
+BR2_PACKAGE_GST1_PLUGINS_BAD=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMDEC=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ADPCMENC=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CAMERABIN2=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DEBUGUTILS=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVBSUBOVERLAY=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DVDSPU=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_JPEGFORMAT=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MIDI=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGDEMUX=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSDEMUX=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGTSMUX=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEGPSMUX=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_ONVIF=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTMP=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDP=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOPARSERS=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FAAD=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_FLUIDSYNTH=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HLS=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_KMS=y
+BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPEG2ENC=y
+BR2_PACKAGE_GST1_PLUGINS_UGLY=y
+BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_ASFDEMUX=y
+BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDLPCMDEC=y
+BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_DVDSUB=y
+BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MPEG2DEC=y
+BR2_PACKAGE_PULSEAUDIO_DAEMON=y
+BR2_PACKAGE_BZIP2=y
+BR2_PACKAGE_LMBENCH=y
+BR2_PACKAGE_RT_TESTS=y
+BR2_PACKAGE_STRACE=y
+BR2_PACKAGE_STRESS=y
+BR2_PACKAGE_STRESS_NG=y
+BR2_PACKAGE_WHETSTONE=y
+BR2_PACKAGE_UNIXBENCH=y
+BR2_PACKAGE_DOSFSTOOLS=y
+BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
+BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
+BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
+BR2_PACKAGE_E2FSPROGS=y
+BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
+BR2_PACKAGE_EXFAT=y
+BR2_PACKAGE_EXFAT_UTILS=y
+BR2_PACKAGE_FATRESIZE=y
+BR2_PACKAGE_NTFS_3G=y
+BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
+BR2_PACKAGE_DEJAVU=y
+BR2_PACKAGE_FONT_AWESOME=y
+BR2_PACKAGE_SOURCE_HAN_SANS_CN=y
+BR2_PACKAGE_GLMARK2=y
+BR2_PACKAGE_QT5=y
+BR2_PACKAGE_QT53D=y
+BR2_PACKAGE_QT5BASE_EXAMPLES=y
+BR2_PACKAGE_QT5BASE_OPENGL_LIB=y
+BR2_PACKAGE_QT5BASE_EGLFS=y
+BR2_PACKAGE_QT5BASE_FONTCONFIG=y
+BR2_PACKAGE_QT5BASE_HARFBUZZ=y
+BR2_PACKAGE_QT5BASE_JPEG=y
+BR2_PACKAGE_QT5BASE_PNG=y
+BR2_PACKAGE_QT5BASE_DBUS=y
+BR2_PACKAGE_QT5BASE_ICU=y
+BR2_PACKAGE_QT5CHARTS=y
+BR2_PACKAGE_QT5QUICKCONTROLS=y
+BR2_PACKAGE_QT5QUICKCONTROLS2=y
+BR2_PACKAGE_QT5WAYLAND=y
+BR2_PACKAGE_QT5WEBCHANNEL=y
+BR2_PACKAGE_QJSON=y
+BR2_PACKAGE_QWT=y
+BR2_PACKAGE_WESTON=y
+BR2_PACKAGE_WESTON_WAYLAND=y
+BR2_PACKAGE_WESTON_SIMPLE_CLIENTS=y
+BR2_PACKAGE_WESTON_DEMO_CLIENTS=y
+BR2_PACKAGE_EVTEST=y
+BR2_PACKAGE_I2C_TOOLS=y
+BR2_PACKAGE_INPUT_EVENT_DAEMON=y
+BR2_PACKAGE_PCIUTILS=y
+BR2_PACKAGE_PM_UTILS=y
+BR2_PACKAGE_USBMOUNT=y
+BR2_PACKAGE_ALSA_PLUGINS=y
+BR2_PACKAGE_ALSA_UCM_CONF=y
+BR2_PACKAGE_LIBMAD=y
+BR2_PACKAGE_MINIZIP=y
+BR2_PACKAGE_SNAPPY=y
+BR2_PACKAGE_CA_CERTIFICATES=y
+BR2_PACKAGE_AT_SPI2_CORE=y
+BR2_PACKAGE_JPEG_TURBO_JPEG6=y
+BR2_PACKAGE_LCMS2=y
+BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y
+BR2_PACKAGE_WAYLAND_UTILS=y
+BR2_PACKAGE_LIBV4L=y
+BR2_PACKAGE_LIBV4L_UTILS=y
+BR2_PACKAGE_LIBIDN2=y
+BR2_PACKAGE_LIBSOCKETCAN=y
+BR2_PACKAGE_LIBEVENT=y
+BR2_PACKAGE_LIBUNISTRING=y
+BR2_PACKAGE_PCRE=y
+BR2_PACKAGE_PCRE_16=y
+BR2_PACKAGE_PCRE_32=y
+BR2_PACKAGE_PCRE_UCP=y
+BR2_PACKAGE_PCRE2_32=y
+BR2_PACKAGE_RE2=y
+BR2_PACKAGE_QEMU=y
+BR2_PACKAGE_CAN_UTILS=y
+BR2_PACKAGE_CHROMIUM_WAYLAND=y
+BR2_PACKAGE_CHRONY=y
+BR2_PACKAGE_DHCPCD=y
+BR2_PACKAGE_DNSMASQ=y
+BR2_PACKAGE_DROPBEAR=y
+# BR2_PACKAGE_DROPBEAR_CLIENT is not set
+BR2_PACKAGE_GESFTPSERVER=y
+BR2_PACKAGE_HOSTAPD=y
+BR2_PACKAGE_IPROUTE2=y
+BR2_PACKAGE_IPUTILS=y
+BR2_PACKAGE_IW=y
+BR2_PACKAGE_LRZSZ=y
+BR2_PACKAGE_WIRELESS_TOOLS=y
+BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y
+BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y
+BR2_PACKAGE_WPA_SUPPLICANT_EAP=y
+BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
+BR2_PACKAGE_ANDROID_ADBD=y
+BR2_PACKAGE_COREUTILS=y
+BR2_PACKAGE_PROCPS_NG=y
+BR2_PACKAGE_PROCRANK_LINUX=y
+BR2_PACKAGE_UTIL_LINUX_MOUNT=y
+BR2_TARGET_ROOTFS_CPIO=y
+BR2_TARGET_ROOTFS_CPIO_GZIP=y
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE_AUTO=y
+BR2_TARGET_ROOTFS_SQUASHFS=y
+BR2_PACKAGE_HOST_ENVIRONMENT_SETUP=y
+BR2_PACKAGE_HOST_NODEJS=y
+BR2_PACKAGE_HOST_NTFS_3G=y
+BR2_PACKAGE_HOST_PYTHON3=y
+BR2_PACKAGE_HOST_PYTHON3_SSL=y
3. 编写QT测试APP
使用QT工具, 生成一个工程文件, 创建一个main.qml文件, 内容如下:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
property alias mainWidth: mainform.width
MainForm {
id:mainform
anchors.fill: parent
mouseArea.onClicked: {
console.log(qsTr('Clicked on background. Text: "' + textEdit.text + '"'))
}
}
}
完整代码如附件
4. 运行QT APP
在运行QT APP之前, 先设置wayland环境变量, 如下:
export QT_QPA_PLATFORM=wayland
最后运行程序:
root@buildroot:/userdata/TestQml# ./TestQml
QStandardPaths: runtime directory '/var/run' is not a directory, but a symbolic link to a directory permissions 0755 owned by UID 0 GID 0
arm_release_ver: g13p0-01eac0, rk_so_ver: 11
