yocto - meta-qt, PACKAGECONFIG

markyang92·2022년 7월 18일
0

yocto

목록 보기
38/53
post-thumbnail
  1. meta-qt(5|6) 를 설치한다.
  2. 내가 사용할 것들을 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
}


  1. meta-qt5
    1.1. clone
$ git clone git://github.com/meta-qt5/meta-qt5.git

  1. 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
  • Qt-based 앱을 windowing system(e.g., X11, Wayland) 없이 실행할 때, EGLOpenGL ES support를 위해 Device vendor-specific adaptation code가 필요하다.
    • Device vendor-specific adaptation codeEGLFS 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을 사용했다.

# === /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에 가까운 실행환경을 미리 갖추어 놓은 배포판.
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글