Simulasikan aplikasi ARM yang dibangun pada prosesor x86 menggunakan Qt sebagai contoh

Kekuatan prosesor modern berkembang, baik di komputer stasioner maupun di berbagai perangkat tertanam, yang merupakan prosesor berbasis ARM dengan sistem operasi linux. Hari ini, dalam kerangka artikel ini, kami akan meluncurkan emulator prosesor ARM pada komputer x86 dan di dalamnya kami akan mencoba membangun Qt dari sumber dan aplikasi uji, yaitu. jadi untuk berbicara dan meniru perakitan aplikasi ARM.



Di bagian pertama artikel, kami akan menggunakan emulator QEMU untuk aarch64, di bagian kedua, kami akan meluncurkan emulator Raspberry dan memeriksa fungsionalitas aplikasi di dalamnya.



Atas nama saya sendiri, saya ingin mencatat bahwa semua ini tidak dilakukan dengan cepat, dan jika Anda mencoba melakukan semua ini, siklus penuh akan memakan waktu beberapa hari!)







Membangun dari sumber Qt di CentOS ARM



Untuk menginstal di sistem host, kita perlu menginstal emulator QEMU. Pada distribusi berbasis Debian, ini adalah paket qemu-system-arm. Untuk mengelola mesin virtual dalam mode grafis, Anda dapat menginstal virt-manager.



Setelah memulai, buat mesin virtual:







dan pilih boot jaringan dari url:

mirror.centos.org/altarch/7/os/aarch64 Atur







jumlah prosesor dan RAM:







Tetapkan ukuran disk sistem:







Pengaturan akhir, pemilihan jaringan:







Bagi mereka yang ingin mengunduh atau instal offline, ada gambar disk:



arm64



Selanjutnya, Anda perlu menginstal sistem pada hard disk dalam mode teks, memilih opsi jawaban yang diperlukan, dan mengonfirmasi dengan jawaban ya:











Perakitan akan dilakukan pada disk virtual kedua, untuk ini kita membutuhkan disk 25-30 Gb. Kami membuat hard disk baru dengan mematikan mesin virtual dan menghubungkannya dan setelah itu kami mulai lagi. Mari kita pisahkan hard drive dan format kita:



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


Mengapa sistem file bukan XFS
XFS, Raspberry, .. XFS.



Setelah instalasi, kami terhubung ke mesin virtual dan menginstal paket yang kami butuhkan :



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


Konfigurasi:




./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


Kami mengulangi peluncuran konfigurasi dan mendapatkan:




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


Instal kompiler dan konfigurasikan lagi:



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.


Kami mencari dan mengirimkan paket yang diperlukan:




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


Kami mengkonfigurasi, dan kami sudah mendapatkan satu kesalahan:



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


Tambahkan lebih banyak paket dan lihat log konfigurasi:



 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.


Nah, semuanya sudah siap, tetapi kita perlu memeriksa opsi yang mungkin berguna bagi kita:



  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


Dan bagaimanapun juga, kita mungkin membutuhkan interaksi jaringan dari aplikasi, kita tidak bekerja hanya melalui 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]: 



Versi 1.0.2k, yang kurang dari yang diminta Qt ( Meningkatkan versi OpenSSL minimum yang didukung menjadi 1.1. )



Kita harus membangun OpenSSL dan kemudian membangun Qt dari sumber:



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


Kemudian kita kembali mengkonfigurasi Qt dan mulai membangunnya dengan perintah make atau make -j4 , sesuai dengan jumlah prosesor (jika Anda memutuskan untuk membuat VM dengan 4 prosesor), yang ditentukan dalam pengaturan mesin virtual .



Pembuatan aplikasi mengalami error pada:



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


Kami menginstal versi tambahan dari paket dan pada percobaan 3 kami mendapatkannya:



  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


Konfigurasi dan perakitan sedang berlangsung. Kami membuat aplikasi uji di QtCreator (dengan qmake perakitan), menyalin sumber ke mesin virtual dan membangun aplikasi. Binar sudah siap, tetap mengujinya di Raspberry.



2. Jalankan di emulator Raspberry



Karena dalam kerangka artikel ini kami meniru prosesor ARM, itu berarti kami juga akan menjalankan di mesin virtual tautan 1 tautan 2 tautan 3 :



Unduh gambar resmi dari situs web Raspberry, kernel untuk emulator dan jalankan (Saya membuat file startup seperti itu):




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


Mencoba meluncurkan aplikasi kami:







Mengapa demikian? Kami melihat prosesor:







Kami melihat file konfigurasi di CentOS:



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


Nah, kami telah menyusun aplikasi armv8 64-bit dan mencoba menjalankannya di emulator 32-bit dengan prosesor armv6. Saya berharap pemilik perangkat nyata dengan prosesor 64-bit baru dapat berhenti berlangganan di komentar apakah mereka berhasil menjalankan aplikasi di perangkat nyata atau tidak.



