Qt для QNX
Поддерживаемые архитектуры и релизы QNX
С точки зрения платформы разработки приложений, Qt работает поверх QNX Neutrino RTOS. Системные интеграторы и разработчики приложений используют QNX SDP (Software Development Platform), который включает компоненты QNX Neutrino RTOS для различных целей и полный набор инструментов разработки.
Qt 5 в настоящее время протестирован и поддерживается на QNX SDP 7.0, с поддержкой 32-битных и 64-битных архитектур целевых систем:
-
ARMle-v7иx86(32-битная) -
AArch64leиx86-64(64-битная)
Поддержка 64-битных архитектур была добавлена в QNX SDP 7.0.
Предыдущие релизы
Более старые релизы QNX SDP и другие архитектуры также могут работать, но не подлежат регулярному построению и тестированию.
Для получения конкретного списка доступных плат, дисплеев и устройств ввода обратитесь в QNX Software Systems (info@qnx.com) или KDAB (qnx-info@kdab.com). Qt на QNX Neutrino OS также поддерживается Qt для разработки устройств, для получения дополнительной информации свяжитесь с компанией Qt.
Поддерживаемые модули
Практически все основные модули Qt модули и некоторые дополнения поддерживаются на QNX Neutrino RTOS. Подробную информацию см. на странице состояния на сайте Qt Project wiki.
Если вы собираете Qt из архива выпущенного исходного кода, инструмент configure гарантирует, что сборка будет выполнена только для модулей, которые, как известно, собираются для указанной целевой системы. Кроме того, вы можете явно исключить неподдерживаемые или ненужные модули из сборки с помощью параметра -skip <module> при запуске инструмента configure.
Если вы собираете Qt непосредственно из репозитория Git, вы должны инициализировать репозиторий только модулями, которые поддерживаются или отдельно собрать и установить модули. Это помогает предотвратить неожиданные проблемы со сборкой.
Требования к сборке
Для сборки Qt 5 необходимы следующие пакеты, доступные на сайте QNX (регистрация требуется для доступа к загрузкам):
Компилятор и другие части инструментальной цепочки предоставляются в пакетах SDP. Вам не нужно устанавливать какие-либо дополнительные компоненты на ваш хост-ПК. Однако рекомендуется убедиться, что вы можете собрать Qt для целевой системы на настольном компьютере. Подробнее см. в разделе Строительство исходных кодов Qt. Все поддерживаемые целевые системы QNX Neutrino RTOS полностью интегрированы в makefiles, предоставленные в исходном коде Qt.
При настройке сборки Qt необходимо указать имя целевой системы для кросс-компиляции:
| Архитектура | Настройка целевой системы кросс-компиляции |
|---|---|
ARMle-v7 (32-битная) |
./configure -xplatform qnx-armle-v7-qcc |
AArch64le (64-битная) |
./configure -xplatform qnx-aarch64le-qcc |
x86 (32-битная) |
./configure -xplatform qnx-x86-qcc |
x86-64 (64-битная) |
./configure -xplatform qnx-x86-64-qcc |
Инструмент configure выполняет различные тесты для обнаружения возможностей SDP и его дополнений. Он устанавливает соответствующие флаги в зависимости от результатов тестов. При необходимости проверьте сводку конфигурации в консоли или в ./qtbase/config.summary, и установите другие флаги вручную, если необходимо.
Независимо от платформы, для которой вы собираете, рассмотрите использование параметра -prefix с configure, например, -prefix<Qt-install-path>. Это задает папку назначения, в которую Qt будет установлен, и размещает все артефакты сборки за пределами дерева исходного кода.
Для получения дополнительной информации см. Параметры конфигурации Qt.
Требования к целевой системе Qt Runtime
QNX Software Systems предоставляет решения для программного обеспечения, позволяющие создавать встраиваемые устройства. Это включает в себя создание загрузочных образов QNX Neutrino RTOS гибким способом. Несмотря на то, что QNX предоставляет несколько справочных скриптов для создания образа ОС, рано или поздно вам придется внести изменения или вы можете решить создать образ ОС с нуля. Qt полагается на существование нескольких компонентов сторонних разработчиков и выбранных сервисов ОС. Из-за этого загрузочные образы QNX Neutrino RTOS для целевого устройства, на котором работает Qt, должны соответствовать нескольким требованиям, чтобы гарантировать, что Qt работает должным образом. В разделах ниже перечислены ключевые компоненты для Qt.
Подсистема графики экрана QNX
Прежде чем любое приложение Qt сможет быть запущено, должна быть запущена подсистема графики экрана QNX (также называемая просто "Экран"). Экран состоит не только из драйвера, но также включает несколько утилит и других сервисов, используемых Qt. Это также включает обработку событий мыши и клавиатуры. Вы можете убедиться, что Экран правильно настроен и работает, проверив, что графическое приложение, например, gles2-gears, может быть запущено и работает без проблем. Большинство последних скриптов сборки ОС в SDP включают разделы со всеми компонентами и командными запусками для Экран. Используйте их в качестве справки.
Поддержка IPv6
Сетевой стек Qt требует поддержки IPv6, независимо от того, используется ли фактическая сеть IPv4 или IPv6. Это означает, что io-pkt-v6-hc должен работать, а не io-pkt-v4.
Устройство генерации случайных чисел /dev/random
Qt требует, чтобы /dev/random был присутствующим и функциональным. Запустите его перед запуском любого приложения Qt или во время загрузки системы:
random -p waitfor /dev/random
Системный логгер
QNX предоставляет slog2 систему ведения журнала, адаптированную к особенностям встраиваемых систем. Основным преимуществом является гораздо лучшая производительность, чем вывод текста в файлы. Qt по умолчанию использует эту систему для любого вывода журнала, проходящего через QDebug на QNX Neutrino RTOS. Сервис slog2 должен быть запущен во время загрузки системы. Сервис slog2 также полагается на существование папки /tmp, которая также должна быть настроена, например:
[type=link] /tmp=/dev/shmem display_msg "Starting slogger2..." slogger2 -U1001:1000 & waitfor /dev/slog2
Переменные окружения
Существует набор переменных среды, которые вы должны установить при запуске приложения Qt. Большинство из них не специфичны для QNX Neutrino RTOS. Они все же упомянуты здесь, так как знание их просто экономит много времени в случае проблем.
Расположение Qt Runtime
Если вы не собирали Qt с включенным RPATH, вы можете разместить компоненты Qt runtime в любой папке в файловой системе. Следующие переменные среды должны указывать на действительные расположения, предполагая, что установка Qt находится в <Qt-install-path>:
-
LD_LIBRARY_PATHдолжен содержать путь к библиотекам Qt в<Qt-install-path>/lib -
QT_PLUGIN_PATHопределяет, где расположены плагины Qt. Он должен быть установлен в<Qt-install-path>/plugins -
QML2_IMPORT_PATHопределяет, где находятся плагины Qt Quick. Он должен быть установлен в<Qt-install-path>/qml - Если Qt не использует fontconfig, вы должны либо указать путь к шрифтам с помощью
QT_QPA_FONTDIR, или поместить шрифты в<Qt-install-path>/lib/fonts, что является стандартным расположением шрифтов.
Физический размер экрана
Qt нуждается в информации о физических размерах подключенного дисплея, чтобы определить значения DPI и, следовательно, установить правильные размеры шрифтов. Обычно эта информация предоставляется экраном. В некоторых случаях вы можете увидеть недействительный размер экрана, например, 0 ммx0 мм. В таком случае Qt требует переменной среды QQNX_PHYSICAL_SCREEN_SIZE, установленной на соответствующие значения, чтобы получить необходимую информацию. Если приложения Qt завершаются с сообщением об ошибке, говорящим, что физический размер экрана не может быть определен, установите переменную следующим образом, прежде чем запускать приложение Qt:
export QQNX_PHYSICAL_SCREEN_SIZE=150,100
чтобы сообщить Qt, что в данном случае ширина экрана составляет 150 мм, а высота — 100 мм. Физический размер экрана измеряется в миллиметрах (мм) и должен соответствовать фактическому физическому размеру дисплея в конечной конфигурации.
Поиск проблем при первом запуске приложения Qt
Единственным недостатком гибкости, предоставляемой QNX Neutrino RTOS, является риск того, что среда выполнения на вашей целевой системе немного отличается от ожидаемого Qt. Это распространенная причина, по которой приложение Qt на новой целевой системе не запускается. Несколько общих переменных среды могут помочь определить основную причину проблем:
- Установка
QT_DEBUG_PLUGINSв1помогает увидеть, почему плагин QPA не может загрузиться. - Установка
LD_DEBUGв1помогает увидеть, где и как загружаются общие библиотеки. Это может быть использовано в сочетании сQT_DEBUG_PLUGINSв случае, если плагин не смог загрузиться, так как не смог загрузить другие общие библиотеки. - Установка
QT_LOGGING_TO_CONSOLEзаставит отправлять все сообщения журнала вstderrвместоslog2. Это полезно для анализа проблем с запуском приложения, так как вам не нужно использовать другой инструмент, чтобы увидеть сообщения.
Библиотеки сторонних разработчиков
Убедитесь, что ваш системный образ содержит следующие дополнительные библиотеки сторонних разработчиков, которые не всегда включены в минимальные изображения QNX Neutrino RTOS:
libfontconfiglibfreetypelibiconvlibicui18nlibicudatalibicuuclibpng14libxml2libsqlite3libssllibcrypto
Примечание: Это неполный список общих библиотек, используемых Qt в QNX Neutrino OS. Многие общие библиотеки уже доступны в типичном образе ОС или включены другими частями системы, например, Screen.
Доступ к переменным среды
setconf и getconf необходимы для доступа к переменным среды POSIX, особенно для имени хоста, времени и даты.
Требования к целевой системе Qt Creator
Целевая система QNX Neutrino RTOS, используемая для разработки с Qt Creator, должна предоставлять несколько дополнительных командных инструментов и сервисов.
SSH
Развёртывание и запуск приложений удалённо зависят от SSH. Демон SSH (sshd) должен быть установлен и запущен во время запуска системы. Обратите внимание, что он требует /dev/random, что уже упоминалось. Также он ожидает правильной настройки соответствующих прав доступа к конфигурационным файлам. Это делает невозможным запуск SSH с файловой системы, которая не поддерживает полные права доступа, например, FAT.
SCP и SFTP
Утилиты scp и sftp используются Qt Creator для развёртывания и должны быть доступны на целевом устройстве. Кроме того, демон inetd должен быть запущен при запуске системы, что запускает соответствующие службы, включая FTP при необходимости.
Инструменты QNX для удаленной отладки
Удаленная отладка требует, чтобы pdebug (отладчик на уровне процессов) работал на устройстве разработки. Обычно он запускается процессом qconn, который также предоставляет Qt Creator различные сведения о процессах. В целом Qt Creator использует те же интерфейсы удалённой отладки, что и среда QNX Momentics IDE, представленная в SDP. Для получения более подробной информации см. соответствующую документацию QNX.
Другие утилиты на целевом устройстве
QNX предоставляет пакеты поддержки платформ (BSP) для многих распространённых платформ и их отдельных вариантов. Однако, если вам нужен BSP для платы, которую QNX не предоставляет, вы можете изменить существующий или разработать свой собственный.
При разработке BSP для вашей платы вы должны включить следующие утилиты, чтобы позволить Qt Creator запускать, отлаживать и останавливать приложения на устройствах QNX:
awkcatgrepkillnetstatprintprintfpsreadsedsleepslog2infotarzipunameunzip
Утилиты должны быть в стандартном расположении, например, /bin или /usr/bin. В качестве альтернативы вы можете использовать файл ~/.ssh/environment, чтобы задать переменные для удалённых команд, такие как PATH. Кроме того, необходимо установить enable PermitUserEnvironment в конфигурации SSH-демона.
Запустите тест при настройке нового целевого устройства в Qt Creator, чтобы убедиться, что все необходимые компоненты доступны и запущены.
Дополнительную информацию о модификации или разработке BSP для вашей платы см. в разделе Настройка BSP в документации по разработке QNX.
Папка назначения развёртывания
Qt Creator разворачивает приложение на целевое устройство перед запуском удалённо. На большинстве встраиваемых устройств это просто копирование двоичных файлов приложения и связанных данных в папку на целевом устройстве. Однако нет стандарта, как называется и где находится эта папка. В достаточно большом количестве конфигураций используется /tmp, которая часто отображается на дисковом пространстве ОЗУ. Это может вызвать путаницу, так как развернутые приложения исчезают при следующем выключении устройства.
Ещё одним популярным целевым местом является /opt. Эта папка расположена в разделах только для чтения на многих системах, что делает развёртывание невозможным. Убедитесь, что вы используете папку назначения, которая соответствует вашим потребностям. Вы можете установить её в переменной install.path в файле .pro вашего проекта, см. Установку файлов в документации qmake для более подробной информации.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qnx.html