Simuler une application ARM construite sur un processeur x86 en utilisant Qt comme exemple

La puissance des processeurs modernes augmente, à la fois dans les ordinateurs fixes et dans divers périphériques embarqués, à bord qui sont des processeurs ARM avec le système d'exploitation Linux. Aujourd'hui, dans le cadre de cet article, nous allons lancer un émulateur de processeur ARM sur un ordinateur x86 et y essayer de construire Qt à partir de la source et d'une application de test, c'est-à-dire pour ainsi dire avec et émuler l'assemblage d'une application ARM.



Dans la première partie de l'article, nous utiliserons l'émulateur QEMU pour aarch64, dans la deuxième partie, nous lancerons l'émulateur Raspberry et vérifierons la fonctionnalité de l'application qu'il contient.



En mon nom personnel, je tiens à noter que tout cela ne se fait pas rapidement, et si vous essayez de faire tout cela, le cycle complet vous prendra plusieurs jours!)







Construire à partir de sources Qt sur CentOS ARM



Pour installer sur un système hôte, nous devons installer l'émulateur QEMU. Sur les distributions basées sur Debian, il s'agit du paquet qemu-system-arm. Pour gérer la machine virtuelle en mode graphique, vous pouvez installer virt-manager.



Après le démarrage, créez une machine virtuelle:







et sélectionnez l'url de démarrage du réseau:

mirror.centos.org/altarch/7/os/aarch64 Définissez le







nombre de processeurs et de RAM:







Définissez la taille du disque système:







Paramètres finaux, sélection du réseau:







Pour ceux qui souhaitent télécharger ou installer hors ligne, il y a une image disque:



arm64



Ensuite, vous devez installer le système sur le disque dur en mode texte, en choisissant les options de réponse nécessaires et en confirmant avec des réponses oui:











L'assemblage se fera sur le deuxième disque virtuel, pour cela nous aurons besoin d'un disque de 25-30 Go. Nous créons un nouveau disque dur en arrêtant la machine virtuelle et en la connectant à celle-ci, puis en la redémarrant. Brisons notre disque dur et formatez-le:



cfdisk /dev/sdb
mkfs.ext4 /dev/sdb1 -L Qt_Rebuild
mount /dev/sdb1 /30


Pourquoi le système de fichiers n'est-il pas XFS
XFS, Raspberry, .. XFS.



Après l'installation, nous nous connectons à la machine virtuelle et installons les packages dont nous avons besoin :



yum install centos-release-scl
yum install devtoolset-9-gcc.aarch64
yum install git
export PATH=/opt/rh/devtoolset-9/root/bin/:$PATH
echo clone from git
cd /30
git clone --recursive --single-branch --branch 5.15 git://github.com/qt/qt5.git
cd qt5


Configuration:




./configure -skip qt3d -no-warnings-are-errors -release -recheck-all --prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all
...
You need perl in your PATH to make a build from GIT.
Cannot proceed.

#yum install perl


Nous répétons le lancement de la configuration et obtenons:




Creating qmake...
gmake: g++: Command not found
gmake: *** [main.o] Error 127


Installez le compilateur et configurez à nouveau:



yum install devtoolset-9-gcc-c++.aarch64
...
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11' failed.

ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' failed.

ERROR: Feature 'xkbcommon' was enabled, but the pre-condition 'libs.xkbcommon' 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.


Nous recherchons et livrons les colis nécessaires:




yum install libxkbcommon-x11-devel
yum install xcb-util-renderutil-devel
yum install libxcb libxcb-devel libXrender libXrender-devel xcb-util-wm xcb-util-wm-devel xcb-util xcb-util-devel xcb-util-image xcb-util-image-devel xcb-util-keysyms xcb-util-keysyms-devel


Nous configurons et nous obtenons déjà une erreur:



ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' failed.


Ajoutez plus de packages et consultez le journal de configuration:



 yum install libxcb libxcb-devel xcb-util xcb-util-devel mesa-libGL-devel libxkbcommon-devel
