Vorbereiten des „target“ Boards Olimex A20 Micro
Standard Olimex Debian Image auf die Micro SD Karte kopieren:
dd bs=4M if=A20_OLinuxino_Micro_debian_34_90_release_10.img of=/home/sdx
Beim ersten Start von der Mirco SD Karte muss ein Monitor über HDMI angeschlossen sein.
Über das Menü der LXDE Oberfläche kann ein LXterminal geöffnet werden.
Einstellen der Ausgabe auf das LCD Display:
cd /root ./change_display_olimex_A20.sh
Grafische Oberfläche abschalten:
In der Datei /etc/X11/default-display-manager folgendes ändern
# /usr/bin/slim /usr/bin/true
Netzwerk manuell aktivieren:
dhclient eth0
Netzwerk dauerhaft automatisch per DHCP einschalten:
In der Datei /etc/network/interfaces die Zeile ändern
iface eth0 inet static
in
iface eth0 inet dhcp
Zeitzone einstellen:
dpkg-reconfigure tzdata
Sprache auf Deutsch stellen:
dpkg-reconfigure locales
In der Datei /etc/environment folgende Variable abändern:
LC_ALL="de_DE.utf8"
Partition 2 erweitern um die ganze Micro SD Karte zu nutzen:
cd /root ./resize_sd.sh /dev/mmcblk0 2
Hostnamen ändern:
In de Datei /etc/hostname den Hostnamen in der ersten Zeile eintragen -> reboot
Update der Debian Installation:
apt-get update apt-get upgrade
Wichtige Paket Anhängigkeiten für QT installieren:
apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad libicu-dev libsqlite3-dev libxslt1-dev libssl-dev gdbserver
Mali Grafikchipsatz Treiber neu bauen um unter QT eglfs nutzen zu können:
cd /opt git clone https://github.com/linux-sunxi/sunxi-mali.git cd sunxi-mali git submodule init git submodule update make config ABI=armhf VERSION=r3p0 EGL_TYPE=framebuffer make install
Module laden:
modprobe mali
modprobe drm
modprobe mali_drm
Um die richtige Version des Kernel Treibers zu ermitteln gibt es ein kleines Script:
cd /opt/sunxi-mali/version make ./version
In dem Verzeichnis /opt/sunxi-mail/test liegt ein Test:
cd /opt/sunxi-mali/test make ./test
Blinkenden Cursor auf der Konsole ausschalten:
In de Datei /root/.bashrc folgende Zeile hinzufügen.
echo 0 > /sys/class/graphics/fbcon/cursor_blink
Bildschirmschoner der Konsole ausschalten:
In der Datei /root/.bashrc folgende Zeile hinzufügen.
setterm -blank 0
Autologin Benutzer:
In der Datei /etc/inittab
#1:2345:respawn:/sbin/getty 38400 tty1 1:2345:respawn:/bin/login -f root </dev/tty1 >/dev/tty1 2>&1
#T0:2345:respawn:/sbin/getty -L -a root ttyS0 115200 linux
Automastischer Programmstart (Beispiel):
In der Datei /root/.bashrc folgende Zeile hinzufügen.
/root/ladeterminal/ladeterminal -plugin Tslib
Das Plugin Tslib ist für die Funktion des LCD Touch.
Touch LCD Display calibrieren:
ts_calibrate
Environment ergänzen:
Unter /etc/environment zwei Zeilen hinzufügen
LD_LIBRARY_PATH=/usr/local/qt5a20/lib QT_QPA_EGLFS_DISABLE_INPUT=1
Vorbereiten des „cross-compile“ Rechners.
Auf einem 64Bit System wird die 32 Bit Laufzeitumgebung benötigt:
Unter Debian:
dpkg --add-architecture i386apt-get install ia32-libs
Mount des „target“ Dateisystems an den Cross-Compile Rechner:
sudo sshfs -o allow_other root@192.168.0.100:/ /mnt/a20/
Linaro Toolchain herunterladen und entpacken:
cd /opt wget https://releases.linaro.org/14.01/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux.tar.bz2 tar xvfj gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux.tar.bz2 mv gcc-linaro-arm-linux-gnueabihf-4.8-2014.01_linux toolchain
Cross-Compile-Tools herunterladen und installieren:
cd /opt
git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
cd cross-compile-tools
./fixQualifiedLibraryPaths /mnt/a20 /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-gcc
QT Everywhere herunterladen und entpacken:
cd /opt wget http://download.qt.io/official_releases/qt/5.5/5.5.1/single/qt-everywhere-opensource-src-5.5.1.tar.gz tar -xvzf qt-everywhere-opensource-src-5.5.1.tar.gz mv qt-everywhere-opensource-src-5.5.1 qt5
Eine Device Datei für den Olimex A20 anlegen:
cd /opt/qt5/qtbase/mkspecs/devices cp -r linux-beagleboard-g++ linux-a20olimex-g++ cd linux-a20olimex-g++
Die Datei qmake.conf mit diesem Inhalt füllen:
#
# qmake configuration for the A20_OlinuxinO boards
# http://www.olimex.com/
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental gdb_dwarf_index
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
load(device_config)
QT_QPA_DEFAULT_PLATFORM = eglfs
#EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_a20.cpp
# modifications to g++.conf
QMAKE_CC = $${CROSS_COMPILE}gcc
QMAKE_CXX = $${CROSS_COMPILE}g++
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_LINK_SHLIB = $${QMAKE_CXX}
# modifications to linux.conf
QMAKE_AR = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
QMAKE_STRIP = $${CROSS_COMPILE}strip
COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a7 -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard
#modifications to gcc-base.conf
QMAKE_CFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS_RELEASE += -O3
QMAKE_LIBS += -lrt -lpthread -ldl
# Extra stuff (OpenGL, DirectFB, ...)
QMAKE_INCDIR_EGL = /mnt/a20/usr/include/EGL
QMAKE_LIBDIR_EGL = /mnt/a20/usr/lib
QMAKE_INCDIR_OPENGL_ES2 = /mnt/a20/usr/include/GLES2
QMAKE_LIBDIR_OPENGL_ES2 = /mnt/a20/usr/lib
#QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
#QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}
QMAKE_LIBS_EGL = -lEGL
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
#QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}
# Sanity check
deviceSanityCheckCompiler()
load(qt_config)
Pfade für dbus und glib setzen:
cd /opt/qt5/qtbase
Die Datei configure bearbeiten:
# flags for libdbus-1 QT_CFLAGS_DBUS="-I/mnt/a20/usr/include/dbus-1.0/ -I/mnt/a20/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/" QT_LIBS_DBUS=-ldbus-1
# flags for Glib (X11 only) QT_CFLAGS_GLIB="-I/mnt/a20/usr/include/glib-2.0/ -I/mnt/a20/usr/lib/arm-linux-gnueabihf/glib-2.0/include/" QT_LIBS_GLIB=-lglib-2.0
Ein Patch für den Mali Grafiktreiber:
cd /opt/qt5/qtbase/src/plugins/platforms/eglfs
Folgenden Abschnitt in der Datei qeglfsdeviceintegration.cpp (QT 5.5.1) ersetzen / ändern:
EGLNativeWindowType QEGLDeviceIntegration::createNativeWindow(QPlatformWindow *platformWindow,
const QSize &size,
const QSurfaceFormat &format)
{
Q_UNUSED(platformWindow);
Q_UNUSED(size);
Q_UNUSED(format);
// return 0;
static struct mali_native_window native_window = {
.width = (short unsigned int)size.width(),
.height = (short unsigned int)size.height(),
};
return &native_window;
}
Compile, make, make install:
./configure -opengl es2 -device linux-a20olimex-g++ -device-option CROSS_COMPILE=/opt/toolchain/bin/arm-linux-gnueabihf- -sysroot /mnt/a20/ -opensource -confirm-license -optimized-qmake -release -make libs -prefix /usr/local/qt5a20 -tslib -no-pch -nomake examples -nomake tests -no-xcb -eglfs -v
make
make install