Unofficial Crosstool

Ich habe mir mal die Crosscompiler-Umgebung von Samr7 näher angeschaut. Die Installation verlief sehr einfach, anders als erwartet. Benutzt wurde als Testsystem Debian Etch. Es existiert aber auch ein vorbereitetes Paket für Cygwin oder es funktioniert auch unter Puppy Linux mit qemu unter Windows.

In Zusammenhang mit Anjuta ergibt das ganze schon eine nette Entwicklungsumgebung und reicht auch völlig aus, natürlich kann man auch Eclipse verwenden.

Samr7 Crosstool Installation

1. Benötigte Datein und Pakete

Pakete

bison
flex
patch
wget 
byacc
build-essential (gcc, g++, make)
[autoconf automake libtool]
ezx-crosstool-0.6.tar.bz2 http://lsb.blogdns.com/ezx-crosstool
dev-ezx-0.2.0.tgz http://lsb.blogdns.com/ezx-devkit
ezx-lib.tar.gz Libraries from Phone

Libraries from Phone

cd /usr/lib
tar zcvf /mmc/mmca1/ezx-lib.tar.gz *

2. Crosstool

a.) Zuerst wird unter /opt/ ein Verzeichnis als root angelegt z.B. "A780".
Von diesem Verzeichnis werden die Zugriffsrechte für den Benutzer geändert. Ab jetzt erfolgen die restlichen Schritte alle als User.

b.) Die Datei "ezx-crosstool-0.6.tar.bz2" in das Verzeichnis "/opt/a780" kopieren und entpacken.

tar xfvj ezx-crosstool-0.6.tar.bz2

In das neu entstandene Verzeichnis wechseln und das folgende build script ausführen. Dieses lädt weitere benötigte Datei aus dem Internet, patched diese und kompiliert sie. Dies dauert je nach Netzgeschwindigkeit und Prozessorleistung ziehmlich lange.

./build.sh

3. Development Kit

a.) Die Datein "dev-ezx-0.2.0.tgz" und "ezx-lib.tar.gz" in das Verzeichnis "/opt/a780" kopieren und entpacken.

tar xfvz dev-ezx-0.2.0.tgz
tar xfvz ezx-lib.tar.gz -C /opt/a780/dev-ezx/lib/

Nun in folgendes Verzeichnis wechseln "/opt/a780/dev-ezx/moc" und das moc Program bauen.

make

4. Qmake (optional)

Optional kann man mit qmake ein Makefile erstellen. Dazu werden angepasste config Datein benötigt, sowie das Programm qmake.

Von den Motorolafans bekommt man die Konfigurationdatein passend für das Crosstool. Diese sind in der folgenden Datei enthalten "dev-ezx-0.2.0-qmake.tar.gz".

Link für Datei: help on getting ezx working

Des Weiteren wird qmake benötigt. Dafür einfach die QT3 Developmenttools installieren (qt3-dev-tools).

a.) Die Datei dev-ezx-0.2.0-qmake.tar.gz in das Verzeichnis /opt/a780/dev-ezx-0.2.0 kopieren und entpacken.

tar xfvz dev-ezx-0.2.0-qmake.tar.gz

b.) Danach installiert man qmake oder kopiert es sich von einem anderen Computer. Bei Debian liegt die Datei unter "/usr/bin/qmake-qt3". Diese wird in qmake umbenannt und wird in den folgenden Ordner abgelegt "/opt/a780/dev-ezx-0.2.0/qt/bin".

5. Helloworld-qmake

In der Datei "dev-ezx-0.2.0-qmake.tar.gz" ist auch ein Beispiel Programm. Um es zu kompilieren wechselt muss die "setenv.sh" angepasst werden. Diese liegt in dem selben Ordner von dem Helloworld Beispiel.

In diesem Beispiel muss das Crosstoolverzeichnis geändert werden von "CROSSTOOL_DIR=/opt/ezx-crosstool" nach "CROSSTOOL_DIR=/opt/a780/ezx-crosstool-0.6".

Nun kann das Helloworld Programm kompiliert werden.

source setenv.sh
qmake helloworld.pro
make

Um die Applikation kleiner und schneller zu machen strippen wir das Binary. Somit werden unnötige Teile aus der Datei entfernt, wie zum Beispiel die Debugsymbole.

arm-linux-strip helloworld

Jetzt wird die helloworld Datei einfach auf das Handy kopiert. Dafür empfehle ich das Programm Linuxftp. Mit dem Programm kann man Datein übertragen und gleichzeitig über Telnet verbunden sein; oder man kopiert es über ssh.

Über Telnet zu dem Speicherort der helloworld Datei wechseln. Zum Starten müssen vorerst noch die Umgebungsvariablen gesetzt werden also:

. /home/native/.profile
./helloworld

Natürlich kann man das auch auf dem Telefon direkt in einer Konsole ausführen. Das Resultat ist auf den folgenden Bildern zu sehen.

haken bt

6. Tmake statt Qmake (optional)

Tmake in "/opt/a780/dev-ezx-0.2.0/qt" entpacken.

Link für Datei: tmake-1.13.tar.gz
tar xfvz tmake-1.13.tar.gz

