Пока в разгаре новогодние праздники захотелось попробовать в действии Raspberry Pi (Здесь для модели 3 B+, но так же подходит и для 1,2), а именно чего-нибудь для неё написать, хотя бы Hello World с помощью Qt. Ставить весь Qt на саму малинку как-то долго, да и пока на ней компилируется простейшая программа можно упиться в усмерть, поэтому будем настраивать кроссс-компиляцию, что бы всю разработку вести на своём пк (Ubuntu 16.10 x64).
Приступаем.
[tip]Обновлено для Qt 5.9.1 и Raspbian 2017-09-08 Stretch для Raspberry PI3 Model B[/tip] [tip]Обновлено для Qt 5.12.2 и Raspbian 2018-11-13 Stretch под Raspberry PI3 Model B+ [/tip]1. Первым делом необходимо скачать образ ОС для малинки, это будет raspbian (можно и Lite (без X), тогда получится сделать «kiosk mode») и залить её на SD карточку, которая уже должна быть воткнута.
mkdir ~/Projects/RaspberryPI
cd ~/Projects/RaspberryPI
wget https://downloads.raspberrypi.org/raspbian_latest # Обычный
#Если нужен облёгчённый, бек иксов: wget https://downloads.raspberrypi.org/raspbian_lite_latest
unzip raspbian_latest
#unzip raspbian_lite_latest
sudo dd if=2018-11-13-raspbian-stretch.img of=/dev/mmcblk0 bs=4M
#sudo dd if=2018-11-13-raspbian-stretch-lite.img of=/dev/mmcblk0 bs=4M
sync
[tip]Что бы узнать адрес флэшки, наберите lsblk[/tip]
Если так случалось, что нет картридера, то залить прошивку можно и на винде с помощью win32diskimager (запускать от рута)
2. Когда заливка завершиться, вытаскиваем СДшку и загружаем с неё малинку.
Теперь её немножко надо настроить, переходим Menu -> Preferences -> Raspberry Pi configuration.
Либо в консольке(Menu->Accessories->Terminal) :
sudo raspi-config
Расширяем систему на весь объём флэшки: Advanced options->expand filesystem,
включаем ssh в Interfacing options,
подрубаемся к wifi,
в Advanced options->GL Driver включаем GL (Full KMS) и перезагружаемся.
Вбиваем в консольке ifconfig, запоминаем айпишник, на этом пока что всё.
Кстати, о настройке WIFI raspbian из консоли (если без графического интерфейса, т.е. lite версия):
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
#Дописываем:
network={
ssid="The_ESSID_from_earlier"
psk="Your_wifi_password"
}
#Выходим с сохранением и перезагружаемся:
sudo reboot
3. Приконнектимся к малинке по ssh, раскомментим получение исходников пакетов, установим нужные пакеты и создадим нужные папки
ssh pi@192.168.2.101 (пароль по дефолту "raspberry")
sudo nano /etc/apt/sources.list #расскомментить строчку с deb-src
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update #Обновим ядро и прочее основное
reboot
sudo apt-get install -y libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0
sudo apt-get install -y libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev
sudo apt-get install -y libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxcb-xinerama0-dev
sudo apt-get install -y build-essential libgl1-mesa-dev freeglut3 freeglut3-dev mesa-common-dev libglapi-mesa libosmesa6 mesa-utils
sudo apt-get install -y libwayland-egl1-mesa libraspberrypi-dev freeglut3-dev freeglut3 libegl1-mesa libegl1-mesa-dev libegl1-mesa-drivers libepoxy-dev libepoxy0 libgbm-dev libgbm1 libgegl-0.3-0 libgegl-dev libva-egl1 mesa-utils-extra
sudo apt-get install -y libraspberrypi0 libva-egl1 libegl1-mesa libegl1-mesa-drivers gegl
sudo apt-get install -y libglfw3-dev libgles2-mesa-dev
sudo apt-get build-dep qt4-x11 #ради зависимостей
sudo apt-get build-dep libqt5gui5 #ради зависимостей
#Чувствую, большую половину из этого не надо, но я не знаю какую точно т.к. решал проблемы с OpenGL и прочичи либами
sudo mkdir /usr/local/qt5pi
sudo chmod -R 777 /usr/local/qt5pi
4. Так, возвращаемся к хосту, качаем тулчейн:
mkdir raspi
cd raspi
git clone https://github.com/raspberrypi/tools
5. Создаём sysroot и через rsync синхронизируем его с малиновым, что бы оттуда взять заголовочники, либы и компилятор
IP=192.168.2.101 # айпишник малинки
rsync -avz pi@$IP:/lib sysroot # опять идём пить кофе
rsync -avz pi@$IP:/usr/include sysroot/usr
rsync -avz pi@$IP:/usr/lib sysroot/usr # можно сходить просраться
rsync -avz pi@$IP:/opt/vc sysroot/opt
6. Дальше необходимо поправить символьные ссылки, что бы они были относительно нашей скопированной sysroot, для этого есть готовый скриптик, качаем и запускаем:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
7. Теперь можно склонировать Qt, сконфигурировать и запустить на компиляцию
git clone git://code.qt.io/qt/qt5.git QtSources
cd QtSources
perl init-repository
git checkout 5.12 # Если нужно 5.9, то проверял с 5.9.1
git submodule update --recursive
BASEPATH=~/Projects/RaspberryPI/raspi # базовый путь, где все наши манипуляции происходят (без слэша на конце)
./configure -skip wayland -skip script -skip webengine -no-pch -no-kms -no-xcb -no-use-gold-linker -nomake tests -nomake examples -reduce-exports -eglfs -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=$BASEPATH/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot $BASEPATH/sysroot -opensource -confirm-license -make libs -prefix $BASEPATH/qt5pi -extprefix $BASEPATH/qt5pi -hostprefix $BASEPATH/qt5 -v
make -j4 # и поспим часик (4 - количество ядер проца, для ускорения)
make install
Чтиво по некоторым фичам: https://doc.qt.io/qt-5/embedded-linux.html, https://doc.qt.io/archives/qt-5.8/configure-options.html, https://doc.qt.io/qt-5/linux-requirements.html, https://doc.qt.io/archives/qt-4.8/configure-options.html
[tip]Если возникли ошибки при сборке и нужно переконфигурировать с другими параметрами, не забудьте удалить предыдущий результат, набрав «git clean -dxf» и «make clean» иначе будет ещё хуже =) [/tip] [tip]Для Qt < 5.9.1 нужен -device linux-rpi3-g++[/tip] [tip]При конфигурации отключён QtWebKit! Для Qt < 5.10 нужно указывать «-skip webkit» Кому нужен уберите «-skip webengine». [/tip] [tip]Возможно, нужно так же указать -qt-xcb (и убрать -no-xcb), что бы нормально работали QWidgets, у меня же все приложения только с QML. Так же нужно указать «-platform xcb» если у вас gui версия (обычная, а не lite)[/tip] [warning]При ошибке с JavaScriptCore/wtf/Platform.h:370:6: error: #error «Not supported ARM architecture» добавьте к конфигурации «-skip script» или добавьте к make флаг:»make CFLAGS=»${CFLAGS}-D__ARM_ARCH_7M__»» (взял из /3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h)[/warning] [warning]При ошибке с PCRE2: PCRE2_CODE_UNIT_WIDTH, LINK_SIZE и прочие мессаджы с ней связанные (отвечает за регулярные выражения) можно либо отключить ( в конфиге «-no-pcre»), но почему-то у меня не было такого параметра,либо прописать все дефайны вручную: make CFLAGS=»${CFLAGS} -ldl -DPCRE2_CODE_UNIT_WIDTH=16 -DHAVE_INTTYPES_H=1 -DHAVE_MEMMOVE=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STDINT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DLINK_SIZE=2 -DMATCH_LIMIT=10000000 -DMATCH_LIMIT_RECURSION=10000000 -DMAX_NAME_COUNT=10000 -DMAX_NAME_SIZE=32 -DNEWLINE_DEFAULT=2 -DPARENS_NEST_LIMIT=250 -DSUPPORT_UNICODE» причина этому — почему-то не подключается файл config.h (Расположен qtbase/src/3rdparty/pcre2/src/config.h), где прописаны все эти дефайны. [/warning] [warning]При ошибке с zlib, можно её отключить -no-zlib (скорее всего каких-то либ на хосте нехватает, но т.к. мне было не важно, не стал разбираться, остальных проблем хватило)[/warning] [warning]При ошибке «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.» ИЛИ «In function `QEGLPlatformContext::getProcAddress(char const*)’:
qeglplatformcontext.cpp:(.text+0xa4): undefined reference to `dlsym'» для Raspbian Stretch нужно подредактировать nano ./qtbase/mkspecs/devices/linux-rasp-pi3-g++/qmake.conf и изменить названия либ «-lEGL» и «-lGLESv2» на «-lbrcmEGL» и «-lbrcmGLESv2» так как названия в /opt/vc/lib/ отличаются.
Возможно лучше будет использовать в -device «linux-rasp-pi3-vc4-g++»
Так же возможна проблема с тем, что EGLFS Raspberry Pi ………………. no, в таком случае файлик нужно поправить, указав правильные пути.
Моя версия:
[spoiler]
include(../common/linux_device_pre.conf)
QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/opt/vc/include \
$$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \
$$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
QMAKE_LIBS_EGL = -lEGL -lGLESv2
QMAKE_LIBS_OPENVG = -lEGL -lOpenVG -lGLESv2
QMAKE_INCDIR_BCM_HOST = $$[QT_SYSROOT]/opt/vc/include
QMAKE_LIBDIR_BCM_HOST = $$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBS_BCM_HOST = -lbcm_host
DISTRO_OPTS += deb-multi-arch
DISTRO_OPTS += hard-float
QMAKE_CFLAGS += -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
EGLFS_DEVICE_INTEGRATION = eglfs_brcm
include(../common/linux_arm_device_post.conf)
load(qt_config)
[/spoiler] [/warning] [warning]В случае ошибки «error: invalid use of incomplete type ‘X509 {aka struct x509_st}’«, то это баг Qt: https://bugreports.qt.io/browse/QTBUG-52905. Исправления будут в версии 5.10, так что либо отключайте ssl при конфигурации: «-no-openssl» либо даунгрейдите openssl до 1.0[/warning]8. Теперь закинем на малинку скомпилированные библиотеки и заголовочники Qt:
cd ../
rsync -avz qt5pi pi@$IP:/usr/local
9. Ну и можно собрать пример и закинуть на малинку:
cd QtSources/qtbase/examples/opengl/qopenglwidget
$BASEPATH/qt5/bin/qmake
make
scp qopenglwidget pi@$IP:/home/pi
10. На девайсе необходимо дать знать линковщику о наших либах, а так же создать qt.conf в папке, откуда будем запускать все Qt приложения:
ssh pi@192.168.2.101 (пароль по дефолту "raspberry")
echo /usr/local/qt5pi/lib | sudo tee /etc/ld.so.conf.d/00-qt5pi.conf
echo QT_PLUGIN_PATH=/usr/local/qt5pi/plugins/ | sudo tee -a /etc/environment
echo QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu | sudo tee -a /etc/environment
printf "[Paths]\nPlugins=/usr/local/qt5pi/plugins\nQml2Imports=/usr/local/qt5pi/qml" | sudo tee ~/qt.conf
cd /usr/local/qt5pi/lib
sudo ldconfig
[warning]При проблеме «QFontDatabase: Cannot find font directory /home/pi/lib/fonts.Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.» нужно указать, где лежат шрифты, для этого добавим переменную окружения (выше уже добавлена) : «echo QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu | sudo tee -a /etc/environment» видимо какую-то опцию забыл в конфиге добавить, наверное «-fontconfig«. [/warning]
Перезагружаем малинку.
11. Но запускать ещё рано, у rasbian по дефолту грузиться mesa драйвер и opengl пахать не будет по нормальному, поэтому заставим её использовать нужный:
[warning]Не факт! Сначала всё таки лучше попробовать запустить =)[/warning]sudo rm /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
sudo ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
sudo ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1
sudo ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2
Вот теперь наконец-то можно запустить пример! Он на малинке /home/pi/qopenglwidget
[tip] Если не запускается, в консольке прописываемexport QT_LOGGING_RULES=qt.qpa.*=true ./qopenglwidget
И гуглим ошибки.
Если совсем не запускается, то прописываем:
ldd ./qopenglwidget
И смотрим по правильному адресу ли лежат библиотеки и всех ли хватает. Потом гуглим на тему ldconfig.
Если будет в выводе:
* failed to add service - already in use?
То подправим файлик «sudo nano /boot/config.txt», убрав «dtoverlay=vc4-kms-v3d» (или закомментировать) и перезагрузиться.
Возможно, стоит при конфигурации указать «-device linux-rasp-pi3-vc4-g++» (при необходимости подправить названия библиотек).
[/tip]12. С этим разобрались, теперь настроим QtCreator что бы можно было компилить и запускать на малинке в один клик:
12.1. Параметры->Устройства->Добавить
Обычное Linux-устройство
название на свой вкус и цвет
вводим айпишник, логин и пароль
завершить
12.2. Параметры->Сборка и запуск->Компиляторы->Добавить
GCC -> C++
Название: Raspberry PI3 GCC
Путь: /home/pavelk/Projects/RaspberryPI/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++
12.3. Параметры->Сборка и запуск->Отладчики->Добавить
Название: Raspberry PI3 GDB
Путь: /home/pavelk/Projects/RaspberryPI/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb
12.4. Параметры->Сборка и запуск->Профили Qt->Добавить
Название: Qt 5.9.1 Raspberry PI3
Путь: /home/pavelk/Projects/RaspberryPI/qt5/bin/qmake
12.5. Параметры->Сборка и запуск->Комплекты->Добавить
Название: Raspberry PI3
Тип устройства: Обычное Linux-устройство
Устройство: выбираем добавленное из первого шага
Компилятор C++: Raspberry PI3 GCC
Отладчик: Raspberry PI3 GDB
Профиль Qt: Qt 5.9.1 Raspberry PI3
12.6. Нажимаем «Применить».
14. Создаём новый проект, в *.pro файл добавляем:
INSTALLS = target
target.path = /home/pi
Компилим и после завершения проект должен запуститься на малинке.
Вот как-то так в общем =)
P.S. Большая часть была взята с https://wiki.qt.io/RaspberryPi2EGLFS с моими небольшими правками — думал всё сложнее будет =)
48 комментариев
Поставил последнюю версию ОС (Raspberry Pi OS with desktop 32 bit от March 15th 2024) на PI 3 B.
В каталоге /opt/vc/lib/ нет библиотек libGLESv2.so и libGLESv2.so :
pi@raspberrypi:~ $ ls /opt/vc/lib/
libbcm_host.so libdebug_sym_static.a libmmal_components.so libvchostif.a
libbrcmEGL.so libdtovl.so libmmal_core.so libvcilcs.a
libbrcmGLESv2.so libEGL_static.a libmmal.so libvcos.so
libbrcmOpenVG.so libelftoolchain.so libmmal_util.so libvcsm.so
libbrcmWFC.so libGLESv2_static.a libmmal_vc_client.so pkgconfig
libcontainers.so libkhrn_client.a libopenmaxil.so plugins
libdebug_sym.so libkhrn_static.a libvchiq_arm.so
Там есть libbrcmGLESv2.so и libbrcmEGL.so и статическре версии библиотек libEGL_static.a и libGLESv2_static.a .
соответственно этап № 11 невозможно выполнить.
Можно здесь создать символьные ссылки на libbrcmGLESv2.so и libbrcmEGL.so с названиями libGLESv2.so и libEGL.so? или нужно править профиль qmake.conf? а если его править то нужно ли еще флаги компиляции дополнительные применять?
собираю qt 5.14.2.
после конфигурирования с флагами
./configure -skip wayland -skip qtwebengine -skip script -qt-xcb -no-pch -no-kms -no-use-gold-linker -nomake tests -nomake examples -reduce-exports -eglfs -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=$BASEPATH/tools/arm-bcm2708/gcc-linaro-6.3.1/bin/arm-linux-gnueabihf- -sysroot $BASEPATH/sysroot -opensource -confirm-license -make libs -prefix $BASEPATH/qt5pi -extprefix $BASEPATH/qt5pi -hostprefix $BASEPATH/qt5 -v
выдает следующее
Build options:
Mode …………………………….. release
Optimize release build for size …….. no
Building shared libraries ………….. yes
Using C standard ………………….. C11
Using C++ standard ………………… C++14
Using ccache ……………………… no
Using new DTAGS …………………… yes
Relocatable ………………………. yes
Using precompiled headers ………….. no
Using LTCG ……………………….. no
Target compiler supports:
NEON …………………………… yes
Build parts ………………………. libs
Qt modules and options:
Qt Concurrent …………………….. yes
Qt D-Bus …………………………. yes
Qt D-Bus directly linked to libdbus …. no
Qt Gui …………………………… yes
Qt Network ……………………….. yes
Qt Sql …………………………… yes
Qt Testlib ……………………….. yes
Qt Widgets ……………………….. yes
Qt Xml …………………………… yes
Support enabled for:
Using pkg-config ………………….. yes
udev …………………………….. no
Using system zlib …………………. yes
Zstandard support …………………. no
Qt Core:
DoubleConversion ………………….. yes
Using system DoubleConversion …….. no
GLib …………………………….. yes
iconv ……………………………. no
ICU ……………………………… yes
Built-in copy of the MIME database ….. yes
Tracing backend ……………………
Logging backends:
journald ……………………….. no
syslog …………………………. no
slog2 ………………………….. no
PCRE2 ……………………………. yes
Using system PCRE2 ………………. no
Qt Network:
getifaddrs() ……………………… yes
IPv6 ifname ………………………. yes
libproxy …………………………. no
Linux AF_NETLINK ………………….. yes
OpenSSL ………………………….. yes
Qt directly linked to OpenSSL …….. no
OpenSSL 1.1 ………………………. yes
DTLS …………………………….. yes
OCSP-stapling …………………….. yes
SCTP …………………………….. no
Use system proxies ………………… yes
GSSAPI …………………………… no
Qt Gui:
Accessibility …………………….. yes
FreeType …………………………. yes
Using system FreeType ……………. yes
HarfBuzz …………………………. yes
Using system HarfBuzz ……………. no
Fontconfig ……………………….. yes
Image formats:
GIF ……………………………. yes
ICO ……………………………. yes
JPEG …………………………… yes
Using system libjpeg …………… yes
PNG ……………………………. yes
Using system libpng ……………. yes
Text formats:
HtmlParser ……………………… yes
CssParser ………………………. yes
OdfWriter ………………………. yes
MarkdownReader ………………….. yes
Using system libmd4c …………… no
MarkdownWriter ………………….. yes
EGL ……………………………… yes
OpenVG …………………………… no
OpenGL:
Desktop OpenGL ………………….. no
OpenGL ES 2.0 …………………… yes
OpenGL ES 3.0 …………………… yes
OpenGL ES 3.1 …………………… yes
OpenGL ES 3.2 …………………… yes
Vulkan …………………………… yes
Session Management ………………… yes
Features used by QPA backends:
evdev ……………………………. yes
libinput …………………………. no
INTEGRITY HID …………………….. no
mtdev ……………………………. no
tslib ……………………………. no
xkbcommon ………………………… yes
X11 specific:
XLib …………………………… yes
XCB Xlib ……………………….. yes
EGL on X11 ……………………… no
QPA backends:
DirectFB …………………………. no
EGLFS ……………………………. yes
EGLFS details:
EGLFS OpenWFD …………………… no
EGLFS i.Mx6 …………………….. no
EGLFS i.Mx6 Wayland ……………… no
EGLFS RCAR ……………………… no
EGLFS EGLDevice …………………. no
EGLFS GBM ………………………. no
EGLFS VSP2 ……………………… no
EGLFS Mali ……………………… no
EGLFS Raspberry Pi ………………. no
EGLFS X11 ………………………. no
LinuxFB ………………………….. yes
VNC ……………………………… yes
XCB:
Using system-provided XCB libraries .. no
XCB XKB ………………………… yes
XCB XInput ……………………… yes
Native painting (experimental) ……. no
GL integrations:
GLX Plugin ……………………. no
EGL-X11 Plugin ………………… no
Qt Sql:
SQL item models …………………… yes
Qt Widgets:
GTK+ …………………………….. no
Styles …………………………… Fusion Windows
Qt PrintSupport:
CUPS …………………………….. no
Qt Sql Drivers:
DB2 (IBM) ………………………… no
InterBase ………………………… no
MySql ……………………………. no
OCI (Oracle) ……………………… no
ODBC …………………………….. no
PostgreSQL ……………………….. no
SQLite2 ………………………….. no
SQLite …………………………… yes
Using system provided SQLite ……… no
TDS (Sybase) ……………………… no
Qt Testlib:
Tester for item models …………….. yes
Serial Port:
ntddmodm …………………………. no
Qt SerialBus:
Socket CAN ……………………….. yes
Socket CAN FD …………………….. yes
SerialPort Support ………………… yes
Further Image Formats:
JasPer …………………………… no
MNG ……………………………… no
TIFF …………………………….. yes
Using system libtiff …………….. yes
WEBP …………………………….. yes
Using system libwebp …………….. no
Qt QML:
QML network support ……………….. yes
QML debugging and profiling support …. yes
QML just-in-time compiler ………….. yes
QML sequence object ……………….. yes
QML XML http request ………………. yes
QML Locale ……………………….. yes
Qt QML Models:
QML list model ……………………. yes
QML delegate model ………………… yes
Qt Quick:
Direct3D 12 ………………………. no
AnimatedImage item ………………… yes
Canvas item ………………………. yes
Support for Qt Quick Designer ………. yes
Flipable item …………………….. yes
GridView item …………………….. yes
ListView item …………………….. yes
TableView item ……………………. yes
Path support ……………………… yes
PathView item …………………….. yes
Positioner items ………………….. yes
Repeater item …………………….. yes
ShaderEffect item …………………. yes
Sprite item ………………………. yes
QtQuick3D:
Assimp …………………………… yes
System Assimp …………………….. no
Qt Scxml:
ECMAScript data model for QtScxml …… yes
Qt 3D:
Assimp …………………………… yes
System Assimp …………………….. no
Output Qt3D Job traces …………….. no
Output Qt3D GL traces ……………… no
Use SSE2 instructions ……………… no
Use AVX2 instructions ……………… no
Aspects:
Render aspect …………………… yes
Input aspect ……………………. yes
Logic aspect ……………………. yes
Animation aspect ………………… yes
Extras aspect …………………… yes
Qt 3D Renderers:
OpenGL Renderer …………………… yes
Qt 3D GeometryLoaders:
Autodesk FBX ……………………… no
Qt Bluetooth:
BlueZ ……………………………. no
BlueZ Low Energy ………………….. no
Linux Crypto API ………………….. no
Native Win32 Bluetooth …………….. no
WinRT Bluetooth API (desktop & UWP) …. no
WinRT advanced bluetooth low energy API (desktop & UWP) . no
Qt Sensors:
sensorfw …………………………. no
Qt Positioning:
Gypsy GPS Daemon ………………….. no
WinRT Geolocation API ……………… no
Qt Location:
Qt.labs.location experimental QML plugin . yes
Geoservice plugins:
OpenStreetMap …………………… yes
HERE …………………………… yes
Esri …………………………… yes
Mapbox …………………………. yes
MapboxGL ……………………….. yes
Itemsoverlay ……………………. yes
Qt Multimedia:
ALSA …………………………….. no
GStreamer 1.0 …………………….. no
GStreamer 0.10 ……………………. no
Video for Linux …………………… yes
OpenAL …………………………… no
PulseAudio ……………………….. yes
Resource Policy (libresourceqt5) ……. no
Windows Audio Services …………….. no
DirectShow ……………………….. no
Windows Media Foundation …………… no
Qt TextToSpeech:
Flite ……………………………. no
Flite with ALSA …………………… no
Speech Dispatcher …………………. no
Qt Tools:
QDoc …………………………….. no
все ли здесь нормально, на какой параметр надо смотреть?
и другой вопрос, если в проекте использоваться будут и widget и qml то необходимо при компиляции указывать и qt-xcb и -eglfs?
Добрый день!
Спасибо за инструкцию!
Подскажите пожалуйста зачем в начале создаем директорию «sudo mkdir /usr/local/qt5pi»?
если потом при сборке мы указываем другую директорию «~/Projects/RaspberryPI/raspi/qt5pi»
Здравствуйте. Пожалуйста. Одна на хосте другая на малинке.
Либо может я где ошибся, т.к. пост много очень раз обновлялся уже.
Спасибо что заметили. Выделю время и перепроверю.
Здравствуйте А можете подсказать с такой ошибкой? RpiZW qt5.12.3
EGL Error : Could not create the egl surface: error = 0x300b
Здравствуйте. А разве Raspberry Pi Zero W поддерживает OpenGL ES 2.0 ? Если да, то смотрите по логам чему ему не хватает. У меня, к сожалению, нет платы, что бы проверить.
Вроде как пишут «Fully supports OpenGL-ES 1.1/2.0 and OpenVG 1.1». Там тот же проц что и на Raspberry Pi 1. Сейчас с более старой RaspOS пробую выдаёт «Недопустимая инструкция». Обидно как то =(
Увы, с этой ошибкой поможет только ldd по каждой либе и смотреть чего не хватает + включить лог загрузки компонентов Qt.
Мне тут добрый человек уже выслал плату, только без W, через неделю придёт попробую собрать.
Похоже я начал понимать в чём проблема.
https://stackoverflow.com/questions/55465118/gcc-8-cross-compiler-outputs-armv7-executable-instead-of-armv6
Severity Code Description Project File Line Suppression State
Warning CMake Warning (dev) in log/CMakeLists.txt:
AUTOGEN: No valid Qt version found for target log. AUTOMOC, AUTOUIC and
AUTORCC disabled. Consider adding:
find_package(Qt COMPONENTS Widgets)
to your CMakeLists.txt file.
This warning is for project developers. Use -Wno-dev to suppress it. log C:\Work\UniTest\PultPro\ AUTORCC disabled. Consider adding
===========================
Severity Code Description Project File Line Suppression State
Warning CMake Warning at log/CMakeLists.txt:14 (find_package):
By not providing «FindQt5Widgets.cmake» in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
«Qt5Widgets», but CMake did not find one.
Could not find a package configuration file provided by «Qt5Widgets» with
any of the following names:
Qt5WidgetsConfig.cmake
qt5widgets-config.cmake
Add the installation prefix of «Qt5Widgets» to CMAKE_PREFIX_PATH or set
«Qt5Widgets_DIR» to a directory containing one of the above files. If
«Qt5Widgets» provides a separate development package or SDK, be sure it has
been installed. log C:\Work\UniTest\PultPro\log/CMakeLists.txt 14
Добрый день,
а вот настроил кросссборку на VS19 …
проект собирается и под
Малина чистая, без развернутого QT
раньше делали вот так:
sudo apt-get install qt5-default
…
а сейчас хотелось бы подложить только нужные либы на Малину, ну чтобы только то, что надо, без QTCreator и т.п. хвостой.
как корректно выцепить нужные модули и куда их сложить и как настроить CMake?
В настоящее время широкое распространения получили одноплатники OPI, такие как OPI PC PLUS. Было бы здорово получить инструкцию о кросскомпиляции на OPI. Я попытался следовать этому роководству для armbian на OPI PC PLUS, но не смог решить проблемы с графикой. При этом kmscube запускается, кубик вращается. Конфигурировал
./configure -skip wayland -skip script -skip webengine -no-pch -no-kms -no-xcb -no-use-gold-linker -nomake tests -nomake examples -reduce-exports -eglfs -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=/home/andrei/Qt5Sources/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -opensource -confirm-license
Очевидно у меня компилятор gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf Потому что я с ноута на Ubuntu 19.
Получил:
EGL ……………………………… no
OpenVG …………………………… no
OpenGL:
Desktop OpenGL ………………….. no
OpenGL ES 2.0 …………………… no
OpenGL ES 3.0 …………………… no
OpenGL ES 3.1 …………………… no
OpenGL ES 3.2 …………………… no
Vulkan …………………………… no
Session Management ………………… yes
Телодвижения делал такие https://visuale.ru/blog/krosskompilyatsiya-qt-5-10-dlya-raspberry-pi3 Шутки ради накатил на OPI PC PLUS ПО Qt Creator из репозитория, создал, собрал и запустил Hello World успешно на самом SBC.
Здравствуй! Для raspberry pi 4 какой commend нужен?
Доброго дня. Для неё мануал ещё в процессе, т.к. есть множество нерешённых проблем.
Такой вопрос не знаю как решить.
Я запускаю проект на малине через qt creator на хосте все работает, четко, как часы.
Когда я запускаю исполняемый файл с малины или через ssh, приложение запускается, дебаг в консоль пишет сообщения, однако вместо экрана с картинкой получаю белый экран.
Огромное спасибо!!! Долгое время не мог запустить QML на Raspberry, все инструкции были только к старым версиям. Наконец-то кто-то грамотно описал все этапы!
Пожалуйста =)
Возможно вы знаете, как решить проблему? Приложение на QML, запускается на долюсекунду и затем умирает. В логах выдает следующее:
Could not find the Qt platform pllugin «xcb» in «»
EGLFS: OpenGL windows cannot be mixed with others.
Здравствуйте.
Скорее всего, нужно в QML основным компонентом использовать только Window { … }, а в main.cpp использовать QQmlApplicationEngine.
Здравствуйте!
Ликбез не сработал.
1) Не существует указанная здесь Raspbian 2017-09-07 Stretch, ближайшая Raspbian 2017-09-08 пруф http://downloads.raspberrypi.org/raspbian/images/
На ней получаю ошибку при конфигурации. У меня Raspberry pi 1
ERROR: Feature ‘opengles2’ was enabled, but the pre-condition ‘config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)’ failed.
ERROR: The OpenGL functionality tests failed!
При этом сверху, разумеется, нет поддержки графики
EGL ……………………………… no
OpenVG …………………………… no
OpenGL:
Desktop OpenGL ………………….. no
OpenGL ES 2.0 …………………… no
OpenGL ES 3.0 …………………… no
OpenGL ES 3.1 …………………… no
OpenGL ES 3.2 …………………… no
Vulkan …………………………… no
Session Management ………………… yes
Пытался менять названия либ как тут написано… Пытался отсюда брать названия (+тут ещё конектят OpenVG) https://github.com/ali1234/qtbase/commit/0da9755921397593524bca3bdd508e798736a7f1 В итоге не помогающий файл /home/lin/Music/opt/qt-everywhere-src-5.11.1/qtbase/mkspecs/devices/linux-rasp-pi-g++/qmake.conf такой
# qmake configuration for:
# — Raspberry PI
# — Raspberry PI Zero
# http://wiki.qt.io/RaspberryPi
include(../common/linux_device_pre.conf)
#QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/opt/vc/li
QMAKE_LFLAGS += -Wl,-rpath-link,$$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/opt/vc/include \
$$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \
$$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
MAKE_LIBS_EGL = -lbrcmEGL -lbrcmGLESv2
QMAKE_LIBS_OPENGL_ES2 = -lbrcmEGL -lbrcmGLESv2
QMAKE_LIBS_OPENVG = -lbrcmEGL -lbrcmOpenVG -lbrcmGLESv2
contains(DISTRO, squeeze) {
#Debian Squeeze: Legacy everything
QMAKE_LIBS_OPENGL_ES2 = -lbrcmGLESv2 -lbrcmEGL
} else:contains(DISTRO, arch) {
#On principle: no wizardry required
} else {
#This is not strictly necessary
DISTRO_OPTS += deb-multi-arch
DISTRO_OPTS += hard-float
}
QMAKE_CFLAGS += \
-marm \
-mfpu=vfp \
-mtune=arm1176jzf-s \
-march=armv6zk \
-mabi=aapcs-linux
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION = eglfs_brcm
include(../common/linux_arm_device_post.conf)
load(qt_config)
Ошибка на этапе root@Linux:/home/lin/Music/opt/qt-everywhere-src-5.11.1# ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=$BASEPATH/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot $BASEPATH/sysroot -opensource -confirm-license -make libs -prefix $BASEPATH/qt-everywhere-src-5.11.1 -extprefix $BASEPATH/qt-everywhere-src-5.11.1 -hostprefix $BASEPATH/qt-everywhere-src-5.11.1 -v
Файлы libbrcmEGL.so libbrcmGLESv2.so существуют в /home/lin/Music/opt/sysroot/opt/vc/lib Меня смущает название, мы ведь подключаем «-lbrcmGLESv2» а он как-бы «-libbrcmGLESv2» и т.д.
Вот отчёт из консоли https://yadi.sk/i/DS_yNLG13aZoAa
На соседнем ликбезе та же ошибка https://lb.raspberrypi.org/forums/viewtopic.php?t=204529
Была мысль, что мой Raspberry pi 1 (2011) не поддерживает графику, но при sudo raspi-config я назначаю G1 GL (Full KMS) OpenGL desktop driver with full KMS, значит, графика есть. Прошу о помощи.
Увы, но помочь я Вам не могу, так как нету первой малинки.
Могу разве что посоветовать Qt использовать более ранних версий, например 5.4 или 5.6.
А, на первой малинке вообще есть поддержка OpenGL ES 2.0 хотя бы ? По-моему старовата она для него.
Приветствую. Насчет ошибки undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8′. Это говорит о том что на целевой машине версия stdlibc++ сильно отличается от той, что используется при кросскомпиляции. Поэтому после git clone https://github.com/raspberrypi/tools узнаем версию полученного компилятора например /opt/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc -v и видим что то типа gcc версия 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 — Linaro GCC 2014.03). После этого заходим на малину по ssh, выполняем gcc -v и видим что то типа gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1). Сами понимаете собирать компилятором версии 4.8.3 под систему с gcc версии 6.3.0 не самая лучшая идея :))))) Поэтому идем сюда https://releases.linaro.org/components/toolchain/gcc-linaro/ качаем версиюю gcc совпадающую с той что стоит на малинке, правим CROSS_COMPILE=путь к новому компилятору. Вот теперь должно нормально собираться. Еще при запуске приложения на малине бывает полезным указать платформу: ./qopenglwidget —platform xcb. Ну или к примеру —platform wayland. Если вдруг, неожиданно вы нашли дистрибутив с вяленным :)))))
Павел, спасибо за статью.
Можно попросить обновить ее? Особенно в части ./configure
Проблемы начинаются на этапе выбора ветки.
1. По команде git branch -r видим, что ветки 5.9.1 не существует:
origin/5.9.0
origin/5.9.3
origin/HEAD -> origin/5.10
2. Похоже, webkit перестал существовать. Поэтому, выполняя ./configure, получаем ошибку:
Project ERROR: -skip command line argument used with non-existent module ‘qtwebkit’. Просто убрать -skip qtwebkit приводит просто к следующим ошибкам:
3. raspi/Qt59Sources/qtbase/config.tests/arch/arch.cpp:43:19: fatal error: stdio.h: No such file or directory
> #include
> ^
> compilation terminated.
> Makefile:179: recipe for target ‘arch.o’ failed
> make: *** [arch.o] Error 1
Project ERROR: Could not determine target architecture. See config.log for details.
Все подкладывания заголовков не помогли.
Пробовал все ветки от 5.9 до 5.10
Правда, не пробовал вот что: мой рабочий Qt, установленный на хосте, имеет версию 5.8. Не думаю, что это связано, но сейчас обновлюсь до 5.10.
Поможете разобраться? Заранее спасибо.
Пожалуйста.
Обновить не могу ибо обновляю только когда сам перехожу на какую-то другую версию, а сейчас в планах пока что нет, извините.
Я столкнулся с той же проблемой и никак не могу её побороть. Подскажите, пожалуйста, у Вас получилось справиться с данной проблемой?
МУЖИК! Огромное спасибо! Если можно, скажи куда задонатить! Ей Богу две недели пытался собрать бессонными ночами из-за того, что везде всё либо старые версии либо вообще черт пойми что, пока на одном из форумов на твой пост не скинули ссылку. Завелось всё с первого раза. Шаг 11 не делал, всё запустилось. Ещё раз спасибо!
Михаил можете помочь с кросс компиляцией,собираю что-то да все криво(
Подскажите, не собирает Qt
make: Цель «first» не требует выполнения команд.
Info: creating super cache file /home/lnxdx/raspi/Qt59Sources/.qmake.super
Command line: -skip wayland -skip webkit -no-xcb -no-icu -nomake tests -nomake examples -c++std 11 -optimized-qmake -reduce-exports -no-pch -release -opengl es2 -device linux-rpi3-g++ -no-use-gold-linker -device-option CROSS_COMPILE=/home/lnxdx/Projects/RaspberryPI/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /home/lnxdx/Projects/RaspberryPI/raspi/sysroot -opensource -confirm-license -make libs -prefix /home/lnxdx/Projects/RaspberryPI/raspi/qt5pi -extprefix /home/lnxdx/Projects/RaspberryPI/raspi/qt5pi -hostprefix /home/lnxdx/Projects/RaspberryPI/raspi/qt5 -v
ERROR: No device matching ‘linux-rpi3-g++’.
попробуйте вместо linux-rpi3-g++ в конфигурации прописать linux-rasp-pi3-g++.
Приветствую. Подскажите пожалуйста как в такую сборку добить какой-нибудь модуль? Например мне нужен QSerialPort. Однако несмотря на то что это пятый qt, сериалПорта нигде нет. пробовал устанавливать libqt5serialport5-dev. Не помогло.
git clone git://code.qt.io/qt/.git -b
cd
~/raspi/qt5/bin/qmake -r
make
make install
и потом скомпиленные либы через rsync закинуть на малинку.
И первый пример, приведенный в мануале, тоже не запускается:
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5: no version information available (required by ./qopenglwidget)
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Gui.so.5: no version information available (required by ./qopenglwidget)
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5: no version information available (required by ./qopenglwidget)
Illegal instruction
Что-то с ldconfig или qt.conf либо пути не правильные, либо не скопировалось в устройство, либо ld не видит эти файлы. ldd может помочь, вдруг какие зависимости не установились.
Здравствуйте.
Огромное спасибо за мануал. Это реально первый мануал, по которому все собралось. Однако, скомпилировать простейший пример так и не получилось.
Про попытке сбилдить простейший консольный HelloWorld вылетает вот такая ошибка: /sysroot/usr/lib/arm-linux-gnueabihf/libicui18n.so.52: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8′
Удалось повторить, собирайте Qt без ICU: добавить в .configure «-no-icu» в посте обновил.
Хороший мануал. Единственное — надо скопировать папочку с библиотеками qt в sysroot/usr/local.
иначе пример собирается с библиотеками qt другой версии, которые уже стояли в образе Raspbiana.
pi@raspberrypi:~ $ ldd qopenglwidget
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Widgets.so.5: no version information available (required by ./qopenglwidget)
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Gui.so.5: no version information available (required by ./qopenglwidget)
./qopenglwidget: /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5: no version information available (required by ./qopenglwidget)
Это восьмым пунктом как раз делается.
и вот такая в квик котрол2
:-1: ошибка: Не удалось отправить файл «/home/rea/build-untitled-Raspberry_Pi-Debug/untitled».
у меня такая ошибка
bash: /home/pi/prob: No such file or directory
Приложение завершилось с кодом 127.
Спасибо!
Слава гуглу, https://wiki.qt.io/RaspberryPi2EGLFS и вам!
добрый день. делаю по этому сануалу вот эту коммаду ./sysroot-relativelinks.py sysroot
и получаю вот такую ошибку
rea@rea-GA-990XA-UD3:~/raspi$ ./sysroot-relativelinks.py sysroot
Replacing /lib/ld-linux-armhf.so.3 with ld-linux-armhf.so.3 for /home/rea/raspi/sysroot/lib/ld-linux.so.3
Traceback (most recent call last):
File «./sysroot-relativelinks.py», line 31, in
handlelink(filep, subdir)
File «./sysroot-relativelinks.py», line 23, in handlelink
os.unlink(filep)
OSError: [Errno 13] Permission denied: ‘/home/rea/raspi/sysroot/lib/ld-linux.so.3’
подскажите куда копать
Что-то с правами доступа. Попробуйте перед запуском линковщика ссылок прописать sudo
А -prefix не должно быть: /usr/local/qt5pi , как у http://wiki.qt.io/RaspberryPi2EGLFS ?
На ваше усмотрение. Указывая prefix мы говорим куда складывать результат сборки. В посте у меня путь ~/Projects/RaspberryPI/raspi/qt5pi что бы не засирать систему и не бегать искать.
Разобрался, проблема оказалась в том, что у меня уже QT стоял на плате. Получалось что когда выкачивал сисрут, то библиотеки конфликтовали, поэтому брать чистый образ мегаважно. Спасибо за статью, очень пригодилось
Приветствую. Пробую повторить все тоже самое, но qt не собирается. Падает в процессе компиляции. Можете дать хоть какую то наводку где мог косякнуть. Посмотрел linaro версии 4.7, qt как и у вас 5.7. sysroot выкачал с малины. Уже что только не пробовал, все равно падает
Какие ошибки?
с предыдущей ошибкой справился.
делаю вот это
/Projects/RaspberryPI/raspi/Qt57Sources$ ./configure -skip wayland -c++std 11 -skip webkit -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=$BASEPATH/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot $BASEPATH/sysroot -opensource -confirm-license -make libs -prefix $BASEPATH/qt5pi -extprefix $BASEPATH/qt5pi -hostprefix $BASEPATH/qt5 -v -no-use-gold-linker
и получаю ошибки
очень много.
куда копать ? зарание спасибо