...
Checking for XCB ICCCM >= 0.3.9... yes
Checking for XCB SHM... yes
Checking for XCB Image >= 0.3.9... yes
Checking for XCB Keysyms >= 0.3.9... yes
Checking for XCB RandR... yes
Checking for XCB XRender... yes
Checking for XCB Renderutil >= 0.3.9... yes
Checking for XCB Shape... yes
Checking for XCB Sync... yes
Checking for XCB Xfixes... yes
Checking for XCB Xinerama... yes
Checking for XCB XKB... yes
Checking for XCB (extensions)... yes
Checking for xkbcommon >= 0.5.0... yes
Checking for xkbcommon-x11... yes
Checking for XCB Xlib... yes
Checking for XCB GLX... yes
...
Qt is now configured for building. Just run 'gmake'.
Once everything is built, you must run 'gmake install'.
Qt will be installed into '/Qt/5.15.0'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.


Eh bien, tout est prêt, mais nous devons vérifier les options qui peuvent nous être utiles:



  OpenGL:
    Desktop OpenGL ....................... yes
    OpenGL ES 2.0 ........................ no
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
    OpenGL ES 3.2 ........................ no

  OpenSSL ................................ no
    Qt directly linked to OpenSSL ........ no
  OpenSSL 1.1 ............................ no


Et tout de même, nous avons probablement besoin de l'interaction réseau de l'application, nous ne travaillons pas uniquement via http:



yum install openssl-devel

Dependencies Resolved

================================================================================
 Package                   Arch          Version               Repository  Size
================================================================================
Installing:
 openssl-devel             aarch64       1:1.0.2k-19.el7       base       1.5 M
Installing for dependencies:
 keyutils-libs-devel       aarch64       1.5.8-3.el7           base        37 k
 krb5-devel                aarch64       1.15.1-46.el7         base       272 k
 libcom_err-devel          aarch64       1.42.9-17.el7         base        31 k
 libkadm5                  aarch64       1.15.1-46.el7         base       175 k
 libselinux-devel          aarch64       2.5-15.el7            base       186 k
 libsepol-devel            aarch64       2.5-10.el7            base        76 k
 libverto-devel            aarch64       0.2.5-4.el7           base        11 k
 pcre-devel                aarch64       8.32-17.el7           base       479 k
 zlib-devel                aarch64       1.2.7-18.el7          base        49 k

Transaction Summary
================================================================================
Install  1 Package (+9 Dependent packages)

Total download size: 2.8 M
Installed size: 6.4 M
Is this ok [y/d/N]: 



