Instructions on how to build the image
This README provides step-by-step instructions for a working Qt 5.6 installation with LinuxFB backend, based on a Yocto minimal root filesystem.
Clone the repository
$ git clone git@github.com:develersrl/winmate-poky-dora-1.5.4.git
$ cd winmate-poky-dora-1.5.4
$ source oe-init-build-env
Edit the configuration files
- Replace
conf/local.conf
with the following:
BB_NUMBER_THREADS ?= "4"
PARALLEL_MAKE ?= "-j 4"
MACHINE ??= "imx6dlsabresd"
DISTRO ?= "poky"
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K"
CONF_VERSION = "1"
IMAGE_FSTYPES ?= "tar.bz2"
ACCEPT_FSL_EULA = ""
EXTRA_IMAGE_FEATURES += "ssh-server-openssh"
IMAGE_INSTALL_append = "kernel-modules \
gpu-viv-bin-mx6q \
fontconfig \
freetype \
dbus \
icu \
glib-2.0 \
libcap \
libudev \
tslib \
tslib-calibrate \
tslib-tests \
openssl \
liberation-fonts \
egtouch \
"
DISTRO_FEATURES_remove = "x11 wayland"
BB_GENERATE_MIRROR_TARBALLS = "1"
- Replace
conf/bblayers.conf
with the following:
LCONF_VERSION = "6"
BBPATH = "${TOPDIR}"
BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
BBFILES ?= ""
BBLAYERS ?= " \
${BSPDIR}/meta \
${BSPDIR}/meta-yocto \
\
${BSPDIR}/meta-openembedded/meta-oe \
\
${BSPDIR}/meta-fsl-arm \
${BSPDIR}/meta-fsl-arm-extra \
${BSPDIR}/meta-fsl-demos \
${BSPDIR}/meta-openembedded/meta-ruby \
${BSPDIR}/meta-openembedded/meta-multimedia \
\
${BSPDIR}/meta-abb-winmate \
"
BBLAYERS_NON_REMOVABLE ?= " \
${BSPDIR}/meta \
${BSPDIR}/meta-yocto \
"
Build
$ bitbake core-image-minimal
Prepare and install the SDK
$ bitbake core-image-minimal -c populate_sdk
$ tmp/deploy/sdk/poky-eglibc-x86_64-core-image-minimal-cortexa9hf-vfp-neon-toolchain-1.5.4.sh
Install in the directory of your choosing (we'll assume /opt/poky/1.5.4 from now on)
Configure and build Qt 5.6
-
Download and extract Qt 5.6 source files (eg. in
~/Qt5.6.0
) -
Download QtWebKit in Qt 5.6 source directory (eg. in
~/Qt5.6.0/5.6/Src
)
$ cd ~/Qt5.6.0/5.6/Src
$ git clone git@github.com:qtproject/qtwebkit.git
$ cd qtwebkit
$ git checkout 5.6
$ cd ..
- Configure using the following options (modify
CROSS_COMPILE
and-sysroot
according to the SDK install path):
$ ./configure -v -prefix /opt/qt5 -no-pch -device imx6 -device-option \
CROSS_COMPILE=/opt/poky/1.5.4/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- \
-sysroot /opt/poky/1.5.4/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi \
-no-largefile \
-qt-zlib -qt-libpng -qt-libjpeg \
-no-nis -no-cups \
-gui -widgets \
-opensource -confirm-license \
-qreal float \
-pkg-config \
-no-compile-examples \
-icu -fontconfig \
-no-xcb -linuxfb -opengl es2 \
-dbus-linked \
-tslib
- Build and install
$ make
$ make install
-
Build and install QtWebKit
NOTE: Make sure you have the required dependencies installed on your machine when building QtWebKit (eg.
flex
)
$ cd qtwebkit
$ /opt/poky/1.5.4/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/opt/qt5/bin/qmake
$ make
$ make install
Create an SD card
-
Create two partitions, one (
FAT32
) for the kernel and one for the rootfs -
Copy the kernel image
<winmate-poky-dora-1.5.4-path>/build/tmp/deploy/images/imx6dlsabresd/uImage
to the first partition -
Extract the rootfs
<winmate-poky-dora-1.5.4-path>/build/tmp/deploy/images/imx6dlsabresd/core-image-minimal-imx6dlsabresd.tar.gz
in the second partition -
Copy the Qt installation directory
/opt/poky/1.5.4/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/opt/qt5
in the/opt
directory on the SD rootfs partition.
Cross-compiling a Qt application
- In the application folder to be compiled:
$ /opt/poky/1.5.4/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/opt/qt5/qt5/bin/qmake
$ make
- Copy the generated executable on the SD card (or directly on the board)
Running the application
- Boot into the system from u-boot:
run boot_yocto_sd
- Configure eGTouchD to behave like a proper touch panel: in
/etc/eGTouchL.ini
, change theReportMode
to emit a click on touch event:
ReportMode 1
- Start the touchscreen daemon:
$ eGTouchD
- Configure tslib:
$ export TSLIB_CALIBFILE=/etc/pointercal
$ export TSLIB_TSDEVICE=/dev/input/event6
$ export TSLIB_FBDEVICE=/dev/fb0
- Calibrate tslib (only required the first time):
$ ts_calibrate
- Configure Qt runtime:
$ export QT_QPA_PLATFORM=linuxfb
$ export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event6
- Run the application