Кросскомпиляция

Кросскомпиляция#

Предустановка#

  • Наличие образа installation-4.7.x-huawei1.iso

  • Наличие образа installation-1.7.x.iso

Установка#

  1. Установка образа п.1 Предустановка через Менеджер виртуальных машин (отдельная инструкция) Предлагаемый размер диска - 20Гб

  2. Установка образа п.2 Предустановка через Менеджер виртуальных машин. Предлагаемый размер диска - 35Гб

  3. Проверка сетевой доступности двух виртуальных машин выполнить на виртуальных машинах команду ip addr ping <адрес ВМ>

  4. На виртуальной машине с ОС 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
  1. Создаем папку для дальнейшего развертывания Qt и присваиваем права командами:

sudo mkdir /usr/local/qt
sudo chown <пользователь>:<группа> /usr/local/qt
  1. На виртуальной машине с ОС 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
  1. Создать папку, где будет храниться наш собранный Qt, командой и перейдем в нее:

mkdir ~/armqt
cd ~/armqt
  1. Создать папку с sysroot для кросс-компиляции командой:

mkdir sysroot sysroot/usr sysroot/opt
  1. Синхронизировать sysroot на хостовую вм с гостевой вм командами:

rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/lib sysroot
rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/usr/include sysroot/usr
rsync -avz <имя пользователя>@<IP-адрес гостевой вм>:/usr/lib sysroot/usr
  1. Необходимо заменить символьные ссылки sysroot на относительные с помощью скрипта:

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
  1. Необходимо скачать исходный код Qt версии 5.15.2 (название архива qt-everywhere-src-5.15.2.tar.xz).

  2. Разархивировать командой:

tar xf qt-everywhere-src-5.15.2.tar.xz

Разархивировать лучше в корень домашней папки! При работе из папки загрузок могут быть проблемы на шаге 14.

  1. Необходимо заменить название компиляторов в файле по пути 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
  1. Зайти в папку скачанного 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

Если будут ошибки про неподписанные исполняемые файл / библиотеки, сопровождающиеся уведомлениями астры, нужно в Панель управления ‣ Безопасность ‣ Политика безопасности ‣ Замкнутая программная среда ‣ Выключить.

  1. После успешной компиляции выполнить сборку командой:

make

дополнительно можно запустить make в несколько потоков с помощью команды: make -j4 (где 4 — количество потоков )

При неудачной сборке рекомендуем перезапустить сборку или выполнять ее в один поток.

  1. После успешной сборки выполнить установку командой:

make install
  1. Разворачиваем собранный Qt на гостевой вм командами:

cd ~/armqt
rsync -avz qt <имя пользователя>@<IP-адрес гостевой вм>:/usr/local
  1. Далее необходимо настроить Qt Creator на сборку нашего приложения.

Добавляем устройство в Qt Creator. Переходим в меню Tools ‣ Options, открываем раздел Devices и добавляем Generic Linux Device:

  • Ввести название

  • Нажать кнопку Add…

Рисунок 1
Рисунок 1
  1. Выбрать Generic Linux Device

Рисунок 2
Рисунок 2
  • Ввести наименование конфигурации

  • Ввести IP-адрес ГОСТЕВОЙ вм

  • Ввести логин пользователя

Рисунок 3
Рисунок 3
  1. Создать приватный ключ

Передать ключ на гостевую машину кнопкой Deploy

Рисунок 4
Рисунок 4

Произойдет проверка устройства

Рисунок 5
Рисунок 5

Идем в раздел Kits на вкладку Compilers и добавляем компиляторы для C и C++ (могут быть уже добавлены автоматически):

Рисунок 6
Рисунок 6
Рисунок 7
Рисунок 7

В том же разделе на вкладке Debuggers добавляем отладчик:

Рисунок 8
Рисунок 8

Дальше по списку вкладка Qt Versions, где мы добавляем версию Qt:

Рисунок 9
Рисунок 9

На вкладке Kits, добавим набор инструментов, которые мы будем использовать для ARM. Выбираем все, что мы добавили ранее:

Рисунок 10
Рисунок 10

Build device не трогаем (может оставаться desktop).

Теперь при создании нового проекта будет доступен созданный набор, названный нами - ARM Desktop. Переходим к созданию тестового проекта.

Создание проекта#

  1. Открыть File ‣ New File or Project

  2. Application (Qt) ‣ Qt Widgets Application

  3. Ввести наименование проекта и папку хранения.

  4. Выбрать Build system ‣ qmake

  5. Ввести наименования классов (можно оставить по умолчанию)

  6. При необходимости выбрать файл перевода (этот шаг можно пропустить и не заполнять)

  7. Выбрать Kit который мы ранее создали — ARM Desktop

  8. Нажать Завершить

  9. В настройках проекта в .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»

Рисунок 11
Рисунок 11
  • Запустить сборку и разворачивание проекта. При успешной сборке и разворачивании отобразиться окно на хостовой вм, а в папке на гостевой вм (/home/administrator/QT-projects/<название проекта>) появится наше приложение.