Qt-QML JIT on Raspberry PI Rev. 1

Я и мой друг работаем над портативным интернет-радио, управляемым Raspberry PI B+ и небольшим сенсорным экраном. Я разрабатываю интерфейс с Qt-5.9, который я кросс-скомпилировал для процессора ARMv6 PI. Мой интерфейс использует QML, поэтому, когда я запускаю свое приложение, все работает, но анимации QML отстают. Соответственно консоль сообщает мне, что JML QML не включен (JIT is disabled for QML. Property bindings and animations will be very slow. Visit https://wiki.qt.io/V4 to learn about possible solutions for your platform.), поэтому я посмотрел на данной странице о двигателе V4 и после примерно двух недель попыток я обнаружил, что проблема заключается в отсутствующей возможности использования набора инструкций Thumb-1, который необходим V4, и HardFP. Конфигурация Распби Джесси работает на Пи. Так что теперь я думаю, что это сработает, если я получу кросс-компилятор для работы с набором Thumb-1. Я очень старался, и в итоге у меня возникли две проблемы.

  1. Когда я использую флаг -mthumb в командной строке, я получаю эту ошибку: sorry, unimplemented: Thumb-1 hard-float VFP ABI. Мне нужен Thumb-1, я не могу изменить реализацию Hard-Float всей ОС, и для ARMv6 нет подходящего флага компилятора для отключения VFP.
  2. Когда я использую флаг -mthumb-interwork в командной строке, компиляция работает, но исполняемый файл не изменяется из-за настройки ABI (https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/ARM-Options.html # ARM-Options) (-mthumb-interwork:... In AAPCS (the ABI) configurations this option is meaningless.). Я перепробовал все возможные ABI, но ни одна из них не работает и не компилирует работающую программу.

Я также читал о некоторых патчах для RPi, но они были включены в восходящий Qt давным-давно.

Я немного изменил аргументы компилятора (файл: QT/qtbase/mkspecs/devices/linux-rasp-pi-g++/qmake.conf):

QMAKE_CFLAGS           += \
                      -mthumb \
                      -mfpu=vfp \
                      -mtune=arm1176jzf-s \
                      -march=armv6zk \
                      -mabi=aapcs-linux

(Эта конфигурация не работает)

Я настроил QT со следующими аргументами:

./configure -release -opengl es2 -device linux-rasp-pi-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 -skip webengine -make libs -no-icu -tslib -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v

Я надеюсь, что вы, ребята, умнее меня решаете эти проблемы, потому что я думаю, что я сделал все возможное, чтобы JIT работал.

Было бы плохо, если бы эта проблема была неразрешимой, потому что Qt-QML является очень подходящим решением GUI для встроенных устройств, таких как PI, и шесть из восьми RPis используют этот старый процессор ARMv6.

заранее спасибо

Ответ 1

Я не знаю достаточно о вашей конкретной проблеме, но я предлагаю это:

Я рекомендую вам использовать Boot2Qt, который является сборкой yocto-linux и предназначен для встроенного оборудования. С его помощью вы получаете легкий дистрибутив Linux и все библиотеки Qt.

Вы можете удобно настроить свое приложение для запуска при загрузке, и оно работает очень хорошо, даже на медленном оборудовании. вот документация по его сборке:

http://doc.qt.io/QtForDeviceCreation/qtee-custom-embedded-linux-image.html

Этот URL-адрес о коммерческом продукте, но вы можете получить источник в репо ниже. В противном случае следуйте инструкциям документации.

git clone git://code.qt.io/yocto/meta-boot2qt.git

Вам понадобится ОС Linux для сборки. Ubuntu 16 и 18 работали хорошо для меня.

Boot2Qt совместим с R-PI 1-3, Zero и многими другими устройствами. Смотрите документацию для более полного списка.