- meta-qt(5|6) 를 설치한다.
- 내가 사용할 것들을 bbappend로 가져와 설치할 PACKAGECONFIG를 명시해, 설치한다.
기본적으로 meta-qt5는 아주 minimal한 feature set만 enable.
QtBase 옵션을 수정해, OpenGL ES2 지원을 원한다면, qtbase_git.bbappend에 아래처럼 옵션추가
PACKAGECONFIG += "gles2"
${S}/mkspecs/oe-device-extra.pri
do_configure_prepend() {
cat > ${S}/mkspecs/oe-device-extra.pri <<EOF
QMAKE_LIBS_EGL += -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lgsl -lEGL -ldl -lglib-2.0 -lpthread
QMAKE_CFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM
QMAKE_CXXFLAGS += -DLINUX=1 -DWL_EGL_PLATFORM
QT_QPA_DEFAULT_PLATFORM = eglfs
EOF
}
- meta-qt5
1.1. clone
$ git clone git://github.com/meta-qt5/meta-qt5.git
- meta-mylayer
2.1. 여기서 qtbase_%.bbappend로 사용할 PACKAGECONFIG를 가져오자.
PACKAGECONFIG

위와 같은 메커니즘으로, yocto build system에서는 PACKAGECONFIG를 다룬다.
예제

- 확인
$ bitbake qtbase -e | grep "^PACKAGECONFIG"

- 물론 qtbase에서 CMakeLists.txt에 관련 내용이 있는 경우에만 해당된다.
pkgconfig를 사용하는 pciutils의 레시피를 보자.

eglfs/deviceintegration

qt do_install_ptest Error


ptest 빼기
- ptest 는 주로 DISTRO_FEATURES에 있는데, yocto unit test이다.
방법 1. meta-tegra내 qtbase_%.bbappend 에서
configure an Embedded Linux Device
- QT를 cross compile 하기 위해선, 해당 보드에 대한 toolchain과 sysroot가 필요하다.
- toolchain: run on host system (일반적으로 x64)
- 제작된 바이너리는 target용 아키텍처
- sysroot: header, library for target system
- toolchain: run on host system (일반적으로 x64)
- Qt-based 앱을 windowing system(e.g., X11, Wayland) 없이 실행할 때, EGL와 OpenGL ES support를 위해 Device vendor-specific adaptation code가 필요하다.
- Device vendor-specific adaptation code는 EGLFS platform plugin에 대해 backend 형태로 제공된다.
- SW only 기반 렌더링인 LinuxFB platform plugin과는 관련없다.
- 최근 임베디드 시스템에서 video mode로 drm(https://velog.io/@markyang92/waylandweston#drm 참고, https://en.wikipedia.org/wiki/Direct_Rendering_Manager 참고)을 많이 사용하는데, 이는 graphical surface와 display connector를 관리한다.
- NXP i.MX-8 기반 device, Rpi-4가 이를 사용한다.
- 일반적으로 EGLFS platform plugin에 대해 가장 일반적으로 사용되는 backend는 eglfs_kms이다.
- eglfs_kms
- gbm으로 surface management, buffer management
- drm으로 EGL, OpenGLES 기반 렌더링 지원
- 예전에는(e.g., NXP i.MX6)
- EGL window surface를 framebuffer에 연결하기 위해, eglfs_viv와 같은 EGLFS backend 전용 GPU vendor specific을 사용했다.
- Qt는 임베디드 디바이스용 소프트웨어 스택의 한 구성요소일 뿐이다.
- 특히, acclerated 그래픽이 관련될 때, Qt는 사용자 공간과 디스플레이 드라이버와 같은 '커널 구송 요소'를 위한 적절한 구성을 갖춘 기능적 그래픽 스택을 expect한다.
- 이러한 구성 요소들은 Qt 영역 밖에 있으며, 기본 시스템이 완전히 기능하는지? 최적화되었는지? 그래픽 가속이 적용되는지? 는 시스템 통합자의 책임이다.
- https://doc.qt.io/qt-6/configure-linux-device.html#toolchain-files-versus-device-makespecs
- https://doc.qt.io/qt-6/embedded-linux.html


# === /etc/profile.d/qt-qtpa.sh ==== #
export QT_QPA_PLATFORM=eglfs
export QT_QPA_EGLFS_INTEGRATION="eglfs_kms" # 혹은
export QT_QPA_EGLFS_INTEGRATION="eglfs_kms_egldevice"
systemd 가 시작 시, profile.d 내 파일을 실행하여 전역 환경변수가 먹힌다.
systemd
qt systemd 레시피
SUMMARY = "Start Qt-Demo application"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI += "file://qt_demo_start.service \
file://qt_demo_start.sh"
S = "${WORKDIR}"
inherit systemd
SYSTEMD_PACKAGES="${PN}"
do_install() {
install -d ${D}${sbindir}
install -m 0750 qt_demo_start.sh ${D}${sbindir}
install -d ${D}${systemd_system_unitdir}
install -m 0644 qt_demo_start.service ${D}${systemd_system_unitdir}
}
FILES:${PN} = "${sbindir} ${systemd_system_unitdir}"
SYSTEMD_SERVICE:${PN} = "qt_demo_start.service
service
[Unit]
Description=qt demo start service
After=multi-user.target
[Service]
Type=simple
#Environment=QT_QPA_EGLFS_FORCE888=1
Environment=QT_QPA_PLATFORM=linuxfb
#Environment=QT_QPA_EGLFS_FORCEVSYNC=1
#Environment=QT_PLUGIN_PATH=/usr/lib/qt5/plugins
#Environment=QT_QPA_EGLFS_INTEGRATION=eglfs_viv
#Environment=QT_QPA_EGLFS_FB=/dev/fbX # fbX - your framebuffer number
ExecStart=/usr/sbin/qt_demo_start.sh start
RemainAfterExit=true
ExecStop=/usr/sbin/qt_demo_start.sh stop
StandardOutput=journal
[Install]
WantedBy=multi-user.target
sh
#!/bin/sh
start() {
/usr/share/qt5everywheredemo-1.0/QtDemo
}
stop() {
/usr/bin/killall QtDemo
}
case "$1" in
start|restart)
echo "Starting QtDemo"
stop
start
;;
stop)
echo "Stopping QtDemo"
stop
;;
esac
Boot to QT(B2QT)
- B2QT (Boot to QT): QT에서 개발하여 배포하는 프로젝트. 부팅하면서 고전 QT에 가까운 실행환경을 미리 갖추어 놓은 배포판.
'Yocto Project : : Open Source' 카테고리의 다른 글
| Yocto Profiling Tracing: tools-profile INHIBIT_PACKAGE_STRIP dbg-pkgs (0) | 2024.06.01 |
|---|---|
| BBMASK, INSANE_SKIP, insane.bbclass, QA (0) | 2024.06.01 |
| meta-tegra (0) | 2024.06.01 |
| meta-raspberrypi, meta-qt5, systemd, VIRTUAL-RUNTIME, DISTRO_FEATURES, Qt 적용 (0) | 2024.06.01 |
| signed package (0) | 2024.06.01 |