Jag skrev om installationen av Raspbian på Raspberry Compute Module och konfigurationen av korskompilering för QtCreator på Ubuntu 20.
Detta blogginlägg är en uppdatering till den - vid den här tiden - nyaste versionen 6.8 av Qt, raspi OS Bookworm och Ubuntu 22.04 LTS.
Förkunskapskrav
Jag använde följande hård- och mjukvara:
Raspberry Pi 4
raspi OS Bookworm, utan rekommenderad programvara
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Anteckningar
Om du har en bärbar eller stationär dator med tillräckligt med RAM-minne och CPU-kärnor kan du göra korskompileringen i en virtuell maskin. Men jag gjorde erfarenheten, att en inbyggd dator är mycket snabbare och producerar mindre fel.
Ta en titt på filvägarna och ip-adresserna i mina kodexempel och anpassa dem efter dina behov.
Upptäck versioner av gcc, ld och ldd. Källkoden för samma version bör laddas ner för att bygga en korskompilator senare.
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.
Lägg till följande kod i slutet av ~/.bashrc och uppdatera ändringarna:
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
Bygg gcc som en korskompilator
Ladda ner nödvändig källkod. Du bör modifiera följande kommandon efter dina behov. För den tid jag gör denna sida är 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
Bygg 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
Redigera gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Lägg till följande kodstycke.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Gör en partiell byggning av 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
Bygg Glibc delvis.
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
Tillbaka till gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Slutför byggandet av glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Avsluta byggandet av gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Vid det här laget har vi en fullständig verktygskedja med cross compiler med gcc. Mappen gcc_all behövs inte längre. Du kan ta bort den.
Bygga Qt6
Det finns två möjligheter att bygga Qt6. Det finns en "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) -version att ladda ner, som innehåller qtbase och alla undermoduler. Detta är mycket tunga saker och kräver mycket kraft och tid för att kompilera det.
Min rekommendation är att kompilera qtbase som grund och därefter kompilera varje undermodul som du behöver separat.
Skapa mappar för sysroot och qt6. Jag skapar de här mapparna i min arbetsyta/qt-rpi-cross-compilation-katalog.
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
Skapa en fil med namnet toolchain.cmake i ~/workspace/qt-rpi-cross-compilation/qt6.
Du måste justera raden "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" till din miljö.
Om du skapar ett projekt i QtCreator måste du justera "Run" konfigurationen. På "Environment" måste du lägga till:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Lägg till Qt-undermoduler
Lägg till QML-modul
Ladda ner källkoder:
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 måste kontrollera beroenden på ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml och ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Se till att nödvändiga moduler byggs och installeras först.