Isinulat ko ang tungkol sa pag install ng Raspbian sa Raspberry Compute Module at pag setup ng cross compilation para sa QtCreator sa Ubuntu 20.
Ang blogpost na ito ay isang update sa - sa oras na ito - pinakabagong bersyon 6.8 ng Qt, raspi OS Bookworm at Ubuntu 22.04 LTS.
Mga Kinakailangan
Ginamit ko ang sumusunod na hard- at software:
*Raspberry Pi 4
*raspi OS Bookworm, nang walang inirerekomendang software
*Ubuntu 22.04 LTS
*Qt 6.8
*QtCreator 14.02
Mga Tala
Kung mayroon kang isang laptop o desktop computer na may sapat na RAM at CPU cores, maaari mong gawin ang cross compilation sa isang virtual machine. Ngunit ginawa ko ang karanasan, na ang isang katutubong computer ay mas mabilis at gumagawa ng mas kaunting mga error.
Magkaroon ng isang pagtingin sa mga landas ng file at ip address sa aking mga halimbawa ng code at ayusin ang mga ito sa iyong mga pangangailangan.
Tuklasin ang mga bersyon ng gcc, ld at ldd. Source code ng parehong bersyon ay dapat na download upang bumuo ng cross compiler mamaya.
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.
I-append ang sumusunod na piraso ng code sa dulo ng ~/.bashrc at i-update ang mga pagbabago:
Bumuo ng pinakabagong bersyon ng cmake mula sa pinagmulan:
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
Bumuo ng gcc bilang isang cross compiler
Download kinakailangang source code. Dapat mong baguhin ang mga sumusunod na utos sa iyong mga pangangailangan. Para sa oras na ginagawa ko ang pahinang ito, ang mga ito ay:
GCC 12.2.0
Binutils 2.40(Bersyon ng LD)
Glibc 2.36(Bersyon ng LD)
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
Kopyahin ang mga header ng kernel sa folder sa itaas.
cd ~/gcc_all
cd linux
KERNEL=kernel7
make ARCH=arm64 INSTALL_HDR_PATH=/opt/cross-pi-gcc/aarch64-linux-gnu headers_install
Bumuo ng mga binutil.
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
I-edit ang gcc-12.2.0/libsanitizer/asan/asan_linux.cpp. Magdagdag ng sumusunod na piraso ng code.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
Gawin ang partial build ng 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
Bahagyang itayo ang 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
Bumalik sa GCC.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Tapusin ang pagtatayo ng glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Tapusin ang pagtatayo ng gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Sa puntong ito, mayroon kaming isang buong cross compiler toolchain na may gcc. Ang folder gcc_all ay hindi na kailangan pa. Pwede mo na itong tanggalin.</:code19:></:code18:></:code17:></:code16:></:code15:></:code14:></:code13:></:code12:></:code11:></:code10:></:code9:></:code8:></:code7:>
Pagbuo ng Qt6
Mayroong dalawang posibilidad upang bumuo ng Qt6. Mayroong isang "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) na bersyon upang i download, na naglalaman ng qtbase at lahat ng mga submodule. Ito ay napakabigat na bagay at nangangailangan ng maraming kapangyarihan at oras upang buuin ito.
Ang aking rekomendasyon ay, upang buuin ang qtbase bilang batayan at pagkatapos ay buuin lamang ang bawat submodule na kailangan mo nang hiwalay.
Gumawa ng mga folder para sa sysroot at qt6. Ginagawa ko ang mga folder na ito sa aking workspace/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
Lumikha ng file na may pangalang toolchain.cmake in ~/workspace/qt-rpi-cross-compilation/qt6.
Kailangan mong ayusin ang linya na "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" sa iyong kapaligiran.
Kung lumikha ka ng isang proyekto sa QtCreator, kailangan mong ayusin ang configuration ng "Run". Sa "Environment" kailangan mong idagdag:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Magdagdag ng mga Submodule ng Qt
Magdagdag ng module ng QML
Mag-download ng mga source code:
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
Kailangan mong suriin ang mga dependency sa ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml at ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Siguraduhing dapat ay binuo at i install muna ang mga kinakailangang module.