Die Datein tmake und progen unter "/opt/a780/dev-ezx-0.2.0/qt/tmake-1.13/bin/" einfach in den folgenden Ordner verschieben "/opt/a780/dev-ezx-0.2.0/qt/bin".

Im Verzeichnis tmake-1.13/lib/qws/linux-ipaq-g++ due tmake.conf editieren.

#
# $Id: tmake.conf,v 1.1 1999/11/08 03:06:27 warwick Exp $
#
# tmake configuration for linux-g++ using the arm-linux-g++ crosscompiler.
#

TEMPLATE		= app
CONFIG			= qt warn_on release

TMAKE_ARM_INCDIR	= $(CROSSTOOL_DIR)/gcc-arm-iwmmxt/gcc-3.3.6-glibc.2.3.2/arm-linux/arm-linux/include
TMAKE_ARM_LIBDIR	= $(CROSSTOOL_DIR)/gcc-arm-iwmmxt/gcc-3.3.6-glibc.2.3.2/arm-linux/arm-linux/lib
 
TMAKE_CC		= arm-linux-gcc
TMAKE_DASHCROSS		= -arm
TMAKE_CFLAGS		= -pipe
TMAKE_CFLAGS_WARN_ON	= -Wall -W
TMAKE_CFLAGS_WARN_OFF	=
TMAKE_CFLAGS_RELEASE	= -O2 -mcpu=iwmmxt -mtune=iwmmxt
TMAKE_CFLAGS_DEBUG	= -g
TMAKE_CFLAGS_SHLIB	= -fPIC
TMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
TMAKE_CFLAGS_THREAD	= -D_REENTRANT

TMAKE_CXX		= arm-linux-g++
TMAKE_CXXFLAGS		= $$TMAKE_CFLAGS -DQWS -fno-exceptions -fno-rtti
TMAKE_CXXFLAGS_WARN_ON	= $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF	= $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE	= $$TMAKE_CFLAGS_RELEASE
TMAKE_CXXFLAGS_DEBUG	= $$TMAKE_CFLAGS_DEBUG
TMAKE_CXXFLAGS_SHLIB	= $$TMAKE_CFLAGS_SHLIB
TMAKE_CXXFLAGS_YACC	= $$TMAKE_CFLAGS_YACC
TMAKE_CXXFLAGS_THREAD	= -D_REENTRANT

TMAKE_INCDIR		= $$TMAKE_ARM_INCDIR
TMAKE_LIBDIR		= $$TMAKE_ARM_LIBDIR
TMAKE_INCDIR_X11	= 
TMAKE_LIBDIR_X11	= 
TMAKE_INCDIR_QT		= $(QTDIR)/include $(EZXDIR)/include
TMAKE_LIBDIR_QT		= $(DEVDIR)/lib -L$(EZXDIR)/lib
TMAKE_INCDIR_OPENGL	= /usr/X11R6/include
TMAKE_LIBDIR_OPENGL	= /usr/X11R6/lib

TMAKE_LINK		= arm-linux-g++
TMAKE_LINK_SHLIB	= arm-linux-g++
TMAKE_LFLAGS		= -Wl,-rpath-link,$(EZXDIR)/lib,-rpath-link,$(EZXDIR)/lib/inputmethods
TMAKE_LFLAGS_RELEASE	=
TMAKE_LFLAGS_DEBUG	=
TMAKE_LFLAGS_SHLIB	= -shared
TMAKE_LFLAGS_SONAME	= -Wl,-soname,
TMAKE_LFLAGS_THREAD	=
TMAKE_RPATH		= -Wl,-rpath-link,$(EZXDIR)/lib,-rpath-link,$(EZXDIR)/lib/inputmethods

TMAKE_LIBS		= 
TMAKE_LIBS_X11		= 
TMAKE_LIBS_X11SM	= 
TMAKE_LIBS_QT		=  -lezxappbase-xscale-r -lqte-mt-xscale-r -lezxjpeg-xscale-r -lezxnotification-xscale-r
TMAKE_LIBS_QT_THREAD	=  -lezxappbase-xscale-r -lqte-mt-xscale-r -lezxjpeg-xscale-r -lezxnotification-xscale-r
TMAKE_LIBS_OPENGL	= 
TMAKE_LIBS_THREAD	= -lpthread

LIBS		+= -L${DEVDIR}/lib -lezxappbase-xscale-r -lqte-mt-xscale-r -lezxjpeg-xscale-r -lezxnotification-xscale-r

TMAKE_MOC		= $(QTDIR)/bin/moc
TMAKE_UIC		= $(QTDIR)/bin/uic

TMAKE_AR		= arm-linux-ar cqs
TMAKE_RANLIB		=

TMAKE_TAR		= tar -cf
TMAKE_GZIP		= gzip -9f

In die "setenv.sh" muss dann noch geändert werden.

export TMAKEPATH=$QTDIR/tmake-1.13/lib/qws/linux-ipaq-g++
source setenv.sh
progen -o helloworld.pro
tmake -o Makefile helloworld.pro

Ich hoffe das Tutorial ist hilfreich. Es wird eventuell noch erweitert und genauer auf EZX/QT eingegangen und auf die mpkg Erstellung.