Nah nggak masalah, sekarang sudah bisa kita kumpulkan di emulator Raspberry? Kami menemukan bahwa kami memiliki sedikit ruang disk kosong setelah memanggil perintah df -h. Cara termudah adalah menyalin file gambar, memperbesarnya, memulai mesin virtual dengan dua sistem file dengan meningkatkan partisi root pada mesin kedua, dan kemudian menggunakan gambar kedua. Pergilah:



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


Tambahkan hard drive lain ke skrip startup:



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



Setelah memulai, edit hard drive ini sudo cfdisk / dev / sdc:



Ubah ukuran:







Tulis dan konfirmasi ya:







Jangan lupa untuk memeriksa, bahwa disk telah menjadi ukuran yang kami butuhkan:



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


Sesuatu ukuran disk sdc yang terhubung ke folder / test tidak ditambahkan, mari kita perbaiki:



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


Matikan mesin virtual. Edit file start-emul.sh lagi, ganti hard drive hda dengan yang baru, dan hapus link ke hard drive ketiga -hdc. Kami sekarang memiliki sistem file dengan lebih banyak ruang.



Sekarang kita dapat menghubungkan hard disk dengan sumber Qt dari mesin virtual pertama.



Saran: yang terbaik adalah "membersihkan sumber" dari file sementara, mis. mengembalikan status git kita, yang pada saat mengkloning repositori sebelum mengonfigurasi:



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


Jadi di Debian kita membutuhkan:



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 


Konfigurasi:




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


Juga mendapatkan kesalahan:



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.


Dewan. Apakah Anda mengetik perintah ini di jendela grafis QEMU? Jangan lupa, kami memiliki ssh: Anda harus memulai di mesin virtual server ssh: sudo systemctl start ssh && sudo systemctl aktifkan ssh dan sambungkan ke mesin virtual dari komputer lokal ssh pi @ localhost -p 5022 pengguna pi kata sandi raspberry



Instal paket dev lainnya:



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


Kami mengkonfigurasi dan mendapatkan output dari hasil konfigurasi:
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



Mengeluarkan informasi tentang hasil konfigurasi



Mereka yang telah membaca hingga poin ini dan yang masih memiliki antusias untuk mencobanya, akan menarik untuk mendapatkan hasil FPS Anda tentang kecepatan tahap konfigurasi dengan deskripsi prosesor yang Anda jalankan. Hasil ini adalah peluncuran Intel Core i5 7th Gen. Untuk percobaan sebelum peluncuran, ikuti saran tentang "membersihkan" sumber dari kolom artikel sebelumnya.



Sekarang 1 inti komputer Anda akan membutuhkan banyak waktu untuk membangun Qt dan mungkin membangun, dan mungkin muncul kesalahan bahwa tidak ada cukup memori atau kesalahan selama pembuatan. Untuk melakukan ini, saya sarankan membuat file swap 1-1,5 Gb dan menghubungkannya:



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


Kami mengumpulkan dan memasang:



make && sudo make install


Jika modul tambahan diperlukan, kami selalu dapat menambahkannya, misalnya, untuk qtquickcontrols2:



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


Setelah itu, kami mengumpulkan aplikasi dan meluncurkannya:







Kesimpulan



Anda dapat membuat aplikasi untuk ARM di perangkat x86 menggunakan emulator QEMU. Saya pikir saya akan menulis artikel ini dalam satu minggu, tetapi prosesnya berlarut-larut selama hampir tiga minggu, karena setiap tahapan membutuhkan waktu yang sangat lama (menginstal sistem, memperbarui sistem, menginstal paket dev, serta mendapatkan kode sumber Qt dari github). Misalnya, membangun versi statis Qt di emulator Raspberry memerlukan waktu 1426 menit.



Apakah lebih cepat? Ya, ini disebut Cross build. Untuk melakukan ini, konfigurasikan sysroot, instal kompiler ARM, konfigurasikan dan buat Qt di sistem host Anda. Kemudian mereka mengonfigurasi QtCreator untuk menggunakan versi Qt ini dan membangun aplikasi di komputer / laptop x86 mereka dan mendapatkan versi yang akan berfungsi di linux tertanam. tautan 1 tautan 2Karena ini sudah di luar cakupan artikel ini, mungkin saya akan menulis tentang ini jika saya punya waktu atau inspirasi, tetapi mungkin orang lain akan menulis cara melakukannya untuk versi terbaru Qt 5.15.



Nah, saya ulangi, jika seseorang ingin mengulangi langkah-langkah dari bab kedua untuk emulator ARM Raspberry, maka Anda dapat menulis berapa lama Anda membangun qmake dan tahap konfigurasi, menunjukkan prosesor Anda di komentar.



Terima kasih atas perhatian Anda. Semoga berhasil dengan kreativitas Anda!



All Articles