Ubuntu 20 LTS의 Raspberry Compute Module 4 용 Qt 5.15 크로스 컴파일

소개

Raspberry Pi 4용 Qt 5.15.2를 크로스 컴파일하고 Compute Module 4에 설치하기 위한 가이드입니다. Raspberry Pi 4의 블로그 게시물 Qt에 대한 업데이트로, 이번에는 Raspberry Pi OS Lite(다운로드: https://www.raspberrypi.org/software/operating-systems/), Qt 버전 5.15.2 및 Ubuntu 20 LTS를 가상 머신의 크로스 컴파일 컴퓨터로 사용하고 있다는 차이점이 있습니다.

출처

내 이전 블로그 게시물 (위 참조) 외에도 다음 소스를 사용했습니다.

라즈베리 파이 OS 라이트

내 블로그 게시물 Raspberry Compute Module 4에 Raspberry Pi OS 설치에 설명된 대로 Raspberry Pi 4 또는 Raspberry Compute Module 4에 Raspberry Pi OS Lite 를 설치합니다.

Ubuntu 5.15.2 LTS의 Qt 20

Raspberry Pi OS가 컴퓨팅 모듈에 설치되고 Raspberry가 eMMC 메모리에서 다시 부팅되면 Raspberry 및 Ubuntu 컴퓨터에 필요한 소프트웨어를 설치해야 합니다.

라즈베리 컴퓨트 모듈 4

아래 표시된 단계는 "일반" Raspberry Pi 4에서도 작동해야 합니다.

Pi 4를 켠 후 구성 메뉴를 엽니다.

sudo raspi-config
구성을 위해서는 "SSH"와 "GL (Fake KMS)"이 필요합니다. 다음 두 스크린샷을 참조하세요.
SSH Konfiguration

FKMS Konfiguration

- 그런 다음 /etc/apt/sources.list에 개발 소스를 추가합니다. 이렇게 하려면 다음 줄을 추가합니다.
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- 그런 다음 다음 명령으로 시스템을 업데이트하십시오.
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- 그런 다음 필요한 Qt 및 개발 패키지를 설치합니다.
sudo apt-get build-dep qt5-qmake
sudo apt-get build-dep libqt5gui5
sudo apt-get build-dep libqt5webengine-data
sudo apt-get build-dep libqt5webkit5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
- 그런 다음 RaspberryQt에 대한 디렉토리를 만듭니다.
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

우분투 머신

Ubuntu 20 LTS가 설치된 PC 또는 가상 머신이 필요합니다.
우선, Ubuntu를 최신 상태로 유지하고 몇 가지 필수 라이브러리를 설치하십시오.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
sudo apt install build-essential

그런 다음 ssh-key를 만들고 Raspberry에 설치하여 모든 rsync와 함께 암호 프롬프트가 나타나지 않고 사용자 이름과 암호를 입력해야합니다. 인터넷에는 충분한 지침이 있으므로 여기에 자세한 설명을 남겨 두겠습니다.

Raspberry 라이브러리의 디렉토리 구조 작성

필요한 파일의 경우 Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4 아래에 다음 디렉토리 구조를 만듭니다.

sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/build
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/usr
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/opt
sudo chown -R 1000:1000 ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
cd ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4

Qt 리소스 다운로드

Qt 리소스를 다운로드하고 raspberrypi4 디렉토리에서 압축을 풉니 다.

sudo wget http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xfv qt-everywhere-src-5.15.2.tar.xz

이제 컴파일러와 함께 사용할 수 있도록 mkspec 파일을 약간 수정해야 합니다. 이렇게 하려면 다음 명령을 실행합니다.

cp -R qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf

크로스 컴파일러 다운로드

크로스 컴파일러로서 Linaro 버전 7.4.1을 사용합니다. 이렇게 하려면 tools 디렉토리로 변경하고 컴파일러를 다운로드하고 압축을 풉니다.

cd  tools
sudo wget https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
tar xfv gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz

Raspberry 라이브러리의 Rsync

이제 Raspberry Pi의 원본 라이브러리가 필요하며, rsync를 사용하여 Ubuntu 디렉토리에 복사합니다.

cd ..
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/opt/vc sysroot/opt/

이제 rsync에 의해 복사된 심볼릭 링크를 정리하여 올바른 원본 파일을 가리키도록 해야 합니다. 다운로드할 수 있는 작은 Python 스크립트가 있습니다.

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

그런 다음 스크립트를 실행 가능하게 만들고 호출합니다.

sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

Qt 컴파일하기

이제 빌드를 구성한 다음 컴파일할 수 있습니다.

cd build
../qt-everywhere-src-5.15.2/configure -release -opengl es2  -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot -prefix /usr/local/qt5.15 -extprefix ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck

몇 분 후에 스크립트가 완료되고 다음 EGLFS 조건이 설정되거나 설정되지 않아야 합니다.

QPA backends:
  DirectFB ............................... no
  EGLFS .................................. yes	[SHOULD BE YES]
  EGLFS details:
    EGLFS OpenWFD ........................ no
    EGLFS i.Mx6 .......................... no
    EGLFS i.Mx6 Wayland .................. no
    EGLFS RCAR ........................... no
    EGLFS EGLDevice ...................... yes	[SHOULD BE YES]
    EGLFS GBM ............................ yes
    EGLFS VSP2 ........................... no
    EGLFS Mali ........................... no
    EGLFS Raspberry Pi ................... no	[SHOULD BE NO]
    EGLFS X11 ............................ yes
  LinuxFB ................................ yes
  VNC .................................... yes

그렇지 않거나 다른 오류 메시지가 나타나면 조사하고 정리하십시오. 변경된 변수로 설정 스크립트를 다시 실행하려면, 사전에 build 디렉터리의 내용을 삭제해 주십시오.
모든 것이 정상이면 make 및 make install 명령을 실행합니다.

make -j4
make install

라즈베리에 컴파일 된 파일 설치

컴파일에 성공하면 컴파일된 파일(qt5.15 디렉토리에 있음)을 Raspberry Pi에 복사할 수 있습니다. 다시 말하지만, rsync 명령을 사용하여 이 작업을 수행합니다.

rsync -avz --rsync-path="sudo rsync" qt5.15 [email protected]:/usr/local/

구성 QtCreator

다음 블로그 게시물 에서는 컴파일 된 라이브러리와 함께 사용하기 위해 QtCreator를 사용하는 방법을 설명합니다.