Pisal sem o namestitvi Raspbiana na Raspberry Compute Module in nastavitvi navzkrižne kompilacije za QtCreator na Ubuntu 20.
Ta blogpost je posodobitev na - v tem trenutku - najnovejšo različico 6.8 Qt, raspi OS Bookworm in Ubuntu 22.04 LTS.
Predpogoji
Uporabil sem naslednje trde- in programsko opremo:
Raspberry Pi 4
raspi OS Bookworm, brez priporočene programske opreme
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
Opombe
Če imate prenosni ali namizni računalnik z dovolj pomnilnika in procesorskih jeder, lahko navzkrižno kompilacijo izvedete v navideznem računalniku. Vendar sem izkusil, da je domači računalnik veliko hitrejši in povzroča manj napak.
Oglejte si poti do datotek in naslove ip v mojih primerih kode in jih prilagodite svojim potrebam.
Odkrijte različice gcc, ld in ldd. Izvorno kodo iste različice je treba prenesti za kasnejšo izdelavo navzkrižnega prevajalnika.
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.
Na konec ~/.bashrc dodajte naslednji del kode in posodobite spremembe:
Zgradite najnovejšo različico cmake iz izvorne kode:
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
Sestavite gcc kot navzkrižni prevajalnik
Prenesite potrebno izvorno kodo. Naslednje ukaze spremenite glede na svoje potrebe. V času, ko pripravljam to stran, so:
gcc 12.2.0
binutils 2.40 (različica ld)
glibc 2.36 (različica ldd)
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
Sestavite program 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
Uredite gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Dodajte naslednji del kode.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Izvedite delno izgradnjo programa 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
Delno sestavite 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
Vrnite se na gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Dokončajte gradnjo glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Dokončajte gradnjo gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Na tej točki imamo z gcc popolno verigo orodij za navzkrižno prevajanje. Mapa gcc_all ni več potrebna. Lahko jo izbrišete.
Gradnja Qt6
Qt6 lahko sestavite na dva načina. Prenesete lahko različico "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz), ki vsebuje qtbase in vse podmodule. To je zelo težka zadeva in za njeno sestavljanje potrebujete veliko moči in časa.
Moje priporočilo je, da kot osnovo sestavite qtbase in nato sestavite samo vsak podmodul, ki ga potrebujete, posebej.
Ustvarite mape za sysroot in qt6. Te mape ustvarim v svojem delovnem prostoru/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
Ustvarite datoteko z imenom toolchain.cmake v ~/workspace/qt-rpi-cross-compilation/qt6.
Vrstico "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" morate prilagoditi svojemu okolju.
Če ustvarite projekt v programu QtCreator, morate prilagoditi konfiguracijo "Run". Na naslov "Environment" morate dodati:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Dodajanje podmodulov Qt
Dodajte modul QML
Prenesite izvorne kode:
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
Preverite odvisnosti na ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml in ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Prepričajte se, da je treba zahtevane module najprej sestaviti in namestiti.