How to Build and Install Qt Application for FriendlyELEC Boards

From FriendlyARM WiKi
Jump to: navigation, search

查看中文

Qt Versions

Qt has various versions for various platforms. Each Qt version has its own features and here a list of versions:

CPU Qt Version Display Driver OpenGL QtWebEngine Capacitive Touch ARM Board
RK3399 Qt 5.10.0 EGLFS Yes Yes Multiple-point touch NanoPC-T4
S5P4418 Qt 5.9.1 EGLFS Yes Yes Multiple-point touch NanoPi S2/NanoPi M2A/NanoPi Fire2/NanoPC T2/Smart4418
S5P6818 Qt 5.9.1 EGLFS Yes Yes Multiple-point touch NanoPi M3/NanoPi Fire3/NanoPC T3
Allwinner H3 Qt 4.8.6 LinuxFB No No Single-point touch NanoPi-Duo/NanoPi-M1-Plus/NanoPi-M1/NanoPi-NEO-Air/NanoPi-NEO-Core/NanoPi-NEO
Allwinner H5 Qt 4.8.6 LinuxFB No No Single-point touch NanoPi-K1-Plus/NanoPi-NEO-Core2/NanoPi-NEO-Plus2/NanoPi-NEO2
Amlogic S905 Qt 5.9.1 LinuxFB No No Single-point touch NanoPi-K2

Install Cross Compiler for Qt

(Note: we suggest users use a host PC running a 64-bit Ubuntu 16.04)
Here is a list of cross compilers for various CPUs and ARM boards:

CPU Qt Version Compiler & QtSDK
S5P4418 Qt 5.9.1 download link
S5P6818 Qt 5.9.1 download link
Allwinner H3 Qt 4.8.6 download link
Allwinner H5 Qt 4.8.6 download link
Amlogic S905 Qt 5.9.1 download link

Install a cross compiler by running the following commands:

chmod 755 ./install.sh
sudo ./install.sh

Cross Compile Qt Program

We took QtE-Demo as an example to show how to compile a Qt program.

S5P4418 Platform

git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/Qt-5.9.1-nexell32-x86tools/bin/qmake ../QtE-Demo/QtE-Demo.pro
make

S5P6818 Platform

git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
//usr/local/Trolltech/Qt-5.9.1-nexell64-x86tools/bin/qmake ../QtE-Demo/QtE-Demo.pro
make

Allwinner H3 Platform

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin/:$PATH
git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake ../QtE-Demo/QtE-Demo-Qt4.pro
make

Allwinner H5 Platform

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin/:$PATH
git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake ../QtE-Demo/QtE-Demo-Qt4.pro
make

Amlogic S905 Platform

export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH
git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/QtEmbedded-5.9.1-arch64/bin/qmake ../QtE-Demo/QtE-Demo.pro
make

Run Qt Application on ARM Board

Before you run a Qt application on a board you need to setup the board's environment variables by running the following commands on that board:

For Qt5 run setqt5env:

. /usr/bin/setqt5env

For Qt4 run setqt4env:

. /usr/bin/setqt4env

Run QtE-Demo:

./QtE-Demo -qws

Compile Qt Program on ARM Board

We took QtE-Demo as an example to show how to compile a Qt program on an ARM board. Currently this only applies to a S5P4418 or S5P6818 board:

S5P4418 Platoform

git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/Qt-5.9.1-nexell32-armhftools/bin/qmake ../QtE-Demo/QtE-Demo.pro
make
. setqt5env
./QtE-Demo

S5P6818 Platform

git clone https://github.com/friendlyarm/QtE-Demo
mkdir build && cd build
/usr/local/Trolltech/Qt-5.9.1-nexell64-aarch64tools/bin/qmake ../QtE-Demo/QtE-Demo.pro
make
. setqt5env
./QtE-Demo

Auto-Run Qt Application on System Startup

In our test our QtE-Demo application was under the /root directory. Make sure your "/etc/rc.local" file has the following contents:

. /usr/bin/setqt5env
/root/QtE-Demo -qws&

If this is a Qt4 system you need to change "setqt5env" to "setqt4env".

Display Rotation

Here is a list of methods you can use to rotate your display for various platforms:

CPU Qt Version Display Rotation
S5P4418 Qt 5.9.1 export ROTATION=-90
. setqt5env
./YourApp

Applicable rotation degrees: 0, 90, 180, -90
S5P6818 Qt 5.9.1 export ROTATION=-90
. setqt5env
./YourApp

Applicable rotation degrees: 0, 90, 180, -90
Allwinner H3 Qt 4.8.6 . setqt4env
export QWS_DISPLAY='Transformed:Rot90'
./YourApp

Applicable rotation degrees: 0, 90, 180, 270
Allwinner H5 Qt 4.8.6 . setqt4env
export QWS_DISPLAY='Transformed:Rot90'
./YourApp

Applicable rotation degrees: 0, 90, 180, 270
Amlogic S905 Qt 5.9.1 . setqt5env
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation=90
./YourApp

Applicable rotation degrees: 0, 90, 180, 270

Common Issues

Compiler Error: ../QtE-Demo/main.cpp:18:21: fatal error: QtWidgets: No such file or directory

Solution: check your Makefile file generated by qmake. Qt5's path should point to sysroot i.e. rootfs-s5p4418 or rootfs-s5p6818. You need to check whether or not this directory exists under /opt. If it doesn't you need to reinstall your sdk.

Hide Console Cursor

Hide Cursor

sudo echo 0 > /sys/class/graphics/fbcon/cursor_blink

Show Cursor

sudo echo 1 > /sys/class/graphics/fbcon/cursor_blink

Hide/Show Mouse Cursor

When you run Qt5 EGLFS you can hide or show your mouse's cursor by setting the QT_QPA_EGLFS_HIDECURSOR environmental variable. When this variable is set to 1 the cursor will be hidden when it is set to 0 the cursor will show.

For example after setqt5env is executed run the following command:

export QT_QPA_EGLFS_HIDECURSOR=0

The cursor will show.

Extend Boot Logo's Display Time

Since Linux kernel by default sets output to a terminal a boot logo will soon be flushed. Sometimes users prefer their logo to stay for much longer time, This can be done by changing kernel configuration and recompiling a kernel

For Kernel 4.4

Device Drivers --->
    Graphics support --->
        Console display dirver support --->
            < > Framebuffer Console support

Disabling "Framebuffer Console support" allows a Logo to stay long enough until a Qt program runs.


For Kernel 3.4

Device Drivers --->
    Graphics support --->
         [*] Bootup logo --->
                  [ ]   Standard black and white Linux logo
                  [ ]   Standard 16-color Linux logo 
                  [ ]   Standard 224-color Linux logo 
                  [*]   Copy logo from previous FB
          Console display driver support  --->
                  [ ] Framebuffer Console support

Go to the "Device Drivers" -> "Graphics support" menu, enable the "Bootup logo" option, and select only the "Copy logo from previous FB" in the "Bootup logo" option.
Go back to the "Graphics support" menu, enter "Console display driver support" menu, disable "Framebuffer Console support" option.

Update Log

Dec-5-2017

  • Released English version

Dec-6-2017

  • Added Section 5

Jan-30-2018

  • Added Section 8