Кросскомпиляция#
Предустановка#
Наличие образа installation-4.7.x-huawei1.iso
Наличие образа installation-1.7.x.iso
Установка#
Установка образа п.1 Предустановка через Менеджер виртуальных машин (отдельная инструкция) Предлагаемый размер диска - 20Гб
Установка образа п.2 Предустановка через Менеджер виртуальных машин. Предлагаемый размер диска - 35Гб
Проверка сетевой доступности двух виртуальных машин выполнить на виртуальных машинах команду ip addr ping <адрес вм>
На виртуальной машине с ОС 4.7.x (далее гостевая вм) необходимо установить следующие пакеты командой:
sudo apt install openssh-server rsync qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver pkg-config mesa-utils libgles2-mesa-dev libdrm-dev libgbm-dev libxcb-icccm4-dev libxcb-util0-dev libxcb-shm0-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev icu-devtools libicu-dev libicu63 libxcb-xinput-dev libx11-xcb-dev libpcre2-dev libdouble-conversion-dev libssl-dev libjpeg-dev libpng-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-composite0-dev libxcb-cursor-dev libxcb-present-dev libqudev-dev libxrandr-dev libfontconfig1-dev libfreetype6-dev qtbase5-dev qtbase5-dev-tools
Создаем папку для дальнейшего развертывания Qt и присваиваем права командами:
sudo mkdir /usr/local/qt
sudo chown <пользователь>:<группа> /usr/local/qt
На виртуальной машине с ОС 1.7.x (далее хостовая вм) необходимо установить пакеты командой:
sudo apt install openssh-server g++ qtcreator gcc-8-arm-linux-gnueabi g++-8-arm-linux-gnueabi gdb-multiarch rsync gcc-8-aarch64-linux-gnu g++-8-aarch64-linux-gnu
Создать папку, где будет храниться наш собранный Qt, командой и перейдем в нее:
mkdir ~/armqt
cd ~/armqt
Создать папку с sysroot для кросс-компиляции командой:
mkdir sysroot sysroot/usr sysroot/opt
Синхронизировать sysroot на хостовую вм с гостевой вм командами:
rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/lib sysroot
rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/usr/include sysroot/usr
rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/usr/lib sysroot/usr
Необходимо заменить символьные ссылки sysroot на относительные с помощью скрипта:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Необходимо скачать исходный код Qt версии 5.15.2 (название архива qt-everywhere-src-5.15.2.tar.xz).
Разархивировать командой:
tar xf qt-everywhere-src-5.15.2.tar.xz
Разархивировать лучше в корень домашней папки! При работе из папки загрузок могут быть проблемы на шаге 14.
Необходимо заменить название компиляторов в файле по пути qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf в графе # modifications to g++.conf на:
aarch64-linux-gnu-gcc-8
aarch64-linux-gnu-g++-8
aarch64-linux-gnu-g++-8
aarch64-linux-gnu-g++-8
Зайти в папку скачанного Qt и выполнить конфигурацию следующей командой:
cd qt-everywhere-src-5.15.2
./configure -no-opengl -xplatform linux-aarch64-gnu-g++ -device-option CROSS_COMPILE=arm-linux-gnueabi -sysroot ~/armqt/sysroot -prefix /usr/local/qt -extprefix ~/armqt/qt -hostprefix ~/armqt/host-qt -opensource -confirm-license -release -skip serialport -skip serialbus -skip quick3d -skip location -nomake tests -nomake examples -v -recheck
более подробную информацию об опциях конфигурации можно посмотреть с помощью команды: configure -help
Примечание
При неудачной сборке рекомендуется удалить папку с Qt и повторить шаги 12-14
Если будут ошибки про неподписанные исполняемые файл / библиотеки, сопровождающиеся уведомлениями астры, нужно в панель управления → безопасность → политика безопасности → замкнутая программная среда → выключить.
После успешной компиляции выполнить сборку командой:
make
дополнительно можно запустить make в несколько потоков с помощью команды: make -j4 (где 4 — количество потоков )
При неудачной сборке рекомендуем перезапустить сборку или выполнять ее в один поток.
После успешной сборки выполнить установку командой:
make install
Разворачиваем собранный Qt на гостевой вм командами:
cd ~/armqt
rsync -avz qt <имя пользователя>@<IP-адрес гостевой вм>:/usr/local
Далее необходимо настроить Qt Creator на сборку нашего приложения.
Добавляем устройство в Qt Creator. Переходим в меню Tools - Options, открываем раздел Devices и добавляем Generic Linux Device:
Ввести название
Нажать кнопку Add…
Выбрать «Generic Linux Device»
Ввести наименование конфигурации
Ввести IP-адрес ГОСТЕВОЙ вм
Ввести логин пользователя
Создать приватный ключ
Передать ключ на гостевую машину кнопкой Deploy
Произойдет проверка устройства
Идем в раздел Kits на вкладку Compilers и добавляем компиляторы для C и C++ (могут быть уже добавлены автоматически):
В том же разделе на вкладке Debuggers добавляем отладчик:
Дальше по списку вкладка Qt Versions, где мы добавляем версию Qt:
На вкладке Kits, добавим набор инструментов, которые мы будем использовать для ARM. Выбираем все, что мы добавили ранее:
Build device не трогаем (может оставаться desktop).
Теперь при создании нового проекта будет доступен созданный набор, названный нами - ARM Desktop. Переходим к созданию тестового проекта.
Создание проекта#
Открыть
Ввести наименование проекта и папку хранения.
Выбрать
Ввести наименования классов (можно оставить по умолчанию)
При необходимости выбрать файл перевода (этот шаг можно пропустить и не заполнять)
Выбрать Kit который мы ранее создали — ARM Desktop
Нажать Завершить
В настройках проекта в .pro файле можно задать путь для установки приложения на ARM (на ГОСТЕВОЙ вм):
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /home/administrator/Qt_Projects/$${TARGET}
!isEmpty(target.path): INSTALLS += target
Перейти на вкладку Projects и установить чекбокс «Forward to local display»
Запустить сборку и разворачивание проекта. При успешной сборке и разворачивании отобразиться окно на хостовой вм, а в папке на гостевой вм (/home/administrator/QT-projects/<название проекта>) появится наше приложение.