Tôi đã viết về việc cài đặt Raspbian trên Raspberry Compute Module và thiết lập biên dịch chéo cho QtCreator trên Ubuntu 20.
Bài đăng trên blog này là bản cập nhật cho - tại thời điểm này - phiên bản mới nhất 6.8 của Qt, raspi OS Bookworm và Ubuntu 22.04 LTS.
Điều kiện tiên quyết
Tôi đã sử dụng phần cứng và phần mềm sau:
*Raspberry Pi 4
*raspi OS Bookworm, không có phần mềm khuyến nghị
*Ubuntu 22.04 LTS
*Qt 6.8
*QtCreator 14.02
Ghi chú
Nếu bạn có máy tính xách tay hoặc máy tính để bàn có đủ RAM và lõi CPU, bạn có thể thực hiện biên dịch chéo trong máy ảo. Nhưng tôi đã thực hiện kinh nghiệm, rằng một máy tính gốc nhanh hơn nhiều và tạo ra ít lỗi hơn.
Hãy xem đường dẫn tệp và địa chỉ IP trong các ví dụ mã của tôi và điều chỉnh chúng theo nhu cầu của bạn.
Khám phá các phiên bản của gcc, ld và ldd. Mã nguồn của cùng một phiên bản nên được tải xuống để xây dựng trình biên dịch chéo sau này.
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.
Nối đoạn mã sau vào cuối ~ / .bashrc và cập nhật các thay đổi:
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
Xây dựng gcc như một trình biên dịch chéo
Tải xuống mã nguồn cần thiết. Bạn nên sửa đổi các lệnh sau theo nhu cầu của mình. Trong thời gian tôi tạo trang này, chúng là:
GCC 12.2.0
Binutils 2.40 (phiên bản LD)
Glibc 2.36 (phiên bản 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
Xây dựng 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
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
Xây dựng một phần 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
Quay lại gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
Hoàn thành xây dựng glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
Hoàn thiện xây dựng gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
Tại thời điểm này, chúng ta có một chuỗi công cụ trình biên dịch chéo đầy đủ với gcc. Thư mục gcc_all không cần nữa. Bạn có thể xóa nó.</:code19:></:code18:></:code17:></:code16:></:code15:></:code14:></:code13:></:code12:></:code11:></:code10:></:code9:></:code8:></:code7:>
Tòa nhà Qt6
Có hai khả năng để xây dựng Qt6. Có một phiên bản "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) để tải xuống, chứa qtbase và tất cả các mô-đun con. Đây là thứ rất nặng và cần nhiều năng lượng và thời gian để biên dịch nó.
Khuyến nghị của tôi là, để biên dịch qtbase làm cơ sở và sau đó chỉ biên dịch từng mô-đun con bạn cần riêng biệt.
Tạo thư mục cho sysroot và qt6. Tôi tạo các thư mục này trong thư mục workspace/qt-rpi-cross-compilation của mình.
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
Tạo một tập tin có tên toolchain.cmake trong ~ / workspace / qt-rpi-cross-compilation / qt6.
Bạn cần điều chỉnh dòng "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" cho môi trường của bạn.
Nếu bạn tạo một dự án trong QtCreator, bạn phải điều chỉnh cấu hình "Run". Tại "Environment" bạn phải thêm:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
Thêm các mô-đun con Qt
Thêm mô-đun QML
Tải mã nguồn:
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
Bạn phải kiểm tra các phụ thuộc tại ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml và ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.
Đảm bảo rằng các mô-đun cần thiết nên được xây dựng và cài đặt trước.