Version 1.0.2k, qui est inférieure à ce que Qt demande ( Augmentation de la version minimale prise en charge d'OpenSSL à 1.1. )



Nous devrons construire OpenSSL puis construire Qt à partir des sources:



wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
-bash: wget: command not found
cd /
curl https://www.openssl.org/source/openssl-1.1.1g.tar.gz -o openssl-1.1.1.g.tar.gz
tar -xvf openssl-1.1.1.g.tar.gz 
cd /openssl-1.1.1g
perl Configure
echo   ,   ARM:
perl Configure linux-aarch64
Configuring OpenSSL version 1.1.1g (0x1010107fL) for linux-aarch64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************
make && make install


Ensuite, nous configurons à nouveau Qt et commençons à le construire avec la commande make ou make -j4 , en fonction du nombre de processeurs (si vous décidez de créer une VM avec 4 processeurs), qui sont spécifiés dans les paramètres de la machine virtuelle .



La compilation de l'application se bloque sur:



make[3]: Entering directory `/30/qt5/qtsvg/src/svg'
g++ -c -include .pch/Qt5Svg -pipe -O2 -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -D_REENTRANT -fPIC -DQT_NO_LINKED_LIST -DQT_NO_FOREACH -DQT_NO_USING_NAMESPACE -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_SVG_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_ZLIB_LIB -I. -I../../include -I../../include/QtSvg -I../../include/QtSvg/5.15.0 -I../../include/QtSvg/5.15.0/QtSvg -I/30/qt5/qtbase/include/QtWidgets/5.15.0 -I/30/qt5/qtbase/include/QtWidgets/5.15.0/QtWidgets -I/30/qt5/qtbase/include/QtGui/5.15.0 -I/30/qt5/qtbase/include/QtGui/5.15.0/QtGui -I/30/qt5/qtbase/include/QtCore/5.15.0 -I/30/qt5/qtbase/include/QtCore/5.15.0/QtCore -I/30/qt5/qtbase/include -I/30/qt5/qtbase/include/QtWidgets -I/30/qt5/qtbase/include/QtGui -I/30/qt5/qtbase/include/QtCore -I/30/qt5/qtbase/include/QtZlib -I/30/qt5/qtbase/include/QtZlib/5.15.0 -I/30/qt5/qtbase/include/QtZlib/5.15.0/QtZlib -I.moc -I/usr/include/libdrm -I/usr/include/xcb -I/usr/include/xcb -I/30/qt5/qtbase/mkspecs/linux-g++ -o .obj/qsvgfont.o qsvgfont.cpp
In file included from /30/qt5/qtbase/include/QtGui/qopenglversionfunctions.h:1,
                 from /30/qt5/qtbase/include/QtGui/../../src/gui/kernel/qopenglcontext.h:61,
                 from /30/qt5/qtbase/include/QtGui/qopenglcontext.h:1,
                 from /30/qt5/qtbase/include/QtGui/QtGui:49,
                 from ../../include/QtSvg/QtSvgDepends:4:
/30/qt5/qtbase/include/QtGui/../../src/gui/opengl/qopenglversionfunctions.h: In instantiation of ‘class QVector<double>’:
qsvgstyle_p.h:696:20:   required from here
/30/qt5/qtbase/include/QtGui/../../src/gui/opengl/qopenglversionfunctions.h:201:5: internal compiler error: in tsubst_function_decl, at cp/pt.c:12967
  201 |     QAbstractOpenGLFunctionsPrivate()
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[3]: *** [.obj/qsvgfont.o] Error 1
make[3]: Leaving directory `/30/qt5/qtsvg/src/svg'
make[2]: *** [sub-svg-make_first-ordered] Error 2
make[2]: Leaving directory `/30/qt5/qtsvg/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/30/qt5/qtsvg'
make: *** [module-qtsvg-make_first] Error 2


Nous installons des versions supplémentaires de packages et à l'essai 3, nous l'obtenons:



  1. yum install harfbuzz-devel
  2. yum install at-spi2-atk-devel at-spi2-core-devel dbus-devel glib2-devel graphite2-devel keyutils-libs-devel krb5-devel libcom_err-devel libicu-devel libselinux-devel libsepol-devel libverto-devel pcre-devel zlib-devel
  3. yum install mesa-libGLw-devel


La configuration et l'assemblage sont en cours. Nous créons une application de test dans QtCreator (avec l'assembly qmake), copions les sources sur la machine virtuelle et construisons l'application. Binar est prêt, il reste à le tester sur Raspberry.



2. Exécutez l'émulateur Raspberry



Puisque dans le cadre de cet article, nous émulons un processeur ARM, cela signifie que nous allons également exécuter dans une machine virtuelle lien 1 lien 2 lien 3 :



Téléchargez l' image officielle depuis le site Web de Raspberry, le noyau de l' émulateur et exécutez (j'ai créé un tel fichier de démarrage):




echo create disk for Qt sources and Projects
qemu-img create -f qcow2 qt-rebuild-25gb-disk.qcow2 25G
cat start-emul.sh
#!/bin/bash

path_img=/home/user/Project/qemu
path_kernel=/home/user/qemu/qemu-rpi-kernel
sudo qemu-system-arm -kernel $path_kernel/kernel-qemu-4.19.50-buster -dtb $path_kernel/versatile-pb-buster.dtb \
-cpu arm1176 -m 256 -M versatilepb -append "root=/dev/sda2 rw" -net nic -net user,hostfwd=tcp::5022-:22 \
-net tap,ifname=vnet0,script=no,downscript=no -hdb $path_img/qt-rebuild-25gb-disk.qcow2 -no-reboot -hda $path_img/2020-05-27-raspios-buster-armhf.img


Essayer de lancer notre application:







pourquoi? Nous regardons le processeur:







Nous regardons le fichier de configuration dans CentOS:



[root@aaarch-qemu qt5]# cat config.summary |grep CPU
Build type: linux-g++ (arm64, CPU features: cx16 neon)


Eh bien, nous avons compilé une application armv8 64 bits et essayons de l'exécuter dans un émulateur 32 bits avec un processeur armv6. J'espère que les propriétaires de vrais appareils dotés de nouveaux processeurs 64 bits pourront se désabonner dans les commentaires, qu'ils aient réussi à exécuter l'application sur un appareil réel ou non.



Eh bien, ce n'est pas grave, nous pouvons maintenant collecter dans l'émulateur Raspberry? Nous constatons que nous avons très peu d'espace disque disponible après avoir appelé la commande df -h. Le moyen le plus simple était de copier le fichier image, de l'agrandir, de démarrer une machine virtuelle avec deux systèmes de fichiers en augmentant la partition racine sur la deuxième machine, puis d'utiliser la deuxième image. Aller:



qemu-img convert 2020-05-27-raspios-buster-armhf.img 2020-05-27-raspios-buster-armhf-10gb.qcow2 -O qcow2 -p
qemu-img resize 2020-05-27-raspios-buster-armhf-10gb.qcow2 +6G


Ajoutez un autre disque dur au script de démarrage:



-hdc 2020-05-27-raspios-buster-armhf-10gb.qcow2



Après le démarrage, éditez ce disque dur sudo cfdisk / dev / sdc:



Redimensionner:







Ecrire et confirmer oui:







N'oubliez pas de vérifier, que le disque est devenu la taille dont nous avons besoin:



sudo mkdir /test
sudo mount /dev/sdc2 /test
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.2G  2.8G  257M  92% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M     0  124M   0% /dev/shm
tmpfs           124M  2.0M  122M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           124M     0  124M   0% /sys/fs/cgroup
/dev/sdc1       253M   51M  202M  21% /boot
tmpfs            25M     0   25M   0% /run/user/1000
/dev/sdc2       3.2G  2.7G  358M  89% /test


Quelque chose de la taille du disque sdc connecté au dossier / test n'a pas été ajouté, corrigeons-le:



sudo umount /test
sudo fsck -f /dev/sdc2
sudo resize2fs /dev/sdc2
resize2fs 1.44.5 (15-Dec-2018)
Please run 'e2fsck -f /dev/sdc2' first.

pi@raspberrypi:~ $ e2fsck -f /dev/sdc2
e2fsck 1.44.5 (15-Dec-2018)
e2fsck: Permission denied while trying to open /dev/sdc2
You must have r/w access to the filesystem or be root
pi@raspberrypi:~ $ sudo e2fsck -f /dev/sdc2
e2fsck 1.44.5 (15-Dec-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
rootfs: 106640/217296 files (0.3% non-contiguous), 729343/868352 blocks
pi@raspberrypi:~ $ sudo resize2fs /dev/sdc2
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/sdc2 to 2441216 (4k) blocks.
The filesystem on /dev/sdc2 is now 2441216 (4k) blocks long.

sudo mount /dev/sdc2 /test
pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.2G  2.8G  259M  92% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M     0  124M   0% /dev/shm
tmpfs           124M  2.0M  122M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           124M     0  124M   0% /sys/fs/cgroup
/dev/sdc1       253M   51M  202M  21% /boot
tmpfs            25M     0   25M   0% /run/user/1000
/dev/sdc2       9.2G  2.7G  6.0G  31% /test


Éteignez la machine virtuelle. Modifiez à nouveau le fichier start-emul.sh, en remplaçant le disque dur hda par un nouveau et en supprimant le lien vers le troisième disque dur -hdc. Nous avons maintenant un système de fichiers avec plus d'espace.



Nous pouvons désormais connecter le disque dur aux sources Qt de la première machine virtuelle.



Conseil: il est préférable de "nettoyer les sources" des fichiers temporaires, c'est-à-dire retourne notre état du git, qui était au moment du clonage du dépôt avant la configuration:



cd /30/qt5
git reset --hard
git submodule foreach --recursive 'git reset HEAD . || :'
git submodule foreach --recursive 'git checkout -- . || :'
git clean -d -f -f -x
git submodule foreach --recursive git clean -d -f -f -x


Donc, dans Debian, nous avons besoin de:



sudo apt install gcc-arm-none-eabi 
sudo apt install wget build-essential \
 ^libxcb.*-dev \
libopenal-dev \
flite1-dev   libspeechd-dev \
libudev-dev \
libinput-dev \
libxkbcommon-x11-dev curl libssl-dev time -y

sudo apt install libx11-dev -y \
    libfontconfig1-dev \
    libfreetype6-dev \
    libx11-dev \
    libxext-dev \
    libxfixes-dev \
    libxi-dev \
    libxrender-dev \
    libxcb1-dev \
    libx11-xcb-dev \
    libxcb-glx0-dev \
    libxkbcommon-x11-dev \
    mesa-common-dev \
libgl1-mesa-dev 


Configuration:




cd /30/qt5
./configure -skip qt3d -no-warnings-are-errors -release -recheck-all -prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all -skip wayland -skip qtwebengine -skip qtwayland


Obtention également d'erreurs:



ERROR: Feature 'xcb-xlib' was enabled, but the pre-condition 'features.xlib && libs.xcb_xlib' 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.


Conseil. Avez-vous tapé ces commandes dans la fenêtre graphique QEMU? N'oubliez pas, nous avons ssh: vous devez démarrer dans la machine virtuelle du serveur ssh: sudo systemctl démarrer ssh && sudo systemctl activer ssh et se connecter à la machine virtuelle à partir de l'ordinateur local ssh pi @ localhost -p 5022 user pi password raspberry



Installer un autre dev packages:



sudo apt install wget build-essential  ^libxcb.*-dev libopenal-dev flite1-dev   libspeechd-dev libudev-dev libinput-dev libxkbcommon-x11-dev curl libssl-dev time -y
sudo apt install libasound2-dev libavcodec-dev libclipper-dev libdbus-1-dev libdrm-dev libegl-dev libgles2-mesa-dev
sudo  apt install libx11-dev libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxkbcommon-x11-dev mesa-common-dev libgl1-mesa-dev


Nous configurons et obtenons la sortie des résultats de la configuration:
time ./configure -skip qt3d -no-warnings-are-errors -release -recheck-all -prefix /Qt/5.15.0 -opensource -confirm-license -nomake examples -nomake tests -c++std c++17 -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -xcb-xlib -xcb -feature-thread -feature-xkbcommon -qt-libpng -qt-libjpeg -qt-zlib -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ --recheck-all -skip wayland -skip qtwebengine -skip qtwayland



............Done.

Info: creating super cache file /30/qt5/.qmake.super

Info: creating cache file /30/qt5/.qmake.cache

Info: creating stash file /30/qt5/.qmake.stash



This is the Qt Open Source Edition.



You have already accepted the terms of the Open Source license.



Running configuration tests…





Note: Option 'cache_use' with value 'none' was specified twice



Note: Also available for Linux: linux-clang linux-icc



Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing.



WARNING: QDoc will not be compiled, probably because libclang could not be located. This means that you cannot build the Qt documentation.



Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation.

On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution.

On macOS, you can use Homebrew's llvm package.

On Windows, you must set LLVM_INSTALL_DIR to the installation path.



Qt is now configured for building. Just run 'make'.

Once everything is built, you must run 'make install'.

Qt will be installed into '/Qt/5.15.0'.



Prior to reconfiguration, make sure you remove any leftovers from

the previous build.



real 91m49.471s

user 78m43.608s

sys 7m22.934s



Afficher des informations sur le résultat de la configuration



Ceux qui ont lu jusqu'à ce point et qui ont encore l'enthousiasme de l'essayer, il serait intéressant d'obtenir votre résultat FPS de la vitesse de l'étape de configuration avec une description du processeur sur lequel vous avez démarré. Ce résultat est un lancement sur Intel Core i5 7e génération. Pour une expérience avant le lancement, suivez les conseils de «nettoyage» des sources de la colonne précédente de l'article.



Maintenant, 1 cœur de votre ordinateur prendra beaucoup de temps à construire Qt et éventuellement à construire, et peut-être qu'une erreur apparaît qu'il n'y a pas assez de mémoire ou une erreur pendant la construction. Pour ce faire, je recommande de créer un fichier d'échange pour 1-1,5 Go et de le connecter:



sudo dd if=/dev/zero of=/30/swap1500 bs=256M count=6 status=progress
dd: memory exhausted by input buffer of size 268435456 bytes (256 MiB)

sudo dd if=/dev/zero of=/30/swap1500 bs=128M count=12 status=progress
1610612736 bytes (1.6 GB, 1.5 GiB) copied, 82 s, 19.6 MB/s
12+0 records in
12+0 records out
1610612736 bytes (1.6 GB, 1.5 GiB) copied, 82.223 s, 19.6 MB/s

sudo chmod 600 /30/swap1500
sudo mkswap /30/swap1500
Setting up swapspace version 1, size = 1.5 GiB (1610608640 bytes)
no label, UUID=af79f154-6904-4b6d-8c1d-61890bdda556

sudo swapon /30/swap1500

free
              total        used        free      shared  buff/cache   available
Mem:         252228       24652      142532         536       85044      179184
Swap:       1675256       69888     1605368


Nous collectons et installons:



make && sudo make install


Si des modules supplémentaires sont nécessaires, nous pouvons toujours les ajouter, par exemple pour qtquickcontrols2:



export PATH=/Qt/5.15.0/bin:$PATH
cd /30/qt5/qtuickcontrols2/
qmake
make && sudo make install


Après cela, nous collectons l'application et la lançons:







Conclusion



Il est possible de créer des applications pour ARM sur des appareils x86 à l'aide de l'émulateur QEMU. Je pensais que j'écrirais cet article dans une semaine, mais le processus a traîné pendant près de trois semaines, car chacune des étapes prend beaucoup de temps (installation du système, mise à jour du système, installation des packages de développement, ainsi que l'obtention des codes sources Qt depuis github). Par exemple, la construction de la version statique de Qt dans l'émulateur Raspberry m'a pris 1426 minutes.



Est-ce plus rapide? Oui, ça s'appelle Cross build. Pour ce faire, configurez sysroot, installez un compilateur ARM, configurez et compilez Qt sur votre système hôte. Ensuite, ils configurent QtCreator pour utiliser cette version de Qt et construisent l'application sur leur ordinateur / ordinateur portable x86, obtiennent une version qui fonctionnera sous Linux embarqué. lien 1 lien 2Parce que cela dépasse déjà le cadre de cet article, peut-être que j'écrirai à ce sujet si j'ai le temps ou l'inspiration, mais peut-être que quelqu'un d'autre écrira comment faire cela pour la dernière version de Qt 5.15.



Eh bien, je le répète, si quelqu'un veut répéter les étapes du deuxième chapitre pour l'émulateur ARM Raspberry, vous pouvez écrire le temps qu'il vous faut pour construire qmake et l'étape de configuration, en indiquant votre processeur dans les commentaires.



Merci de votre attention. Bonne chance avec votre créativité!



All Articles