Jeg skrev om installation af Raspbian på Raspberry Compute Module og opsætning af krydskompilering til QtCreator på Ubuntu 20.
Dette blogindlæg er en opdatering til den - på nuværende tidspunkt - nyeste version 6.8 af Qt, raspi OS Bookworm og Ubuntu 22.04 LTS.
Forudsætninger
Jeg brugte følgende hard- og software:
Raspberry Pi 4
raspi OS Bookworm, uden anbefalet software
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Noter
Hvis du har en bærbar eller stationær computer med nok RAM og CPU-kerner, kan du lave krydskompileringen i en virtuel maskine. Men jeg har erfaret, at en native computer er meget hurtigere og producerer færre fejl.
Se på filstierne og ip-adresserne i mine kodeeksempler, og tilpas dem til dine behov.
Find versioner af gcc, ld og ldd. Kildekoden til den samme version skal downloades for at bygge cross compiler senere.
pi@raspberrypi:~ $ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
pi@raspberrypi:~ $ ld --version
GNU ld (GNU Binutils for Debian) 2.40
Copyright (C) 2023 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
pi@raspberrypi:~ $ ldd --version
ldd (Debian GLIBC 2.36-9+rpt2+deb12u8) 2.36
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Tilføj følgende stykke kode til slutningen af ~/.bashrc, og opdater ændringerne:
cd ~
wget https://github.com/Kitware/CMake/releases/download/v3.30.5/cmake-3.30.5.tar.gz
tar -xzvf cmake-3.30.5.tar.gz
cd cmake-3.30.5
./bootstrap
make -j$(nproc)
sudo make install
# Update PATH Environment Variable
which cmake
/usr/local/bin/cmake
export PATH=/usr/local/bin/cmake:$PATH
source ~/.bashrc
cmake --version
Byg gcc som en cross-compiler
Download den nødvendige kildekode. Du bør ændre følgende kommandoer til dine behov. På det tidspunkt, hvor jeg laver denne side, er de:
gcc 12.2.0
binutils 2.40(ld-version)
glibc 2.36(ldd-version)
cd ~
mkdir gcc_all && cd gcc_all
wget https://ftpmirror.gnu.org/binutils/binutils-2.40.tar.bz2
wget https://ftpmirror.gnu.org/glibc/glibc-2.36.tar.bz2
wget https://ftpmirror.gnu.org/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
git clone --depth=1 https://github.com/raspberrypi/linux
tar xf binutils-2.40.tar.bz2
tar xf glibc-2.36.tar.bz2
tar xf gcc-12.2.0.tar.gz
rm *.tar.*
cd gcc-12.2.0
contrib/download_prerequisites
cd ~/gcc_all
cd linux
KERNEL=kernel7
make ARCH=arm64 INSTALL_HDR_PATH=/opt/cross-pi-gcc/aarch64-linux-gnu headers_install
Byg Binutils.
cd ~/gcc_all
mkdir build-binutils && cd build-binutils
../binutils-2.40/configure --prefix=/opt/cross-pi-gcc --target=aarch64-linux-gnu --with-arch=armv8 --disable-multilib
make -j 8
make install
Rediger gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Tilføj følgende stykke kode.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Lav en delvis opbygning af gcc.
cd ~/gcc_all
mkdir build-gcc && cd build-gcc
../gcc-12.2.0/configure --prefix=/opt/cross-pi-gcc --target=aarch64-linux-gnu --enable-languages=c,c++ --disable-multilib
make -j8 all-gcc
make install-gcc
Byg delvist Glibc.
cd ~/gcc_all
mkdir build-glibc && cd build-glibc
../glibc-2.36/configure --prefix=/opt/cross-pi-gcc/aarch64-linux-gnu --build=$MACHTYPE --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-headers=/opt/cross-pi-gcc/aarch64-linux-gnu/include --disable-multilib libc_cv_forced_unwind=yes
make install-bootstrap-headers=yes install-headers
make -j8 csu/subdir_lib
install csu/crt1.o csu/crti.o csu/crtn.o /opt/cross-pi-gcc/aarch64-linux-gnu/lib
aarch64-linux-gnu-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross-pi-gcc/aarch64-linux-gnu/lib/libc.so
touch /opt/cross-pi-gcc/aarch64-linux-gnu/include/gnu/stubs.h
Tilbage til gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Færdiggør opbygningen af glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Afslut opbygningen af gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
På dette tidspunkt har vi en fuld cross compiler-værktøjskæde med gcc. Mappen gcc_all er ikke længere nødvendig. Du kan slette den.
Opbygning af Qt6
Der er to muligheder for at bygge Qt6. Der kan downloades en "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) -version, som indeholder qtbase og alle undermoduler. Det er meget tunge ting og kræver meget kraft og tid at kompilere.
Min anbefaling er at kompilere qtbase som basis og derefter kun kompilere hvert undermodul, du har brug for, separat.
Lav mapper til sysroot og qt6. Jeg opretter disse mapper i mit arbejdsområde/qt-rpi-cross-compilation directory.
cd ~/workspace/qt-rpi-cross-compilation/qt6/src
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtbase-everywhere-src-6.8.0.tar.xz
tar xf qtbase-everywhere-src-6.8.0.tar.xz
Opret en fil med navnet toolchain.cmake i ~/workspace/qt-rpi-cross-compilation/qt6.
Du skal justere linjen "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" til dit miljø.
Hvis du opretter et projekt i QtCreator, skal du justere "Run" -konfigurationen. På "Environment" skal du tilføje:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Tilføj Qt-undermoduler
Tilføj QML-modul
Download kildekoder:
cd ~/workspace/qt-rpi-cross-compilation/qt6/src
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtshadertools-everywhere-src-6.8.0.tar.xz
tar xf qtshadertools-everywhere-src-6.8.0.tar.xz
wget https://download.qt.io/official_releases/qt/6.8/6.8.0/submodules/qtdeclarative-everywhere-src-6.8.0.tar.xz
tar xf qtdeclarative-everywhere-src-6.8.0.tar.xz
Du skal tjekke afhængigheder 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 moduler bygges og installeres først.