한국어
Qt
 

Raspberry Pi 4에 대한 Qt5.14 크로스컴파일을 우분투 18.04에서 진행해보았다. 2019년 10월 경에 Raspberry Pi 4 에서 사용되는 Broadcom사의 V3D에대한 Mesa 그래픽 스택의 업데이트 소식을 공유한 적이 있었는데 (https://makersweb.net/news/15210) 이번에 직접 Qt를 올려봄..

 

Mesa 19.3 부터 Raspberry Pi 4 에서 사용되는 Broadcom "V3D" Gallium3D 드라이버는 OpenGL ES 3.1을 지원한다. 그러므로 Mesa를 먼저 크로스컴파일 하고 Qt를 구축한다. (Broadcom 스택이 아님에 주의 할 것.)

 

라즈베리파이4 운영체제는 라즈비안 buster 를 사용하였다. 이미지를 다운로드 받고 sd카드에 쓴다.

 

sd카드를 우분투 pc에 장착하면 boot, rootfs 으로 마운트된다. 빌드 후 여기에 직접 복사할 예정..

 

우분투 18.04에서 크로스툴체인 패키지 설치

 

sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf ccache pkg-config-arm-linux-gnueabihf
 
drm 크로스 컴파일
mesa 및 drm빌드는 meson빌드 시스템을 사용하므로 크로스 컴파일을 위한 구성파일 작성.
cross_file
[binaries]
c = '/usr/lib/ccache/arm-linux-gnueabihf-gcc'
cpp = '/usr/lib/ccache/arm-linux-gnueabihf-g++'
ar = '/usr/bin/arm-linux-gnueabihf-ar'
strip = '/usr/bin/arm-linux-gnueabihf-strip'
pkgconfig = '/usr/bin/arm-linux-gnueabihf-pkg-config'
 
[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv8hl'
endian = 'little'
 
sudo apt-get install valgrind
 
git clone git://anongit.freedesktop.org/mesa/drm
cd drm
 
빌드구성명령
meson build/ \
    --cross-file=$HOME/pi/mesa/cross_file \
    --prefix=/usr \
    --libdir=lib/arm-linux-gnueabihf \
    "$@"
 
ninja -C build/

 

sudo env DESTDIR=/ ninja -C build/ install

 

sd카드 rootfs에도 설치한다.

 

 

Mesa 크로스 컴파일

추가 필요패키지 (모든 의존성 패키지들을 크로스 컴파일 할 수 없으므로 apt 를 이용하여 설치)
sudo apt-get install \
    flex bison python-mako \
    libxcb-dri3-dev:armhf libxcb-dri2-0-dev:armhf \
    libxcb-glx0-dev:armhf libx11-xcb-dev:armhf \
    libxcb-present-dev:armhf libxcb-sync-dev:armhf \
    libxshmfence-dev:armhf \
    libxdamage-dev:armhf libxext-dev:armhf libxfixes-dev:armhf \
    libexpat1-dev:armhf libudev-dev:armhf gettext \
    libxxf86vm-dev:armhf libxrandr-dev:armhf
 
* 설치가 안되면 다음 링크 참조
https://askubuntu.com/questions/1061979/cross-compile-for-armhf-and-install-a-static-library
 
git clone git://anongit.freedesktop.org/mesa/mesa
cd mesa
 
빌드구성명령
meson build/ \
  --cross-file=$HOME/pi/mesa/cross_file \
  --prefix=/usr \
  --libdir=lib/arm-linux-gnueabihf \
  -Dtexture-float=true \
  -Ddri-drivers= \
  -Dgallium-drivers=v3d,swrast \
  -Dvulkan-drivers= \
  -Dllvm=false \
  -Dplatforms=x11,drm,surfaceless \
  -Dlibunwind=false \
  -Dllvm=false \
  "$@"

 

 

ninja -C build/
sudo env DESTDIR=/ ninja -C build/ install

 

sd카드 rootfs에도 설치한다.

 

 

Qt 5.14.1 크로스 컴파일

다음 링크 또는 git을 통한 Qt 소스코드 다운로드(https://download.qt.io/archive/qt/)

 

빌드구성

pjk@ubuntu:~/pi/qt/qt5$ ./configure -opensource -confirm-license -release -opengl es2 -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -prefix /usr/local/qt5pi -extprefix $HOME/pi/qt5 -hostprefix $HOME/pi/qt5 -nomake examples -nomake tests -no-use-gold-linker -qt-pcre -skip qtscript -skip qttools

 

make -j4

make install

 

이후 sd카드 rootfs에(/usr/local/qt5pi)도 설치하고 sd카드를 라즈베리파이4에 장착하고 부팅 후 ssh를 활성화한다.

 

호스트(우분투)에서 QtCreator IDE 설정을 하고 예제를 컴파일 하여 라즈베리파이4에 배포한다. 응용프로그램을 "-platform eglfs" 옵션으로 실행하면 X기반에서 전체화면으로 실행된다.

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 87704
119 안드로이드 가상장치 사용 file makersweb 2019.01.13 1182
118 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1191
117 Qml에서 커튼효과 구현 예제 - Shader Effects file 운영자 2018.12.05 1213
116 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 1234
115 Qt 6의 비동기 API makersweb 2020.10.19 1314
114 많은 리소스를 사용하는 Qt프로젝트에서 고려해봐야 할 qmake 옵션 makersweb 2019.10.11 1319
113 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 1327
112 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1353
111 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1364
110 웹기반 Qt Design Viewer [2] file makersweb 2019.10.23 1397
109 tslib의 ts_calibrate를 응용해서 Qt로 터치보정기능 구현 file makersweb 2019.04.06 1463
108 qInstallMessageHandler를 이용한 디버그 메세지 출력 제어하기 makersweb 2019.02.25 1473
107 QThread 및 QMutex 예제 makersweb 2021.01.12 1478
106 Qbs에 대한 소개와 설치하는 방법 makersweb 2019.10.09 1488
105 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1515
104 QML과 JavaScript 의 숫자 관련 내장된 함수 makersweb 2021.03.28 1561
103 Qt Quick 3D 소개 makersweb 2019.11.09 1583
102 QML에서 undefined를 확인하는 방법 makersweb 2017.11.29 1605
101 ApplicationWindow 와 메뉴바(MenuBar)구성 file makersweb 2020.01.04 1618
100 Widgets(C++) 기반의 기본 스타일을 Dark 테마 및 Material 디자인 스타일로 바꾸기 file makersweb 2023.01.28 1632