لقد كتبت عن تثبيت Raspbian على وحدة Raspberry Compute Module وإعداد التجميع المتقاطع لـ QtCreator على Ubuntu 20 LTS.
هذه التدوينة هي تحديث للإصدار - في هذا الوقت - الأحدث 6.8 من Qt، raspi OS Bookworm و Ubuntu 22.04 LTS.
المتطلبات الأساسية
لقد استخدمت البرنامج الصلب والبرامج التالية:
Raspberry Pi 4
raspi OS Bookworm ، بدون البرامج الموصى بها
Ubuntu 22.04 LTS
Qt 6.8
QtCreator 14.02
الملاحظات
إذا كان لديك جهاز كمبيوتر محمول أو كمبيوتر مكتبي به ذاكرة وصول عشوائي كافية وأنوية وحدة معالجة مركزية، يمكنك إجراء التجميع المتقاطع في جهاز افتراضي. ولكنني اكتشفت من تجربتي أن الكمبيوتر الأصلي أسرع بكثير وينتج أخطاء أقل.
ألقِ نظرة على مسارات الملفات وعناوين بروتوكول الإنترنت في أمثلة التعليمات البرمجية الخاصة بي وعدّلها حسب احتياجاتك.
اكتشف إصدارات gcc و ld و ldd. يجب تنزيل الشيفرة المصدرية لنفس الإصدار لبناء المحول البرمجي المتقاطع لاحقًا.
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.
قم بإلحاق الجزء التالي من التعليمات البرمجية في نهاية ~/.bashrc وقم بتحديث التغييرات:
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
إنشاء gcc كمترجم متقاطع
قم بتنزيل شفرة المصدر الضرورية. يجب عليك تعديل الأوامر التالية حسب احتياجاتك. في الوقت الذي أقوم فيه بإعداد هذه الصفحة، فهي
gcc 12.2.0
binutils 2.40 (إصدار ld)
glibc 2.36 (إصدار 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
بناء بينوتيلز.
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
قم بتحرير gcc-12.2.0/libsanitizer/asan/asan/asanlinux.cpp. أضف الجزء التالي من التعليمات البرمجية.
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
قم ببناء جزئي ل 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
بناء جزئي ل 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
العودة إلى gcc.
cd ~/gcc_all/build-gcc
make -j8 all-target-libgcc
make install-target-libgcc
الانتهاء من بناء Glibc.
cd ~/gcc_all/build-glibc
make -j8
make install
الانتهاء من بناء gcc.
cd ~/gcc_all/build-gcc
make -j8
make install
في هذه المرحلة، أصبح لدينا سلسلة أدوات متقاطعة كاملة مع gcc. لم تعد هناك حاجة إلى مجلد gcc_all. يمكنك حذفه.
بناء Qt6
هناك احتمالان لبناء Qt6. هناك نسخة "single" (https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.tar.xz) للتحميل، والتي تحتوي على qtbase وجميع الوحدات الفرعية. هذه أشياء ثقيلة جدًا وتحتاج إلى الكثير من الطاقة والوقت لتجميعها.
نصيحتي هي تجميع qtbase كأساس وبعد ذلك تجميع كل وحدة فرعية تحتاجها بشكل منفصل فقط.
أنشئ مجلدات لـ sysroot و qt6. أقوم بإنشاء هذه المجلدات في دليل التجميع المتقاطع في مساحة العمل/Qt-rpi-cross-compilation.
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
أنشئ ملفًا باسم toolchain.cmake في ~/workspace/qt-rpi-cross-compilation/qt6.
تحتاج إلى ضبط السطر "set(TARGET_SYSROOT /home/factory/workspace/qt-rpi-cross-compilation/rpi-sysroot)" على بيئتك.
إذا قمت بإنشاء مشروع في QtCreator، عليك ضبط إعدادات "Run". في "Environment" عليك إضافة:
-LD_LIBRARY_PATH=:/usr/local/qt6/lib/
إضافة وحدات فرعية Qt
إضافة وحدة QML
تنزيل رموز المصدر:
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
يجب عليك التحقق من التبعيات على ~/workspace/qt-rpi-cross-compilation/qt6/src/qtdeclarative-everywhere-src-6.8.0/dependencies.yaml و ~/workspace/qt-rpi-cross-compilation/qt6/src/qtshadertools-everywhere-src-6.8.0/dependencies.yaml.