Buildroot arm linux gnueabihf

Запуск Qt-приложений

Собрать Qt-приложение можно как в IDE Qt Creator, так и без неё. Будут продемонстрированы оба способа сборки.

Запуск приложений возможен несколькими способами:

../../_images/ogl-diagram.png

  • С использованием оконной системы (например X11).
  • Через OpenGL.
  • Через Framebuffer.

В данном руководстве описан только способ запуcка через OpenGL — EGLFS.

Запуск встроенных Qt-примеров на модулях Салют Linux test guide п. 3.8.

Сборка приложения выполняется на хосте. Для этого нужен кросс-компилятор и образ для запуска на модуле.

Сборка кросс-компилятора и образа прошивки SD

Для сборки приложения нужен кросс-компилятор arm-mcom02. Qt уже включен в defconfig mcom_defconfig .

Конфигурация buildroot

wget https://dist.elvees.com/mcom02/buildroot/nightly/latest/mcom02-buildroot-v3.1.4-111-gedf1e68-2022-03-10.tar.bz2 && \ tar xf mcom02-buildroot*.tar.bz2 && \ cd mcom02-buildroot*/ 

Данное руководство не описывает процесс подготовки ПК к запуску buildroot. Необходимо ознакомиться с Руководством программиста. И продолжить после того, как все подготовительные этапы пройдены.

Применить стандартый файл конфигурации для MCom02:

Добавить QWidgets

widgets по умолчанию не включены в defconfig:

Target packages ‣ Graphic libraries and applications‣Qt5‣widgets module‣Y

Там же можно включить и другие необходимые компоненты

../../_images/menuconfig-qt.png

Включить Event-ы в ядре Linux

Event-ы требуются, если в приложении нужно получать события устройств ввода, например, клавиатуру, мышь, тачпад и т.д.

Device Drivers ‣ Input device support ‣ Event interface ‣ Y

Читайте также:  Какие порты заняты линукс

Сборка

make linux-rebuild && \ make sdk && \ make 

make sdk выполняет сборку переносимого тулчейна c ARM-компилятором для 1892ВМ14Я. Дальнейшая работа будет демонстрироваться с этим тулчейном.

Это полезно, если сборка buildroot выполняется на одном ПК, а разработка Qt приложения — на другом.

Если нужно что-нибудь включить в сборку, то чтобы не пересобирать все с нуля: make -rebuild :

#например make qt5base-rebuild make sdk-rebuild make 

При добавлении нового элемента Qt нужно пересобрать SDK и образ mcom02-buildroot-sdcard.img (далее — sdcard.img ). Новый sdcard.img нужно загрузить на модуль.

После успешной сборки в директории buildroot/output/images/ создастся архив arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz .

Разработка Qt-приложений

Подготовка ПК для разработки приложений с GUI Qt:

mkdir ~/cross-compile && cd ~/cross-compile cp path_to_buildroot_images>/arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz . tar xzpf arm-buildroot*.tar.gz 

Пути в файлах тулчейна остались относительно директории на ПК, где выполнялась сборка. Выполнить relocate :

cd ~/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot ./relocate-sdk.sh 

Теперь пути установлены верные.

Основные элементы, которые нам понадобятся для настройки Qt creator:

  • SysRoot — ~/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot
  • GCC — ~/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc
  • G++ — ~/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-g++
  • qmake — ~/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/qmake

Настройка Qt Creator

Скачать qt-creator open-source можно с зеркала, либо с официального сайта с VPN.

Пример команды для загрузки в Linux:

wget http://www.mirrorservice.org/sites/download.qt-project.org/\ official_releases/qt/5.9/5.9.9/qt-opensource-linux-x64-5.9.9.run 

Версия 5.9 стала последней, где возможна оффлайн-установка.

Для установки без регистрации:

Пути до элементов Sysroot , GCC/G++ , qmake были указаны выше.

  1. Tools ‣ Options ‣ Kits
  2. Во вкладке Kits выбрать Add
  3. Ввести название, например Salute-EL24 Apply
  4. На вкладке Qt Versions Add
  5. Указать путь до qmake, назвать Qt-mcom02 .

