Одним из инструментов для создания приложений с графическим пользовательским интерфейсом является хорошо известный фреймворк Qt. Кроссплатформенность Qt позволяет нам успешно использовать его в том числе и для разработки на Raspberry Pi. Но здесь есть один нюанс, о котором мы и поговорим в этой статье.
В принципе, можно без проблем установить Qt Creator и сопутствующие библиотеки непосредственно на Raspberry. И, соответственно, на самой же плате и заниматься разработкой. Но! Компиляция требует достаточно серьезных мощностей, в связи с чем этот процесс на Raspberry будет занимать довольно продолжительное время, что, естественно, нежелательно.
Решение данной проблемы такое - разработка и дальнейшая компиляция выполняются на ПК, а уже готовое приложение загружается и используется на Raspberry Pi. Для реализации этого нам нужно будет кросс-компилировать Qt на хосте (ПК), чтобы затем можно было разворачивать и отлаживать приложения уже на плате. Итак, в отправной точке у нас в наличии:
- Raspberry Pi 4 с установленной Raspberry Pi OS.
- Хост - ПК с ОС Ubuntu 20.04 (моя версия на момент написания статьи).
- Подключение по SSH.
В дальнейшем часть команд будут выполняться на ПК, а часть - на Raspberry Pi, поэтому во избежание путаницы для каждой команды и каждого шага будем добавлять наглядные метки: [PC] или [Raspberry Pi].
Кросс-компиляция Qt.
Шаг 1. [Raspberry Pi]
Произведем необходимые настройки:
sudo raspi-config
Первым делом включаем поддержку OpenGL driver with fake KMS. Для этого переходим в Advanced Options - GL Driver:
И второй момент - настраиваем Raspberry Pi OS на загрузку без запуска графической оболочки. Идем в System Options - Boot / Auto Login:
Шаг 2. [Raspberry Pi]
Редактируем файл /etc/apt/sources.list, например, при помощи редактора nano:
sudo nano /etc/apt/sources.list
Нашей целью здесь является раскомментирование строки:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
Шаг 3. [Raspberry Pi]
Обновляем систему и устанавливаем необходимые пакеты:
sudo apt-get update sudo apt-get upgrade sudo apt-get build-dep qt5-qmake sudo apt-get build-dep libqt5gui5 sudo apt-get build-dep libqt5webengine-data sudo apt-get build-dep libqt5webkit5 sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver pkg-config mesa-utils libgles2-mesa-dev libdrm.dev libgbm.dev
Шаг 4. [Raspberry Pi]
Создаем на Raspberry Pi папку для пользователя pi для дальнейшего развертывания в ней Qt:
sudo mkdir /usr/local/qt sudo chown pi:pi /usr/local/qt
Шаг 5. [PC]
Теперь создаем папку на хосте и скачиваем тулчейн для кросс-компиляции:
mkdir ~/raspberrypi cd ~/raspberrypi wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
У меня 64-битная ОС, соответственно, версия - x86_64.
Шаг 6. [PC]
Создаем sysroot для кросс-компиляции под Raspberry Pi:
mkdir sysroot sysroot/usr sysroot/opt
Шаг 7. [PC]
Синхронизируем sysroot на ПК с Raspberry Pi:
rsync -avz pi@192.168.0.101:/lib sysroot rsync -avz pi@192.168.0.101:/usr/include sysroot/usr rsync -avz pi@192.168.0.101:/usr/lib sysroot/usr rsync -avz pi@192.168.0.101:/opt/vc sysroot/opt
Соответственно, здесь и далее имя пользователя (pi) и ip-адрес платы (192.168.0.101) нужно заменить на свои.
Шаг 8. [PC]
Заменяем символьные ссылки sysroot на относительные при помощи готового скрипта sysroot-relativelinks.py. Скачиваем скрипт и запускаем:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py chmod +x sysroot-relativelinks.py ./sysroot-relativelinks.py sysroot
Шаг 9. [PC]
Скачиваем исходники Qt. Будем использовать LTS версию 5.15.1:
git clone git://code.qt.io/qt/qtbase.git -b 5.15.1 cd qtbase
Шаг 10. [PC]
Выполняем конфигурацию перед сборкой. Для Raspberry Pi 4 аргументом -device будет linux-rasp-pi4-v3d-g++:
./configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/raspberrypi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspberrypi/sysroot -prefix /usr/local/qt -extprefix ~/raspberrypi/qt -hostprefix ~/raspberrypi/host-qt -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck
При успешном выполнении данного шага в консоли должны быть активированы следующие пункты:
При неудавшейся конфигурации или сборке не забываем выполнить полную очистку перед повторной попыткой:
git clean -dfx
Шаг 11. [PC]
Приготовления закончены, собираем:
make -j8 make install
Шаг 12. [PC]
Разворачиваем собранный Qt на Raspberry Pi:
cd ~/raspberrypi rsync -avz qt pi@192.168.0.101:/usr/local
И на этом процесс завершен 👍 Переходим к следующему аспекту - установке, запуску и настройке Qt Creator.
Qt Creator для Raspberry Pi.
Шаг 1. [PC]
Установка проста:
sudo apt install qtcreator
Шаг 2. [PC]
Добавляем устройство в Qt Creator. Переходим в меню Tools - Options, открываем раздел Devices и добавляем Generic Linux Device:
Здесь мы задали имя устройства, ip-адрес и имя пользователя. Кроме того, указываем приватный SSH-ключ для доступа к Raspberry Pi по SSH.
Шаг 3. [PC]
Идем в раздел Kits на вкладку Compilers и добавляем компиляторы для C и C++:
Шаг 4. [PC]
В том же разделе на вкладке Debuggers добавляем отладчик для работы с Raspberry. Но для этого предварительно устанавливаем:
sudo apt-get install gdb-multiarch
А затем уже возвращаемся в Debuggers:
Шаг 5. [PC]
Дальше по списку вкладка Qt Versions, где мы добавляем версию Qt:
Шаг 6. [PC]
И финишируем на вкладке Kits, добавив набор инструментов, которые мы будем использовать для Raspberry Pi. Собственно, систематизируем все, что мы добавили ранее:
Теперь при создании нового проекта будет доступен созданный набор, названный нами - Raspberry Pi. В общем-то, как раз и переходим к созданию тестового проекта.
Создание проекта.
Шаг 1. [PC]
Создаем проект и выбираем добавленный ранее набор инструментов:
Шаг 2. [PC]
В настройках проекта в .pro файле можно задать путь для установки приложения на Raspberry Pi. К примеру:
# Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /home/pi/Qt_Projects/$${TARGET} !isEmpty(target.path): INSTALLS += target
То есть в данном случае созданное приложение будет развернуто в папке /home/pi/Qt_Projects/ на Raspberry Pi.
Шаг 3. [PC]
Создаем простейшее приложение с одной кнопкой. По нажатию кнопки, а также в конструкторе и деструкторе MainWindow выдаем сообщение через qDebug().
Собираем приложение и разворачиваем на Raspberry Pi:
Итогом будет успешный запуск на Raspberry:
Собственно, цель достигнута. В завершение, разберем одну потенциальную проблему. При компиляции тестового проекта могут возникнуть ошибки вроде:
error: variable has incomplete type 'QApplication' error: unknown type name 'MainWindow'
Часто это связано с тем, что Ubuntu 20.04 по умолчанию использует clang-10. А Qt требует clang-8. Поэтому для устранения ошибок выполняем последовательно:
sudo apt install clang-8 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-8 100 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 100
Вот на этом точно все, спасибо за внимание и до скорого 🤝
Здравствуйте! Можно уточнить шаг 10 для pi3?
Добрый день!
Платы нет, к сожалению, проверить...
-device будет linux-rasp-pi3-g++
и -eglfs надо убрать.
Думаю должно работать
О! Спасибо, попробую.
Собирал Qt 15.1 для rpi4, никак не конфигурировадись GBM и EGLDevice. Решилось добавлением:
sudo apt-get install mesa-utils
sudo apt-get install libgles2-mesa-dev
sudo apt-get install libdrm.dev
sudo apt-get install libgbm.dev
И синхронизация затем
Здравствуйте!
У меня выходит ошибка на шаге 10.
Project ERROR: Cannot run target compiler '/home/pi/raspberrypi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++'. Output:
===================
===================
Maybe you forgot to setup the environment?
Но он у меня установлен. В Чём может быть дело? git clean -dfx не помогает.
Буду очень признателен за помощь!
Проверь путь.
./configure ... ~/raspberrypi
Спасибо
Project ERROR: Unknown module(s) in QT: quick
что делать?
Попробуй пакет qtdeclarative5-dev установить.
Здравствуйте! после выполнения этой команды
./configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/raspberrypi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspberrypi/sysroot -prefix /usr/local/qt -extprefix ~/raspberrypi/qt -hostprefix ~/raspberrypi/host-qt -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck
выходит вот такой вот результат.. Что я делаю не так? подскажите пожалуйста?!
Note: Also available for Linux: linux-clang linux-icc
Note: PKG_CONFIG_LIBDIR automatically set to /home/slk/raspberrypi/sysroot/usr/lib/pkgconfig:/home/slk/raspberrypi/sysroot/usr/share/pkgconfig:/home/slk/raspberrypi/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig
Note: PKG_CONFIG_SYSROOT_DIR automatically set to /home/slk/raspberrypi/sysroot
WARNING: Command line option -skip is only effective in top-level builds.
ERROR: Feature 'opengles2' was enabled, but the pre-condition '(config.win32 && !features.opengl-dynamic) || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.
ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && !config.wasm && features.egl' failed.
ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
На дворе середина мая 21-го. А новых статей нету((( Это связано с большой загруженностью автора или маленьким количеством посетителей сайта?
Да с декабря до мая вообще со временем плохо было... С посещаемостью нормально)
Камрады! Помогите, плиз! На 10-м шаге:
EGLFS EGLDevice ...................... no
EGLFS GBM ............................ no
кроме того вот такое после отработки:
Note: Also available for Linux: linux-clang linux-icc
Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing.
WARNING: Command line option -skip is only effective in top-level builds.
ERROR: Feature 'pkg-config' was enabled, but the pre-condition 'tests.pkg-config' failed.
До 10-го шага дошел только после отработки рекомендации Артема (спасибо): https://microtechnics.ru/raspberry-pi-i-qt-kross-kompilyacziya-qt-i-ustanovka-qt-creator/#comment-79251
Без этого не проходила синхронизация по трем пунктам:
rsync -avz pi@192.168.0.101:/usr/include sysroot/usr
rsync -avz pi@192.168.0.101:/usr/lib sysroot/usr
rsync -avz pi@192.168.0.101:/opt/vc sysroot/opt
Ну очень хочется QT!
Да! На компе QT ставлю на виртуальную машину UBUNTU 4.15.0-147-generic #151 64 bit
Попробуй:
sudo apt-get install pkg-config
Айййй-яййй! Спасибо, золотой! Успех!
Ахах, рад слышать)
Добрые утро, день, вечер! Еще вопросик. Можно ли сделать так, чтобы окно отлаживаемой программы выводилось на экран компа на котором работает QT, а не на монитор, подключенный к малинке?
Ну просто для хоста разрабатывать в качестве целевой платформы, а затем разворачивать на Raspberry.
У меня проект завязан на железо Raspberry (GPIO, SPI и пр.). Полную отладку на хосте не сделать.
Понятно... Тогда я, честно говоря, не уверен, что так получится, интересный вопрос
Здравствуйте! Когда пытаюсь запустить тестовое приложение из гайда RaspberryPi2EGLFS с qt.wiki получаю такое сообщение QXcbConnection: Could not connect to display, на форуме qt есть такая ошибка и говорять "you can link with rpath (does require recompilation).", но я не понимаю о чём они. А если из QTCreator вижу сообщение, что mkdir не может быть выполнен нет прав. Можете помочь?
А если через sudo на Raspberry запускать?
Тоже самое.
Пробовал ./qopenglwidget -platform eglfs получил * failed to add service - already in use?
Если ввожу в MobaXterm под windows программа открывается на стационаре.
А кстати у RPi boot mode - into Desktop?
Нет консоль. Но если я не правильно понял, как это посмотреть? Я сильно начинающий, могу говорит глупости =)
После включения платы обычный рабочий стол отображается? Настраивается в raspi-config, там что-то вроде "boot mode" должно быть.
Нет, консоль, как у вас в первом шаге
Добрый день! Есть новости?
Неа =), У меня получилось нормально всё собрать только на старой ubuntu 32bit и образом на малину 2017 года и QT 5.9. Это всё на Rasperry pi zero w.
Некоторые версии не хотя конфигурироваться 5.10 и 5.11, 5.15 не захотела собраться, сказала что её нужен С++11, хотя я вроде его подключал. 5.12 собралась, но вот с траблами. Пересобрал с другим образам Rasp оно говорит, что нет xcd, переключиться на платформу через -platforms EGLFS, он всёравно говорит что нет xcd.
Прописать в переменные
QT_QPA_PLATFOMRTHEME=qt5ct
DISPLAY=:0.0
XAUTHORITY=/home/pi/.Xauthrity
XDG_SESSION_TYPE=x11
Устал! Братцы, помогите!
Все было настроено и худо-бедно работало. Писал, компилил, отлаживал нормально. Потом на долгое время "отошел от дел", где-то с месяц даже ubuntu ни разу не запустил. Сегодня попытался возобновить работу. Ни один проект не компилится, в настройках QT ошибки повылазили. После нескольких часов "битвы за правду" решил с нуля поставить новую виртуалку ubunt-ы с того же дистрибутива с которого до этого ставил, поставил. Начал ставить QT на нее, но на шаге 8 команда ./sysroot-relativelinks.py sysroot вылетает с ошибкой /usr/bin/env: ‘python’: No such file or directory
Когда ставил первый раз - в этом месте вообще ни каких проблем не было.
ЗЫ
Сейчас посмотрел файла env в папке /usr/bin нету. Ну не копировать же его с первой ubuntы?
Прошу прощения! файл /usr/bin/env - имеется в наличии
Можно попробовать в качестве быстрого решения:
Если не сработает, надо будет углубиться в проблему немного.
Спасибо за подсказку!
Попробовал.
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python-is-python3
Буду снова переустанавливать ubuntu, возможно при установке что-то сбойнуло.
ubuntu до 20.04?
только-что обновил до 20.04.3 - та же песня.
Завтра снесу и поставлю заново.
Хм, попробуй:
Ай спасибо, уважаемый! Все пошлО!
Не долго радовался.
Опять как и раньше (https://microtechnics.ru/raspberry-pi-i-qt-kross-kompilyacziya-qt-i-ustanovka-qt-creator/#comment-79380) на 10-м шаге проблема, но немного другая:
QPA backends:
DirectFB ............................... no
EGLFS .................................. no
Соответственно раздела EGLFS details в отчете вообще нет.
И сообщение об ошибке уже другое:
Note: Also available for Linux: linux-clang linux-icc
WARNING: Command line option -skip is only effective in top-level builds.
ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && !config.wasm && features.egl' failed.
Тупо попробовал по образу и подобию Вашей подсказки для предыдущего случая сделать: sudo apt-get install eglfs. Однако халявы не вышло:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package eglfs
q@ubuntu:~/qtbase$
Тяжко быть дремучим.:(
Не долго радовался.
Опять как и раньше (https://microtechnics.ru/raspberry-pi-i-qt-kross-kompilyacziya-qt-i-ustanovka-qt-creator/#comment-79380) на 10-м шаге проблема, но немного другая:
QPA backends:
DirectFB ............................... no
EGLFS .................................. no
Соответственно раздела EGLFS details в отчете вообще нет.
И сообщение об ошибке уже другое:
Note: Also available for Linux: linux-clang linux-icc
WARNING: Command line option -skip is only effective in top-level builds.
ERROR: Feature 'eglfs' was enabled, but the pre-condition '!config.android && !config.darwin && !config.win32 && !config.wasm && features.egl' failed.
Тупо попробовал по образу и подобию Вашей подсказки для предыдущего случая сделать: sudo apt-get install eglfs. Однако халявы не вышло:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package eglfs
q@ubuntu:~/qtbase$
git clean -dfx делал
Тяжко быть дремучим.:(
Тааак, похоже я прозевал, что у меня синхронизация на шаге 7 не вся прошла.
Ура! После манипуляций по рекомендации Артема https://microtechnics.ru/raspberry-pi-i-qt-kross-kompilyacziya-qt-i-ustanovka-qt-creator/#comment-79251 (второй раз ему спасибо!) и повторения синхронизации 10-й шаг прошел как надо!
При сообщение
Picking 'qtbase-opensource-src' as source package instead of 'libqt5gui5'
Это
sudo apt-get build-dep qt4-x11 libqt5gui5
заминить на это
sudo apt-get build-dep -y qt4-x11 qtbase-opensource-src
Добрый день. У меня теперь вот такая проблема. В консоль при развёртывание выводит. Можете подсказать?
12:48:43: Запускается /home/pi/RaspDemo/RaspDemo ...
12:48:44: Внешний процесс аварийно завершился.
12:48:43: Этап развёртывания завершён.
12:48:43: Прошло времени: 00:04.
/opt/qt5pi/sysroot/usr/local/qt5pi/qml/QtQuick.2/plugins.qmltypes:11:9: Ожидаются только связки со скриптами name, prototype, defaultProperty, attachedType, exports, isSingleton, isCreatable, isComposite и exportMetaObjectRevisions, но не «file».
Возникли следующие предупреждения при разборе информации о типах QML библиотеки /opt/qt5pi/sysroot/usr/local/qt5pi/qml/Qt/labs/animation:
/opt/qt5pi/sysroot/usr/local/qt5pi/qml/Qt/labs/animation/plugins.qmltypes:11:9: Ожидаются только связки со скриптами name, prototype, defaultProperty, attachedType, exports, isSingleton, isCreatable, isComposite и exportMetaObjectRevisions, но не «file».
Добрый день, проект можете выслать?
Могу, но он пустой. Создаю "Приложение QT Quick-Пустое" и попробовал развернуть. Если создают Проект без QT пишет нет команд для запуска.
Наверно каких-то зависимостей/библиотек не хватает. Нет сейчас, к сожалению, платы под рукой, чтобы проверить.
Я помню что была команда, которая говорит какие пакеты нужны для запуска, можете её подсказать?
И сама малина пишет "недопустимая инструкция"
А не Qt Quick проект простейший работать будет?
Тоже выводит "недопустимая инструкция", даже если пример из qtbase пробую,причём из консоли компилирую, ещё до установки QTCreater.
А полный вывод?
Собрано точно для нужной версии платы?
Он только эту фразу выводит.
Если через file написано, что для ARM, EABI5.
А вообще да, как будто проц не тот.
Переделал всё с нуля
на rpi2b
QT 5.12.3
./configure -release -opengl es2 -device inux-rasp-pi2-g++ -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v -no-use-gold-linker
и получил
pi@raspberrypi:~ $ ./qopenglwidget
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
EGL Error : Could not create the egl surface: error = 0x3003
В общем я понял в чём проблема, для Rpi0/1 на arm6 надо использовать старый тулчэйн, новый делает под arm7 даже, если его просят другое. Осталось два открытых вопроса, почему вылезает 300b ошибка, нельзя создать поверхность, в примере qopenglwidget и почему когда нет рабочего стола ошибка, нет egl дисплея. С рабочем столом пустые окошки открываются =). Эх, хоть какой-то результат
Главное, что есть продвижение )
Добрый день. Подскажите как узнать какие устройства поддерживает qt на 10 шаге :
-device linux-rasp-pi4-v3d-g++. Мне необходимо совершенно другое устройство - orange pi pc 2, но как правильно указать его я не знаю. Компилятор подходящий.
По идее тут можно посмотреть - Qt/5.15.1/mingw81_32/mkspecs/devices
Разобрался где расположены - qtbase/mkspcecs
Вот только при сборке ругается на отсутствие crt1.o и crti.o
кстати, linux-rasp-pi3-vc4-g++ должно подойди под orange pi pc2(arm cortexA53). Осталось только разобраться с crt1.0 и crti.o
cannot find crt1.o: - победили?
cannot find -lm - пока не понял в чем дело.
sudo apt-get install gcc-multilib надо попробовать.
Да с этим справился. Надо не забывать чистить в случае не удачной сборки
а нет, не справился. Даже прилинковка не помогла - https://stackoverflow.com/questions/6329887/compiling-problems-cannot-find-crt1-o
у меня тоже ошибка cannot find crti.o вы как-то победили её ?
Добрый день!
Выполнил все пункты, всё работает, но есть одно "НО".
Для моего проекта на Pi4 нужно работать с камерой и подключенным по USB устройством. Для этого я обычно пользуюсь QCamera (из модуля QtMultimedia) и QtSerialPort. Но эти два модуля не входят в qtbase, который в статье рекомендуется качать с GITa. Соответственно, у меня есть 2 пути:
И я в обоих случаях сталкиваюсь с проблемами.
В первом варианте не могу нормально прописать команду конфигурации. Файлы конфигурации для qtbase и полной версии qt различаются, описанная в статье команда не подходит, все мои попытки написать свой вариант не привели к успеху.
Во втором варианте я пока не очень понял, как собрать библиотеки именно так, чтобы их подключить к рабочей версии qt, которая уже сейчас позволяет простейший код на raspberry выводить.
Буду рад любой помощи!
Я в ближайшее время буду подобное реализовывать, могу описать в статье. Тут только нюанс в том, что из-за вечной нехватки времени "ближайшее" - понятие растяжимое ) Надеюсь на майских или сразу после получится заняться...
Буду сражаться сам и ждать статью.
спасибо)
Пока не за что)
Снова здравствуйте!
У меня получилось решить проблему.
Всего то нужно было вместо qtbase скачать репозиторий с qt5, но обязательно ветку 5.15.1 - только с ней работает описанная в статье команда конфигурации (возможно, с какими-то еще работает, но если ветку не указать в команде клонирования, ничего не получится).
Итого для тех, кому нужно будет, набор команд:
Опция в последней команде позволяет не инициализировать "тяжелый" qtwebengine.
Фактически это то, чем нужно заменить 9 пункт в статье, и всё будет работать.
Причём можно выполнить эти команды даже "поверх" всех манипуляций, описанных в статье. Нужно будет только повторить пункты с 10 до 12.
Что касается того, как установить именно внешнюю библиотеку, решения я так и не нашел. Проект со скомпилированной библиотекой вроде как даже собирается в QtCreator, но при попытке запуска приложения (оно же развертывание на "малинке") появляется ошибка о невозможности найти файл библиотеки.
Отлично! Уверен и с внешней библиотекой решится так или иначе )
А какой вы подключили qmake из qt5 ?
Подключение qmake описано выше в статье в разделе "Qt Creator для Raspberry Pi".Всё делал так, как здесь, и всё работает, так что спасибо автору.
В статье выше очень плохое качество снимка. Можете дать путь к qmake в вашем случаи. Когда у вас все работает.
Не знаю, что не так у Вас с качеством снимка - я прекрасно могу прочитать, картинка к пункту 5 настройки Qt:
/home/pc_name/raspberrypi/host-qt/bin/qmake
Свои пути сейчас скопировать не могу, но они аналогичны
А у вас qserialPort работает? У меня не хочет выдает сообщение
Сигнал:
SIGSEGV
Назначение:
Segmentation fault
да, с QSerialPort всё хорошо.
Segmentation fault - Ошибка слишком обширная, чтобы я мог как-то помочь с тем, что не так. Если Qt библиотеку видит, проблемы явно не в сборке. Смотрите свой код.
Можно выслать тебе проект на посмотреть ?
Выслать то можно, но я не знаю, когда смогу посмотреть. Deadline по паре проектов близится, так что сейчас достаточно загружен, поэтому обещать не могу, что быстро совет дам какой-то.
Привет, высылай - aveal@microtechnics.ru.
Там в проекте не чего кроме qserialPort нет.
https://disk.yandex.ru/d/h2MJ2yVVIoRX0A
можно подробнее об ошибке?
На каком этапе возникает?
Этап компиляции или исполнения?
Сам проект собирается без ошибок?
Пробовали ли отладчиком искать, где проблема?
Проект собирается без ошибок. Запускается и падает на строчки serial->write("hello");
Если удалить строчку serial->write("hello"); то все работает.
Настройки надо после открытия порта устанавливать, насколько я помню:
Непосредственно к проблеме это может не относиться.
уверены ли Вы, что "/dev/ttyS0" - это нужное устройство?
Судя по тому, что написано у Вас в коде, порт открывается и в debug выводится "true"?
Я бы использовал что-то вроде этого:
и дальше уже функции записи данных в порт выполнял с учетом состояния коннекта.
Плюс, я так понимаю, Вы хотели отправлять команду с задержкой, для чего сделали таймер. Тогда следует убрать команду
из конструктора. Возможно, порт не успевает законнектиться, и Вы сразу шлёте ему "привет" (но это так, пальцем в небо).
Я скорее склоняюсь к тому, что "ttyS0" - это не то устройство, к которому следует подключаться. Как раз логично: Вы пытаетесь подключиться к системному порту, запись в который запрещена, в итоге Segmentation fault.
У меня в raspberry устройство, подключаемое по внешнему порту обозначено как "/dev/ttyACM0".
С /dev/ttyACM0 таже самая ошибка. QserialInfo возвращает
Port: ttyAMA0
Location: /dev/ttyacm0
Description:
Manufacturer:
Serial number:
Vendor Identifier:
Product Identifier:
Busy: No
Port: ttyS0
Location: /dev/ttyS0
Description:
Manufacturer:
Serial number:
Vendor Identifier:
Product Identifier:
Busy: No
ttyS0 отключил от ОС.
это не помогло.
Тогда дело в девайсе, то, что Алексей описал.
Что значит дело в девайсе? Через minicom S0 работает.
Попробуйте через терминал raspberry понять, по какому порту работает устройство: выведите список всех подключенных портов с физически подключенным вашим устройством и без него. Так поймёте точное название своего устройства. И к нему пытайтесь уже коннектиться. Возможно, QSerialInfo отрабатывает некорректно.
А вы что-то делали с настройками uart ? Ну там отключали блютус или как-то конфигурировали ?
У меня работали в зависимости от того куда подключены (к uart или usb) следующие варианты "ttyACM0"//"ttyUSB0"
Попробовал еще раз все собрать . Только применить ваши рекомендации по установки qt5. Устанавливал с нуля все удалил и далее по пунктам. Но на этапе make install получил:
Makefile:2283: ошибка выполнения рецепта для цели «.obj/qabstractgallery.o»
make[3]: *** [.obj/qabstractgallery.o] Ошибка 1
make[3]: выход из каталога «/home/alexey/raspberrypi/qt5/qtdocgallery/src/gallery»
Алексей. Вы случаем виртуальную клавиатуру не делали для qt5.15?
нет, не приходилось. я больше со спектрометрами и фотоаппаратурой работаю.
Вы пробовали делать авто монтирование и размонтирования usb флешки? И как можно определить конект флешки в qt5.15?
Средствами Qt не получится, как вариант периодически опрашивать QStorageInfo::mountedVolumes(), соответственно, смотреть на изменения.
Когда-то я пользовался QDeviceWatcher, воспоминаний минимум, и как с обновлением проекта неизвестно.
На 10-м шаге пишет "You don't seem to have 'make' or 'gmake' in your PATH.
Cannot proceed."
Кто-то сталкивался с этим, что делать??? нужно прописать make в PATH ???
Проблема решилась так
sudo apt-get update
sudo apt-get install build-essential
Но теперь возникла другая: "ERROR: Feature 'pkg-config' was enabled, but the pre-condition 'tests.pkg-config' failed."
sudo apt-get install pkg-config ?
Благодарю(я зарегистрировался), облазил кучу сайтов, всюду что-то непонятное, на следующий день сам додумался попробовать установить pkg-config (не сразу додумался что это может быть что-то внутрисистемное). После этого сразу увидел ваш ответ)))) надо было раньше глянуть.
В общем почти всё получилось...
Сейчас не отображает приложения на малине, пишет "Could not find DRM device!".
Я пробовал и в другом режиме отображать (и G1 и G2) и с иксами в обоих режимах... ничего.
приложения при этом собираются и я могу зайти на малину через vnc и запустить их мышкой, работают норм, но это не полноценный кросскомпил((((((
Я на raspberry pi 3b.
Может это быть связанным с eglfs ?
(у меня при компиляции накатило таких сообщений: "qeglfsbrcmintegration.cpp:74:5: error: ‘EGL_DISPMANX_WINDOW_T’ was not declared in this scope
EGL_DISPMANX_WINDOW_T *eglWindow = new EGL_DISPMANX_WINDOW_T;")
Точно такую проблему решал кому-то, но вот вообще не помню как решил...
Я немного покопался и обнаружил что на малине в папке opt/ нет папки vc/ со всем содержимым (вроде оно и нужно для eglfs ?).
Честно говоря я не знаю как её туда добавить, наверное нужно установить какой-то пакет(несколько пакетов), но я не знаю какой...
Сами файлы libGLESv2.so.2.0.0 и libEGL.so.1.1.0 вроде есть в usr/lib/arm-linux-gnueabihf
возможно проблема в том что в /etc/apt/sources.list у меня написано raspbian/ bullseye а не raspbian/ buster ...
Aveal вы пробовали подключать внешнее библиотеки типа libmodbus? Просто не знаю как подключить внешнею библиотеку при кросс-компиляции.
Технически механизм такой же, просто библиотеку тоже надо кросс-компилировать.
можете механизм по этапам расписать ?
https://doc.qt.io/qtcreator/creator-project-qmake-libraries.html
Попробовал ругается на отсутствие файла config.h.
Нашел вот такую статью https://russianblogs.com/article/22401555566/
Но не понял шаг 4. А именно
И после еще раз делать синхронизацию ?
Все этапы с 1 по 12 выполнены без ошибок. Настроил qt cretor. Запустил проект в отладки и получил
"Do you need "set solib-search-path" or "set sysroot"?Could not load shared library symbols for /usr/local/qt/plugins/imageformats/libqwebp.so." Как понял не видит sysroot. В qt creator в sysroot добавил "/home/alexey/raspberrypi/sysroot"
А кто нибудь ставил qt на разбери пи4 ? Попробовал сделал следующие
на таргете apt-get install -y libqwt-dev добавил .pro CONFIG += qwt , INCLUDEPATH += /usr/include/qwt , LIBS += -lqwt но qwt не заработал.
В чем будет отличаться процесс, если на целевой машине Ubuntu стоит и архитектура arm64, и на хост Ubuntu архитектура x86_64?