Jan 102015
 

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 i386
apt-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

 

 

Sorry, the comment form is closed at this time.