../../_images/qt-name.png

../../_images/compiler.png

  • Device Type: Generic Linux Device .
  • Sysroot: .
  • Compiler: C: mcom02-GCC , C++: mcom02-G++ .
  • Qt-version Qt-mcom02 .

../../_images/kits-final.png

  • Сохранить настройки Apply .
    1. File ‣ New File or Project ‣ Qt Widget Application ‣ Choose
    2. Задать имя проекта и путь расположения
    3. Build system — qmake
    4. Далее Next до этапа Kits:выбрать Salute-EL24

    ../../_images/create-proj.png

    Проект создан.

    ../../_images/build.png

    • Projects ‣ Build Settings
    • При желании переопределить build directory .
    • Собрать проект — «Молоток» в нижнем углу.

    Сборка без Qt Creator

    1. Перейти в директорию с проектом (в ней должен быть файл *.pro )
    2. Создать переменную окружения, например CROSS :
    export CROSS=$HOME/cross-compile/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

    После сборки в этой же директории будет исполняемый файл.

    Важные моменты при создании проекта

    В main.cpp -> main() yстановить атрибут до строки QApplication a(argc, argv);

    QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); 

    Добавить перехватчик сигнала SIGINT в main():

    signal(SIGINT, signalHandler); 
    void signalHandler(int param)  std::cout <"SIGINT\n"; QApplication::exit(0); > 

    В конструкторе дочернего от QMainWindow класса добавить:

    std::ofstream ttyBind; ttyBind.open("/sys/class/vtconsole/vtcon1/bind"); if (ttyBind.is_open()) ttyBind  "0"; 

    Запись 0 в /sys/class/vtconsole/vtcon1/bind отключает вывод консоли на HDMI монитор.

    В деструкторе этого же класса:

    std::cout  "Exit application.\n"; std::ofstream ttyBind; ttyBind.open("/sys/class/vtconsole/vtcon1/bind"); if (ttyBind.is_open()) ttyBind  "1"; 

    Запись 1 возвращает нормальную работу консоли.

    Чтобы сделать правильный выход из приложения по Ctrl+C нужно самостоятельно реализовать обработку этой комбинации.

    Добавление курсора

    • Выбрать png изображение (32×32)
    • Конвертировать его в формат XPM
    • Полученное изображение добавить в Ресурсы Qt.
    • Для изображения курсора можно определить псевдоним, например x-cursor
    • В таком случае получить его можно следующим образом:
    QPixmap cursor_pixmap = QPixmap(":x-cursor"); QCursor cursor = QCursor(cursor_pixmap,0,0); QApplication::setOverrideCursor(cursor); 

    Запуск на комплекте отладочном Салют-ЭЛ24ОМ1 + Салют-ЭЛ24ПМ2

    Для корректной работы SD карту надо прошить sdcard.img из той же сборки, что и SDK. U-boot можно взять и прошить из стандартной сборки

    Скопировать исполняемый файл на модуль (с хоста):

    scp example root@board_ip>:/home 

    Установить переменные окружения:

    # включить eglfs export QT_QPA_EGLFS_INTEGRATION=eglfs_mali # задать путь до шрифтов export QT_QPA_FONTDIR=/usr/share/fonts/ubuntu/ # установка разрешения экрана export QT_QPA_EGLFS_PHYSICAL_WIDTH=1920 export QT_QPA_EGLFS_PHYSICAL_HEIGHT=1080 

    Для удобства запуска можно создать bash-скрипт. Образец скрипта в архиве с примером проекта.

    Если программа запускается с удаленного терминала (SSH или UART), виртуальный терминал (vtconsole on /dev/tty ) все равно будет получать события клавиатуры.

    При запуске с VT Qt-программа перехватывает и отключает ввод на /dev/tty . В связи с этим нужно реализовать выход из программы вручную.

    Источник

    Оцените статью
    Adblock
    detector