Innledning
I et tidligere blogginnlegg Install Raspberry Pi OS on the Raspberry Compute Module 4 skrev jeg om installasjonen av Raspbian på Raspberry Compute Module og oppsett av krysskompilering for QtCreator på Ubuntu 20.
Dette blogginnlegget er en oppdatering til den - på dette tidspunktet - nyeste versjonen 6.10 av Qt, RaspiOS Trixie og Ubuntu 24.04 LTS.
I dette tilfellet brukte jeg en virtuell maskin, opprettet med UTM på en MacBook Pro M1.
Krav
- Raspberry Pi Compute Module 5
- MacBook Pro M1 med UTM installert
- Ubuntu 24.0.4 LTS, arm64
- Qt versjon 6.10.1
- QtCreator 18
Installasjon og oppsett av Compute Module 5 og av Ubuntu i UTM er ikke innholdet i denne bloggposten, da det finnes mange veiledninger på internett.
Oppsett Raspberry CM5
- Flash-bilde til eMMC med Raspberry Pi Imager
- Følg installasjonen og ikke glem innstillingen for ekstern tilkobling (ssh)
- Koble til RPi med ssh -> i mitt tilfelle til IP-adresse 192.168.2.194 og bruker pi -> fra din Ubuntu-vert
ssh [email protected]- Installer nødvendig programvare:
sudo apt-get install libboost-all-dev libudev-dev libinput-dev libts-dev libmtdev-dev libjpeg-dev libfontconfig1-dev libssl-dev libdbus-1-dev libglib2.0-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev libgles2-mesa-dev mesa-common-dev libasound2-dev libpulse-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-alsa libvpx-dev libsrtp2-dev libsnappy-dev libnss3-dev "^libxcb.*" flex bison libxslt-dev ruby gperf libbz2-dev libcups2-dev libatkmm-1.6-dev libxi6 libxcomposite1 libfreetype6-dev libicu-dev libsqlite3-dev libxslt1-devsudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libx11-dev freetds-dev libsqlite3-dev libpq-dev libiodbc2-dev firebird-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev libatspi2.0-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev libxtst-dev libpci-dev libcap-dev libxrandr-dev libdirectfb-dev libaudio-dev libxkbcommon-x11-dev gdbserver- Lag en mappe for Qt 6-installasjon:
sudo mkdir /usr/local/qt6- Legg til følgende stykke kode på slutten av ~/.bashrc og oppdater endringene:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt6/lib/
source ~/.bashrcInstallasjon av Ubuntu 24.04 LTS
- Oppdater til de nyeste versjonene av programvarepakkene:
sudo apt update
sudo apt upgrade- Installer følgende pakker:
sudo apt-get install make cmake build-essential libclang-dev clang ninja-build gcc git bison python3 gperf pkg-config libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev python3-html5lib libxcb-dri3-dev libxkbfile-dev libxshmfence-dev libxrandr-dev libxcursor-dev libxcomposite-dev libdrm-dev libwayland-devBygge Qt6
Det finnes to muligheter for å bygge Qt6. Du kan laste ned en "single" (https://download.qt.io/official_releases/qt/6.10/6.10.1/single/qt-everywhere-src-6.10.1.tar.xz) -versjon, som inneholder qtbase og alle undermoduler. Dette er veldig tunge greier og trenger mye kraft og tid for å kompilere det.
Min anbefaling er å kompilere qtbase som basis og deretter kompilere hver undermodul du trenger separat.
- Lag mapper for sysroot og qt6. Jeg oppretter disse mappene i Documents/Cross-Compile/raspi-os-trixie-katalogen.
mkdir ~/Documents/Qt-Cross-Compile ~/Documents/Qt-Cross-Compile/raspi-os-trixie
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie
mkdir rpi-sysroot rpi-sysroot/usr rpi-sysroot/opt
mkdir qt6 qt6/host qt6/pi qt6/host-build qt6/pi-build qt6/src- Last ned QtBase-kildekoden
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/src
wget https://download.qt.io/official_releases/qt/6.10/6.10.1/submodules/qtbase-everywhere-src-6.10.1.tar.xz
tar xf qtbase-everywhere-src-6.10.1.tar.xz- gi nytt navn til qtbase-everywhere-src-6.10.1 til qtbase, da qttranslations ikke kan fungere med qtbase-everywhere-src-6.10.1
mv qtbase-everywhere-src-6.10.1 qtbaseBygg Qt6 for host
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host-build
cmake ../src/qtbase/ -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host
cmake --build . --parallel 8
cmake --install .Binærfiler vil ligge i ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host
Bygg Qt6 for rpi
Kopier og lim inn noen mapper fra rpi ved hjelp av rsync via SSH.
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie
rsync -avzS --rsync-path="rsync" --delete [email protected]:/lib/* ~/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot/lib
rsync -avzS --rsync-path="rsync" --delete [email protected]:/usr/include/* ~/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot/usr/include
rsync -avzS --rsync-path="rsync" --delete [email protected]:/usr/lib/* ~/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot/usr/lib
rsync -avzS --rsync-path="rsync" --delete [email protected]:/opt/vc ~/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot/opt/vc- Opprett en fil med navnet toolchain.cmake i ~/Documents/Qt-Cross-Compile/raspi-os-trixie.
Du må justere linjen "set(TARGET_SYSROOT ~/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot)" til ditt miljø.
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TARGET_SYSROOT /home/whale/Documents/Qt-Cross-Compile/raspi-os-trixie/rpi-sysroot)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
set(ENV{PKG_CONFIG_PATH} $PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig)
set(ENV{PKG_CONFIG_LIBDIR} /usr/lib/pkgconfig:/usr/share/pkgconfig/:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${TARGET_SYSROOT}/usr/lib/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
# if you use other version of gcc and g++ than gcc/g++ 9, you must change the following variables
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-13)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-13)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(QT_COMPILER_FLAGS "-march=armv8-a")
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe -DNDEBUG")
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT})
include(CMakeInitializeConfigs)
function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")
foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
if (DEFINED QT_COMPILER_FLAGS_${config})
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
endif()
endforeach()
endif()
if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
foreach (config SHARED MODULE EXE)
set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
endforeach()
endif()
_cmake_initialize_per_config_variable(${ARGV})
endfunction()
set(XCB_PATH_VARIABLE ${TARGET_SYSROOT})
set(GL_INC_DIR ${TARGET_SYSROOT}/usr/include)
set(GL_LIB_DIR ${TARGET_SYSROOT}:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/:${TARGET_SYSROOT}/usr:${TARGET_SYSROOT}/usr/lib)
set(EGL_INCLUDE_DIR ${GL_INC_DIR})
set(EGL_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libEGL.so)
set(OPENGL_INCLUDE_DIR ${GL_INC_DIR})
set(OPENGL_opengl_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libOpenGL.so)
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
set(GLESv2_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libGLESv2.so)
set(gbm_INCLUDE_DIR ${GL_INC_DIR})
set(gbm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libgbm.so)
set(Libdrm_INCLUDE_DIR ${GL_INC_DIR})
set(Libdrm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libdrm.so)
set(XCB_XCB_INCLUDE_DIR ${GL_INC_DIR})
set(XCB_XCB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/aarch64-linux-gnu/libxcb.so)- Fikse absolutte symbolske lenker
sudo apt install symlinks
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie
symlinks -rc rpi-sysroot- Kompiler kildekode for rpi.
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi-build
cmake ../src/qtbase/ -GNinja -DCMAKE_BUILD_TYPE=Release -DINPUT_opengl=es2 -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF -DQT_HOST_PATH=$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host -DCMAKE_STAGING_PREFIX=$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi -DCMAKE_INSTALL_PREFIX=/usr/local/qt6 -DCMAKE_TOOLCHAIN_FILE=$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/toolchain.cmake -DQT_QMAKE_TARGET_MKSPEC=devices/linux-rasp-pi4-aarch64 -DQT_FEATURE_wayland=ON
cmake --build . --parallel 8
cmake --install .- Send de binære filene til rpi.
rsync -avz --rsync-path="sudo rsync" $HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi/* [email protected]:/usr/local/qt6Konfigurere QtCreator
Konfigurer kompilatorer
Set up Debuggers
Set up Devices
Test the connection with the button "Test"Set up Qt Versions
Set up Kits
Customize build, deploy and run settings
Legg til Qt-undermoduler
- Last ned kildekoder:
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/src
wget https://download.qt.io/official_releases/qt/6.10/6.10.1/submodules/qttools-everywhere-src-6.10.1.tar.xz
tar xf qttools-everywhere-src-6.10.1.tar.xz
mv qttools-everywhere-src-6.10.1 qttoolsDu må sjekke avhengigheter på /workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml og /workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Sørg for at de nødvendige modulene er bygget og installert først.
- Bygg modulene for verten.
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host-build
rm -rf *
$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/host/bin/qt-configure-module ../src/qttools
cmake --build . --parallel 8
cmake --install .- Bygg modulene for rpi
cd ~/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi-build
rm -rf *
$HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi/bin/qt-configure-module ../src/qttools
cmake --build . --parallel 8
cmake --install .- Send de binære filene til rpi.
rsync -avz --rsync-path="sudo rsync" $HOME/Documents/Qt-Cross-Compile/raspi-os-trixie/qt6/pi/* [email protected]:/usr/local/qt6Erkjennelser
Kilder som er brukt til å lage denne instruksen: