【问题标题】:Qt-QML JIT on Raspberry PI Rev. 1Raspberry PI Rev. 1 上的 Qt-QML JIT
【发布时间】:2023-03-10 03:40:02
【问题描述】:

我和我的朋友正在开发由 Raspberry PI B+ 和一个小触摸屏驱动的便携式互联网收音机。我正在使用我为 PI 的 ARMv6 CPU 交叉编译的 Qt-5.9 开发接口。我的界面使用的是 QML,所以当我启动我的应用程序时,一切正常,但 QML 动画滞后。 因此,控制台告诉我没有启用 QML JIT (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 引擎的给定页面,经过大约两周的尝试,我发现问题是缺少使用 V4 所需的 Thumb-1 指令集,以及在 Pi 上运行的 Raspbian Jessie 的 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 是一个非常适合 PI 等嵌入式设备的 GUI 解决方案,并且八个 RP 中有六个正在运行这个旧的 ARMv6 CPU。

提前谢谢你

【问题讨论】:

    标签: c++ qt raspberry-pi qml jit


    【解决方案1】:

    我对您的具体问题了解不多,但我建议这样做:

    我建议您使用 Boot2Qt,它是一个 yocto-linux 构建,专为嵌入式硬件而设计。有了它,您将获得一个轻量级的 linux 发行版和所有 Qt 库。

    您可以方便地将应用程序设置为在启动时启动,它的性能非常好,即使在速度较慢的硬件上也是如此。 这是构建它的文档:

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

    这个 url 是关于商业产品的,但你可以在下面的 repo 中获得源代码。否则请按照文档说明进行操作。

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

    您将需要一个 linux 操作系统来构建。 Ubuntu 16 和 18 对我来说效果很好。

    Boot2Qt 与 R-PI 1-3、Zero 和许多其他设备兼容。有关更完整的列表,请参阅文档。

    【讨论】: