Toolchain/de

From Openmoko

(Difference between revisions)
Jump to: navigation, search
m
 
(35 intermediate revisions by 2 users not shown)
Line 8: Line 8:
 
== Softwareentwicklung für das Betriebssystem ==
 
== Softwareentwicklung für das Betriebssystem ==
  
In diesem Fall solltest/kannst Du eine bereits compilierte Toolchain vom Openmoko-Projekt verwenden. Im folgenden liegt eine Anleitung vor, die die ersten Schritte zum compilieren und ausführen eines Projektes auf dem Zielgerät beschreibt. Vielleicht hast Du schon etwas von [[OpenEmbedded/de|OpenEmbedded]] gehört, jedoch solltest Du als Applikationsentwickler '''nicht''' [[OpenEmbedded/de|OpenEmbedded]] nutzen, sondern auf die Toolchain zurückgreifen.
+
In diesem Fall sollte/kann man eine bereits compilierte Toolchain vom Openmoko-Projekt verwenden. Im folgenden liegt eine Anleitung vor, die die ersten Schritte zum compilieren und ausführen eines Projektes auf dem Zielgerät beschreibt. Vielleicht hat man schon etwas von [[OpenEmbedded/de|OpenEmbedded]] gehört, jedoch sollte man als Applikationsentwickler '''nicht''' [[OpenEmbedded/de|OpenEmbedded]] nutzen, sondern auf die Toolchain zurückgreifen.
  
 
== Systemintegration und Anpassung einer Distribution ==
 
== Systemintegration und Anpassung einer Distribution ==
  
Für diese Aufgabe solltest Du [[OpenEmbedded/de|OpenEmbedded]] nutzen, das einen eigenen Cross-Compiler beim Einrichten produziert. Systemintegration und die Anpassung einer Distribution werden auf dieser Seite nicht behandelt.
+
Für diese Aufgabe sollte man [[OpenEmbedded/de|OpenEmbedded]] nutzen, das einen eigenen Cross-Compiler beim Einrichten produziert. Systemintegration und die Anpassung einer Distribution werden auf dieser Seite nicht behandelt.
  
 
=Elementare Benutzung der Toolchain =
 
=Elementare Benutzung der Toolchain =
Line 18: Line 18:
 
==Bedingungen zur Nutzung der Toolchain==
 
==Bedingungen zur Nutzung der Toolchain==
  
Du solltest dich halbwegs mit Linux auskennen und die grundlegenden Werkzeuge der Kommandozeile benutzen können. Weiterhin wird ein zur x86-Architektur kompatibler Computer benötigt mit mindestens 1GB freien Festplattenspeicher. Von Vorteil ist eine vorhandene Erfahrung mit dem compilieren von Programmen aus dem Quellcode an einem lokalen Computer. Im folgenden wird angenommen, dass du einen Schreibzugriff in Dein Home-Verzeichnis und in <tt>/usr/local/</tt> (evtl. sind dazu <tt>root</tt>-Rechte erforderlich). Bitte Deinen Systemadministrator um Unterstützung, falls diese Bedingungen nicht erfüllt sind.
+
Man sollte sich halbwegs mit Linux auskennen und die grundlegenden Werkzeuge der Kommandozeile benutzen können. Weiterhin wird ein zur x86-Architektur kompatibler Computer benötigt mit mindestens 1GB freien Festplattenspeicher. Von Vorteil ist eine vorhandene Erfahrung mit dem compilieren von Programmen aus dem Quellcode an einem lokalen Computer. Im folgenden wird angenommen, dass man Schreibzugriff in sein Home-Verzeichnis und in <tt>/usr/local/</tt> (evtl. sind dazu <tt>root</tt>-Rechte erforderlich) hat. Falls dies nicht der
 +
Fall ist, sollte man den Systemadministrator um Unterstützung bitten.
  
Weiterhin benötigst Du eine funktionierende Installation einer Reihe von Werkzeugen, die das automatische Erzeugen von Programmen ermöglicht ('''./configure, make, make install''').
+
Weiterhin benötigt man eine funktionierende Installation einer Reihe von Werkzeugen, die das automatische Erzeugen von Programmen ermöglicht ('''./configure, make, make install''').
  
 
Eine (möglicherweise nicht vollständige) Liste von benötigten Paketen -- Bitte, falls nötig ergänzen
 
Eine (möglicherweise nicht vollständige) Liste von benötigten Paketen -- Bitte, falls nötig ergänzen
Line 38: Line 39:
 
  yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
 
  yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
 
  ccache libXrender-devel intltool GConf2-devel mtools
 
  ccache libXrender-devel intltool GConf2-devel mtools
Fedora-Core scheint das Paket <tt>libmokoui2</tt> nicht vorhanden zu sein.
+
In Fedora-Core scheint das Paket <tt>libmokoui2</tt> nicht vorhanden zu sein.
  
 
==Herunterladen und Installieren==
 
==Herunterladen und Installieren==
 +
 +
{{Beachte|Debian und Ubuntu i386 Benutzer (und alle die ein .deb Paket installieren können) können den folgenden Schritt ignorieren und den Anweisungen [http://andreasdalsgaard.blogspot.com/2008/07/openmoko-development-in-5-minutes.html Openmoko application development in 5 minutes] by Andreas Dalsgaard.}}
  
 
Die vorkompilierte Toolchain kann unter [http://downloads.openmoko.org/toolchains downloads.openmoko.org] heruntergeladen werden:
 
Die vorkompilierte Toolchain kann unter [http://downloads.openmoko.org/toolchains downloads.openmoko.org] heruntergeladen werden:
  
* Erstelle ein Verzeichnis z.B.
+
* Man erstellt ein Verzeichnis z.B.
 
   mkdir ~/sources
 
   mkdir ~/sources
 
   cd ~/sources
 
   cd ~/sources
Line 54: Line 57:
  
  
Als nächstes entpacken wir das Archiv, die Toolchain muss nach <tt>/usr/local/openmoko/</tt> installiert werden:
+
Als nächstes entpackt man das Archiv, die Toolchain muss nach <tt>/usr/local/openmoko/</tt> installiert werden:
Nun haben wir folgende Möglichkeiten:
+
Nun gibt es folgende Möglichkeiten:
  
 
* die Datei sofort als root entpacken, mit dem Kommando <tt>su</tt> um <tt>root</tt>-Rechte zu erlangen, ( oder mit dem Präfix <tt>sudo</tt> bei Debian/Ubuntu ):
 
* die Datei sofort als root entpacken, mit dem Kommando <tt>su</tt> um <tt>root</tt>-Rechte zu erlangen, ( oder mit dem Präfix <tt>sudo</tt> bei Debian/Ubuntu ):
Line 73: Line 76:
  
  
Letzendlich müssen jedes mal, wenn Du die Toolchain benutzt, Umgebungsvariablen gesetzt oder geändert werden, damit die Werkzeuge gefunden werden. Die Toolchain stellt ein Script zur Verfügung, mit den dieser Vorgang automatisiert wird. (The toolchain provides a script to do that, so the only thing you need to do is to source it.). Beachte, dass du zunächst eine Bash oder sh starten musst, falls du keine der beiden benutzt (überprüfe dies mit <tt>echo $SHELL</tt>)
+
Letzendlich muss jedes mal, wenn man die Toolchain benutzt, Umgebungsvariablen gesetzt oder geändert werden, damit die Werkzeuge gefunden werden. Die Toolchain stellt ein Script zur Verfügung, mit dem dieser Vorgang automatisiert wird. (The toolchain provides a script to do that, so the only thing you need to do is to source it.). Man beachte, dass zunächst eine Bash oder sh gestartet werden musst, falls man keine der beiden benutzt (überprüfe dies mit <tt>echo $SHELL</tt>)
  
 
  . /usr/local/openmoko/arm/setup-env
 
  . /usr/local/openmoko/arm/setup-env
  
* Zum Schluss musst du <tt>/usr/local/openmoko/arm/bin</tt> zur Umgebungsvariable <tt>$PATH</tt> hinzufügen, da sonst die kommenden Schritte nicht funktionieren werden.
+
* Zum Schluss muss man <tt>/usr/local/openmoko/arm/bin</tt> zur Umgebungsvariable <tt>$PATH</tt> hinzufügen, da sonst die kommenden Schritte nicht funktionieren werden.
  
 
  export PATH=$PATH":/usr/local/openmoko/arm/bin"
 
  export PATH=$PATH":/usr/local/openmoko/arm/bin"
Line 85: Line 88:
 
in einem beliebigen Verzeichnis (in diesem Beispiel ~/):
 
in einem beliebigen Verzeichnis (in diesem Beispiel ~/):
  
* kopiere den Quellcode des heruntergeladenen Beispielprogrammes:
+
* Man kopiert den Quellcode des heruntergeladenen Beispielprogramms:
  
 
  cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
 
  cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
  
* Remember to set the proper environment variables (again with "sh" or "bash") for openmoko:
+
* Nicht vergessen, die entsprechenden Umgebungsvariablen für Openmoko zu setzen (wiederum mit "sh" oder "bash"):
  
 
  . /usr/local/openmoko/arm/setup-env
 
  . /usr/local/openmoko/arm/setup-env
  
* Nun musst du eine Build-Urumgebung für dieses Programm erstellen. Dieser Vorgang überprüft auch ob alle benötigten Bibliotheken und Werkzeuge auf Deinem System vorhanden sind. Falls dieser Vorgang mit einem Fehler abbricht, beachte den vorangegangenen Abschnitt "Bedingungen zur Nutzung der Toolchain"
+
* Nun muss man eine Build-Urumgebung für dieses Programm erstellen. Dieser Vorgang überprüft auch ob alle benötigten Bibliotheken und Werkzeuge auf dem System vorhanden sind. Falls dieser Vorgang mit einem Fehler abbricht, beachte man den vorangegangenen Abschnitt "Bedingungen zur Nutzung der Toolchain"
  
 
  om-conf openmoko-sample2
 
  om-conf openmoko-sample2
  
* Je nach Wunsch kannst du jetzt den Code der Beispielanwendung in openmoko-sample2/src verändern
+
* Je nach Wunsch kann man jetzt den Code der Beispielanwendung in openmoko-sample2/src verändern
  
 
* Um die Applikation aus dem "source code" zu erstellen, muss zuerst eine Makefile generiert werden, damit dann einfach <tt>make</tt> benutzt werden kann
 
* Um die Applikation aus dem "source code" zu erstellen, muss zuerst eine Makefile generiert werden, damit dann einfach <tt>make</tt> benutzt werden kann
Line 103: Line 106:
 
  cd openmoko-sample2
 
  cd openmoko-sample2
  
* benutze das autogen.sh Script um eine Makefile zu erstellen.
+
* Das autogen.sh Skript wird benutzt um einen Makefile zu erstellen.
  
 
  ./autogen.sh
 
  ./autogen.sh
  
* Falls hier ein Felher Auftritt (i.e. "You need to install gnome-common from the GNOME CVS") muss dieser durch Installation von "gnome-common" beseitigt werden, andernfalls kannst Du nun "make" eingeben:
+
* Falls hier ein Fehler Auftritt ( "You need to install gnome-common from the GNOME CVS") muss dieser selbsterklärend durch Installation von "gnome-common" beseitigt werden, andernfalls kann man nun "make" eingeben:
  
 
  make
 
  make
  
Falls du dieses Projekt auf dem Host installieren willst um es später als Gerüst für folgende Projkte, z.B. als "shared library" benutzen zu konnen, (If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.)  
+
Falls man dieses Projekt auf dem Host installieren will um es später als Gerüst für folgende Projekte, z.B. als "shared library" benutzen zu können, kann man folgendes machen um es in das vorgegebene prefix-Verzeichnis zu installieren (übersetzt von: If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.)  
  
 
  om-conf --prefix=/usr/local/openmoko openmoko-sample2
 
  om-conf --prefix=/usr/local/openmoko openmoko-sample2
Line 117: Line 120:
 
  make install
 
  make install
  
==How to modify the sample project==
+
==Abändern des Beispielprojektes==
  
In order to build your own project by using openmoko-sample2 files, some changes are needed:
+
Möchte man ein eigenes Projekt unter Verwendung der openmoko-sample2 Daten erstellen, sind einige Änderungen notwendig:
  
* copy the downloaded sample application source
+
* Die Quellen werden kopiert der Beispielanwendung
  
 
  cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
 
  cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
 
   
 
   
* rename the folder with the name of your project (in this example your-project-name) and delete old sample files
+
* Der Ordner wird in den Namen des Projektes umbenannt (in diesem Beispiel dein-projekt-name) und die alten Beispieldateien werden gelöscht
  
  mv openmoko-sample2 your-project-name
+
  mv openmoko-sample2 eigenes-projekt-name
  cd your-project-name
+
  cd dein-projekt-name
 
  cd src
 
  cd src
 
  rm *.c
 
  rm *.c
  
* copy your sources (in this example your-sources) into src/
+
* Der eigene Quellcode wird kopiert (in diesem Beispiel eigener-quellcode) in src/
  
  cp your-sources .
+
  cp eigener-quellcode .
 
  cd ..
 
  cd ..
  
* now in the main folder modify autogen.sh by updating the following lines
+
* Jetzt sollte im Hauptverzeichnis in der Datei autogen.sh folgende Zeile entsprechend geändert werden
  
  PKG_NAME="your-project-name"
+
  PKG_NAME="eigener-projekt-name"
  
* modify configure.ac by updating the following lines ('main.c' should be the main file in your project)
+
* In der Datei configure.ac sollten folgende Zeilen geändert werden ('main.c' sollte die main-Datei deines Projektes sein)
  
  AC_INIT(your-project-main, 0.0.1, http://www.openmoko.org/)     
+
  AC_INIT(eigener-projekt-name-main, 0.0.1, http://www.openmoko.org/)     
 
  AC_CONFIG_SRCDIR(src/main.c)
 
  AC_CONFIG_SRCDIR(src/main.c)
  
* go into data/ folder and rename these files with the name of your project
+
* Ins Verzeichnis data/ gehen und diese Dateien mit dem Namen deines Projektes umbenennen
  
 
  cd data
 
  cd data
  mv openmoko-sample.png your-project-name.png
+
  mv openmoko-sample.png eigener-projekt-name.png
  mv openmoko-sample.desktop your-project-name.desktop
+
  mv openmoko-sample.desktop eigener-projekt-name.desktop
  
* modify Makefile.am inside data/ by updating the following lines
+
* Im Verzeichnis data/ in der Datei Makefile.am folgende Zeilen abändern
  
  dist_desktop_DATA = your-project-name.desktop
+
  dist_desktop_DATA = eigener-projekt-name.desktop
  dist_appicon_DATA = your-project-name.png
+
  dist_appicon_DATA = eigener-projekt-name.png
  
* modify Makefile.in inside data/ by updating the following lines
+
* Im Verzeichnis data/ in der Datei Makefile.in folgende Zeilen abändern
 
   
 
   
 
  dist_desktop_DATA = smart-search.desktop
 
  dist_desktop_DATA = smart-search.desktop
 
  dist_appicon_DATA = smart-search.png
 
  dist_appicon_DATA = smart-search.png
  
* modify your-project-name.desktop by updating the following lines
+
* Man aktualisiere in eigener-projekt-name.desktop folgende Zeilen
  
  Name=your-project-name
+
  Name=eigener-projekt-name
 
  Encoding=UTF-8
 
  Encoding=UTF-8
 
  Version=0.0.1
 
  Version=0.0.1
 
  Type=Application
 
  Type=Application
  Exec=your-project-name
+
  Exec=eigener-projekt-name
  
* and by adding the following line
+
* und füge diese hinzu
  
  Icon=your-project-name
+
  Icon=eigener-projekt-name
  
* move into src/ folder
+
* Ins src/ Verzeichnis gehen
  
 
  cd ..
 
  cd ..
 
  cd src
 
  cd src
  
* modify Makefile.am by updating the following lines
+
* In der Datei Makefile.am folgende Zeilen abändern
  
  bin_PROGRAMS = your-project-name
+
  bin_PROGRAMS = eigener-projekt-name
  your_project_name_SOURCES = \
+
  eigener_projekt_name_SOURCES = \
 
   main.c  
 
   main.c  
  your_project_name_LDADD = @DEPENDENCIES_LIBS@
+
  eigener_projekt_name_LDADD = @DEPENDENCIES_LIBS@
  
* be sure to put instead of main.c all your .c and .h files and modify all the '-' characters with '_' in the variable names
+
* Man muss sicher gehen, dass anstelle der main.c alle eigenen .c und h. Dateien eingesetzt werden und in den Variablennamen alle '-' Zeichen in '_' umgewandelt werden
  
==Packaging your application==
+
==ipkg Erstellen==
  
We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.
+
In der Toolchain ist ein Script enthalten um aus der kompilierten Anwendung ein ipkg-Paket zu erstellen. Man beachte, dass es nicht benötigt wird um die Anwendung zu testen (hierfür kannst du diese einfach per <tt>scp</tt> übertragen). Das ipkg-Paket ist sehr praktisch um es Anderen zur Verfügung zu stellen.  
  
 
  om-make-ipkg openmoko-sample2
 
  om-make-ipkg openmoko-sample2
  
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your
+
Damit erhält man eine Datei mit dem Namen <tt>openmoko-sample2_0.1_armv4t.ipk</tt> welche wiederum per <tt>scp</tt> auf das Neo übertragen werden kann, um es dort zu installieren:
Neo and install it:
+
  
 
  scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
 
  scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
 
  ssh root@192.168.0.202 ipkg install openmoko-sample2_0.1_armv4t.ipk
 
  ssh root@192.168.0.202 ipkg install openmoko-sample2_0.1_armv4t.ipk
  
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.
+
Man beachte, dass das erstellte Paket lediglich das Programm ohne weitere Informationen (z.B. Abhängigkeiten) enthält. Im folgenden fügen wir diese Informationen hinzu.  
  
You can also supply the version number, a description, and an author / contacts string in a control file:
+
Man kann z.B. die Versionsnummer, eine Beschreibung, den Autor und/oder die Kontaktinformationen in eine Info-Datei einfügen:
  
 
  om-make-ipkg myapp myapp_control
 
  om-make-ipkg myapp myapp_control
  
A template of myapp_control:
+
Die Info-Datei <tt>myapp_control</tt> könnte folgendermaßen aussehen:
  
 
  Package: $appname
 
  Package: $appname
Line 219: Line 221:
 
  Source: ${SRC}
 
  Source: ${SRC}
  
==Where to go from here==
+
==Weitere Schritte==
  
Using the external toolchain is an easy way to build applications for your Neo. If you are familiar with this procedure, you might also want to look into
+
Die Benutzung der externen Toolchain stellt einen einfachen Weg dar, mit den Applikationen für das Neo erstellt werden können. Weitere mögliche Schritte könnten der folgenden Liste entnommen werden:
* Using [[Qemu]] to test your applications in an emulated environment
+
* Benutzen von [[Openmoko_under_QEMU/de|QEMU]] um die erstellten Anwendungen in einer emulierten Umgebung zu testen
** Ubuntu users might prefer to look at [[Automatic_emulation_in_Ubuntu]]
+
** Für Ubuntu-Benutzer könnte folgende Seite interessant sein [[Automatic_emulation_in_Ubuntu/de|Automatische Emulation in Ubuntu]]
* Using [[Host-based_development_with_Xoo_and_Xephyr|host-based development]] to improve your efficiency
+
* [[Host-based_development_with_Xoo_and_Xephyr/de|host-based development]] für effizienteres Arbeiten
* Using [[OpenEmbedded]] to customize your Openmoko distribution image
+
* [[OpenEmbedded/de|OpenEmbedded]] um das Openmoko-Image anzupassen
  
=Advanced topics=
+
=Weiterführendes=
==Using toolchain provided libraries==
+
==Benutzen der Toolchain Bibliotheken ==
Add the necessary libraries to the _LDADD field in src/Makefile.am, for example:
+
Füge die benötigten Bibliotheken zum _LDADD Feld in src/Makefile.am, z.B.:
 
  openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2
 
  openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2
  
make sure to run om-conf again after this.
+
Beachte, dass danach <tt>om-conf</tt> erneut aufgeführt werden muss.
 
+
==Installing additional libraries into the toolchain==
+
  
Sooner or later you will want to compile an application that has dependencies which can't be fulfilled by the precompiled toolchain, e.g. some obscure libraries.
+
==Hinzufügen zusätzlicher Bibliotheken zur Toolchain==
  
In that case, feel free to request the inclusion of additional libraries into the next release of the OpenMoko toolchain. Until then, here is how you enhance your already installed toolchain. Say, we want to add the library called liburiparse:
+
Früher oder später wirst du ein Projekt compilieren wollen, welches nicht nur von den Bibliotheken abhängt, die in der Toolchain enthalten sind.
 +
In diesem Fall kannst du uns fragen, ob diese nicht beim nächsten Release aufgenommen werden könnten. Bis dahin kannst Du deine Toolchain selbst erweitern. Wir wollen hier die Toolchain um die Bibliothek <tt>liburiparse</tt> erweitern:
  
 
  cd ~/source
 
  cd ~/source
Line 247: Line 248:
 
  make install
 
  make install
  
That's it.
+
Fertig!
  
==Getting your application packaged by OE==
+
==Die eigene Anwendung als Paket von OE==
  
If you have written a cool application which you want to share with others, the best way to do that is to
+
Wenn man ein gute Anwendung geschrieben hat und diese mit anderen teilen möchte, ist folgender der beste Weg dies zu tun:
  
# upload your application source code to a public location
+
# Hochladen des Quellcodes an einen öffentlichen Ort
# submit a [[BitBake]] recipe to [[OpenEmbedded]], preferably via the [http://bugzilla.openembedded.org OpenEmbedded bugtracker].
+
# Übertragen eines [[BitBake/de|BitBake]] Rezeptes nach [[OpenEmbedded/de|OpenEmbedded]], vorzugsweise mit [http://bugzilla.openembedded.org OpenEmbedded bugtracker].
  
See also [[Customizing the Openmoko Distribution]].
+
Siehe auch [[Customizing the Openmoko Distribution/de|Anpassung der Openmoko Distribution]].
  
==Troubleshooting==
+
==Problembehandlung==
  
* Please use the [http://lists.openmoko.org/mailman/listinfo/openmoko-devel Openmoko-Devel] mailing list.
+
* Bitte die [http://lists.openmoko.org/mailman/listinfo/openmoko-devel Openmoko-Devel] mailing list benutzen.
  
[[Category:Application Developer]]
+
[[Category:Application Developer/de]]

Latest revision as of 00:51, 21 August 2008


Contents

[edit] Einführung

Die "toolchain" (Werkzeugkette) ist ist eine Sammlung von Werkzeugen, die es dem Nutzer erlauben Code zu compilieren. Im Fall von Openmoko müssen wir zwischen folgenden Anwendungsfällen unterscheiden:

[edit] Softwareentwicklung für das Betriebssystem

In diesem Fall sollte/kann man eine bereits compilierte Toolchain vom Openmoko-Projekt verwenden. Im folgenden liegt eine Anleitung vor, die die ersten Schritte zum compilieren und ausführen eines Projektes auf dem Zielgerät beschreibt. Vielleicht hat man schon etwas von OpenEmbedded gehört, jedoch sollte man als Applikationsentwickler nicht OpenEmbedded nutzen, sondern auf die Toolchain zurückgreifen.

[edit] Systemintegration und Anpassung einer Distribution

Für diese Aufgabe sollte man OpenEmbedded nutzen, das einen eigenen Cross-Compiler beim Einrichten produziert. Systemintegration und die Anpassung einer Distribution werden auf dieser Seite nicht behandelt.

[edit] Elementare Benutzung der Toolchain

[edit] Bedingungen zur Nutzung der Toolchain

Man sollte sich halbwegs mit Linux auskennen und die grundlegenden Werkzeuge der Kommandozeile benutzen können. Weiterhin wird ein zur x86-Architektur kompatibler Computer benötigt mit mindestens 1GB freien Festplattenspeicher. Von Vorteil ist eine vorhandene Erfahrung mit dem compilieren von Programmen aus dem Quellcode an einem lokalen Computer. Im folgenden wird angenommen, dass man Schreibzugriff in sein Home-Verzeichnis und in /usr/local/ (evtl. sind dazu root-Rechte erforderlich) hat. Falls dies nicht der Fall ist, sollte man den Systemadministrator um Unterstützung bitten.

Weiterhin benötigt man eine funktionierende Installation einer Reihe von Werkzeugen, die das automatische Erzeugen von Programmen ermöglicht (./configure, make, make install).

Eine (möglicherweise nicht vollständige) Liste von benötigten Paketen -- Bitte, falls nötig ergänzen

  • In den meisten Fällen sind lediglich folgende Pakete notwendig
    • autoconf, automake
    • binutils, gcc, gcc-c++
    • libtool
    • ccache
    • intltool
  • Bei Ubuntu 8.04 (Vorgänger unterstützen kein libmokoui2) wird folgendes Kommando die nötigen Pakete installieren
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \
ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools
  • Bie Fedora-Core muss folgendes Kommando (mit root-Rechten ausführen) zur Installation verwendet:
yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
ccache libXrender-devel intltool GConf2-devel mtools

In Fedora-Core scheint das Paket libmokoui2 nicht vorhanden zu sein.

[edit] Herunterladen und Installieren

Template:Beachte

Die vorkompilierte Toolchain kann unter downloads.openmoko.org heruntergeladen werden:

  • Man erstellt ein Verzeichnis z.B.
 mkdir ~/sources
 cd ~/sources
  • Je nach Architektur muss eins der beiden folgenden Archive heruntergeladen werden:
 wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
oder
 wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2


Als nächstes entpackt man das Archiv, die Toolchain muss nach /usr/local/openmoko/ installiert werden: Nun gibt es folgende Möglichkeiten:

  • die Datei sofort als root entpacken, mit dem Kommando su um root-Rechte zu erlangen, ( oder mit dem Präfix sudo bei Debian/Ubuntu ):
  cd /
  tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2
  • Auf Debian basierenden Systemen kann man ein einfach-zu-entfernendes Paket aus dem .tar.bz2 mit alien und fakeroot erstellen, welches dann mit dpkg -i <package.deb> installiert wird:
  bunzip2 openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
  gzip openmoko-x86_64-arm-linux-gnueabi-toolchain.tar
  fakeroot alien -d openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.gz
  • Die vorkompilierte Toolchain wird für die Architekturen x86_64 oder i686 bereitgestellt, bei Bedarf kann die Toolchain mit OpenEmbedded folgendermaßen kompiliert werden:
  bitbake meta-toolchain-openmoko


Letzendlich muss jedes mal, wenn man die Toolchain benutzt, Umgebungsvariablen gesetzt oder geändert werden, damit die Werkzeuge gefunden werden. Die Toolchain stellt ein Script zur Verfügung, mit dem dieser Vorgang automatisiert wird. (The toolchain provides a script to do that, so the only thing you need to do is to source it.). Man beachte, dass zunächst eine Bash oder sh gestartet werden musst, falls man keine der beiden benutzt (überprüfe dies mit echo $SHELL)

. /usr/local/openmoko/arm/setup-env
  • Zum Schluss muss man /usr/local/openmoko/arm/bin zur Umgebungsvariable $PATH hinzufügen, da sonst die kommenden Schritte nicht funktionieren werden.
export PATH=$PATH":/usr/local/openmoko/arm/bin"

[edit] Kompilieren eines Beispielprojektes

in einem beliebigen Verzeichnis (in diesem Beispiel ~/):

  • Man kopiert den Quellcode des heruntergeladenen Beispielprogramms:
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
  • Nicht vergessen, die entsprechenden Umgebungsvariablen für Openmoko zu setzen (wiederum mit "sh" oder "bash"):
. /usr/local/openmoko/arm/setup-env
  • Nun muss man eine Build-Urumgebung für dieses Programm erstellen. Dieser Vorgang überprüft auch ob alle benötigten Bibliotheken und Werkzeuge auf dem System vorhanden sind. Falls dieser Vorgang mit einem Fehler abbricht, beachte man den vorangegangenen Abschnitt "Bedingungen zur Nutzung der Toolchain"
om-conf openmoko-sample2
  • Je nach Wunsch kann man jetzt den Code der Beispielanwendung in openmoko-sample2/src verändern
  • Um die Applikation aus dem "source code" zu erstellen, muss zuerst eine Makefile generiert werden, damit dann einfach make benutzt werden kann
cd openmoko-sample2
  • Das autogen.sh Skript wird benutzt um einen Makefile zu erstellen.
./autogen.sh
  • Falls hier ein Fehler Auftritt ( "You need to install gnome-common from the GNOME CVS") muss dieser selbsterklärend durch Installation von "gnome-common" beseitigt werden, andernfalls kann man nun "make" eingeben:
make

Falls man dieses Projekt auf dem Host installieren will um es später als Gerüst für folgende Projekte, z.B. als "shared library" benutzen zu können, kann man folgendes machen um es in das vorgegebene prefix-Verzeichnis zu installieren (übersetzt von: If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.)

om-conf --prefix=/usr/local/openmoko openmoko-sample2
cd openmoko-sample2
make install

[edit] Abändern des Beispielprojektes

Möchte man ein eigenes Projekt unter Verwendung der openmoko-sample2 Daten erstellen, sind einige Änderungen notwendig:

  • Die Quellen werden kopiert der Beispielanwendung
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/

  • Der Ordner wird in den Namen des Projektes umbenannt (in diesem Beispiel dein-projekt-name) und die alten Beispieldateien werden gelöscht
mv openmoko-sample2 eigenes-projekt-name
cd dein-projekt-name
cd src
rm *.c
  • Der eigene Quellcode wird kopiert (in diesem Beispiel eigener-quellcode) in src/
cp eigener-quellcode .
cd ..
  • Jetzt sollte im Hauptverzeichnis in der Datei autogen.sh folgende Zeile entsprechend geändert werden
PKG_NAME="eigener-projekt-name"
  • In der Datei configure.ac sollten folgende Zeilen geändert werden ('main.c' sollte die main-Datei deines Projektes sein)
AC_INIT(eigener-projekt-name-main, 0.0.1, http://www.openmoko.org/)    
AC_CONFIG_SRCDIR(src/main.c)
  • Ins Verzeichnis data/ gehen und diese Dateien mit dem Namen deines Projektes umbenennen
cd data
mv openmoko-sample.png eigener-projekt-name.png
mv openmoko-sample.desktop eigener-projekt-name.desktop
  • Im Verzeichnis data/ in der Datei Makefile.am folgende Zeilen abändern
dist_desktop_DATA = eigener-projekt-name.desktop
dist_appicon_DATA = eigener-projekt-name.png
  • Im Verzeichnis data/ in der Datei Makefile.in folgende Zeilen abändern
dist_desktop_DATA = smart-search.desktop
dist_appicon_DATA = smart-search.png
  • Man aktualisiere in eigener-projekt-name.desktop folgende Zeilen
Name=eigener-projekt-name
Encoding=UTF-8
Version=0.0.1
Type=Application
Exec=eigener-projekt-name
  • und füge diese hinzu
Icon=eigener-projekt-name
  • Ins src/ Verzeichnis gehen
cd ..
cd src
  • In der Datei Makefile.am folgende Zeilen abändern
bin_PROGRAMS = eigener-projekt-name	
eigener_projekt_name_SOURCES = \				
 		main.c 
eigener_projekt_name_LDADD  = @DEPENDENCIES_LIBS@
  • Man muss sicher gehen, dass anstelle der main.c alle eigenen .c und h. Dateien eingesetzt werden und in den Variablennamen alle '-' Zeichen in '_' umgewandelt werden

[edit] ipkg Erstellen

In der Toolchain ist ein Script enthalten um aus der kompilierten Anwendung ein ipkg-Paket zu erstellen. Man beachte, dass es nicht benötigt wird um die Anwendung zu testen (hierfür kannst du diese einfach per scp übertragen). Das ipkg-Paket ist sehr praktisch um es Anderen zur Verfügung zu stellen.

om-make-ipkg openmoko-sample2

Damit erhält man eine Datei mit dem Namen openmoko-sample2_0.1_armv4t.ipk welche wiederum per scp auf das Neo übertragen werden kann, um es dort zu installieren:

scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
ssh root@192.168.0.202 ipkg install openmoko-sample2_0.1_armv4t.ipk

Man beachte, dass das erstellte Paket lediglich das Programm ohne weitere Informationen (z.B. Abhängigkeiten) enthält. Im folgenden fügen wir diese Informationen hinzu.

Man kann z.B. die Versionsnummer, eine Beschreibung, den Autor und/oder die Kontaktinformationen in eine Info-Datei einfügen:

om-make-ipkg myapp myapp_control

Die Info-Datei myapp_control könnte folgendermaßen aussehen:

Package: $appname
Version: 0.1
Description: package built by openmoko toolchain
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends: 
Source: ${SRC}

[edit] Weitere Schritte

Die Benutzung der externen Toolchain stellt einen einfachen Weg dar, mit den Applikationen für das Neo erstellt werden können. Weitere mögliche Schritte könnten der folgenden Liste entnommen werden:

[edit] Weiterführendes

[edit] Benutzen der Toolchain Bibliotheken

Füge die benötigten Bibliotheken zum _LDADD Feld in src/Makefile.am, z.B.:

openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2

Beachte, dass danach om-conf erneut aufgeführt werden muss.

[edit] Hinzufügen zusätzlicher Bibliotheken zur Toolchain

Früher oder später wirst du ein Projekt compilieren wollen, welches nicht nur von den Bibliotheken abhängt, die in der Toolchain enthalten sind. In diesem Fall kannst du uns fragen, ob diese nicht beim nächsten Release aufgenommen werden könnten. Bis dahin kannst Du deine Toolchain selbst erweitern. Wir wollen hier die Toolchain um die Bibliothek liburiparse erweitern:

cd ~/source
wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2
./configure --host=arm-angstrom-linux-gnueabi \
--prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/
make
make install

Fertig!

[edit] Die eigene Anwendung als Paket von OE

Wenn man ein gute Anwendung geschrieben hat und diese mit anderen teilen möchte, ist folgender der beste Weg dies zu tun:

  1. Hochladen des Quellcodes an einen öffentlichen Ort
  2. Übertragen eines BitBake Rezeptes nach OpenEmbedded, vorzugsweise mit OpenEmbedded bugtracker.

Siehe auch Anpassung der Openmoko Distribution.

[edit] Problembehandlung

Personal tools


Einführung

Die "toolchain" (Werkzeugkette) ist ist eine Sammlung von Werkzeugen, die es dem Nutzer erlauben Code zu compilieren. Im Fall von Openmoko müssen wir zwischen folgenden Anwendungsfällen unterscheiden:

Softwareentwicklung für das Betriebssystem

In diesem Fall solltest/kannst Du eine bereits compilierte Toolchain vom Openmoko-Projekt verwenden. Im folgenden liegt eine Anleitung vor, die die ersten Schritte zum compilieren und ausführen eines Projektes auf dem Zielgerät beschreibt. Vielleicht hast Du schon etwas von OpenEmbedded gehört, jedoch solltest Du als Applikationsentwickler nicht OpenEmbedded nutzen, sondern auf die Toolchain zurückgreifen.

Systemintegration und Anpassung einer Distribution

Für diese Aufgabe solltest Du OpenEmbedded nutzen, das einen eigenen Cross-Compiler beim Einrichten produziert. Systemintegration und die Anpassung einer Distribution werden auf dieser Seite nicht behandelt.

Elementare Benutzung der Toolchain

Bedingungen zur Nutzung der Toolchain

Du solltest dich halbwegs mit Linux auskennen und die grundlegenden Werkzeuge der Kommandozeile benutzen können. Weiterhin wird ein zur x86-Architektur kompatibler Computer benötigt mit mindestens 1GB freien Festplattenspeicher. Von Vorteil ist eine vorhandene Erfahrung mit dem compilieren von Programmen aus dem Quellcode an einem lokalen Computer. Im folgenden wird angenommen, dass du einen Schreibzugriff in Dein Home-Verzeichnis und in /usr/local/ (evtl. sind dazu root-Rechte erforderlich). Bitte Deinen Systemadministrator um Unterstützung, falls diese Bedingungen nicht erfüllt sind.

Weiterhin benötigst Du eine funktionierende Installation einer Reihe von Werkzeugen, die das automatische Erzeugen von Programmen ermöglicht (./configure, make, make install).

Eine (möglicherweise nicht vollständige) Liste von benötigten Paketen -- Bitte, falls nötig ergänzen

  • In den meisten Fällen sind lediglich folgende Pakete notwendig
    • autoconf, automake
    • binutils, gcc, gcc-c++
    • libtool
    • ccache
    • intltool
  • Bei Ubuntu 8.04 (Vorgänger unterstützen kein libmokoui2) wird folgendes Kommando die nötigen Pakete installieren
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \
ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools
  • Bie Fedora-Core muss folgendes Kommando (mit root-Rechten ausführen) zur Installation verwendet:
yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \
ccache libXrender-devel intltool GConf2-devel mtools

Fedora-Core scheint das Paket libmokoui2 nicht vorhanden zu sein.

Herunterladen und Installieren

Die vorkompilierte Toolchain kann unter downloads.openmoko.org heruntergeladen werden:

  • Erstelle ein Verzeichnis z.B.
 mkdir ~/sources
 cd ~/sources
  • Je nach Architektur muss eins der beiden folgenden Archive heruntergeladen werden:
 wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
oder
 wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2


Als nächstes entpacken wir das Archiv, die Toolchain muss nach /usr/local/openmoko/ installiert werden: Nun haben wir folgende Möglichkeiten:

  • die Datei sofort als root entpacken, mit dem Kommando su um root-Rechte zu erlangen, ( oder mit dem Präfix sudo bei Debian/Ubuntu ):
  cd /
  tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2
  • Auf Debian basierenden Systemen kann man ein einfach-zu-entfernendes Paket aus dem .tar.bz2 mit alien und fakeroot erstellen, welches dann mit dpkg -i <package.deb> installiert wird:
  bunzip2 openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2
  gzip openmoko-x86_64-arm-linux-gnueabi-toolchain.tar
  fakeroot alien -d openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.gz
  • Die vorkompilierte Toolchain wird für die Architekturen x86_64 oder i686 bereitgestellt, bei Bedarf kann die Toolchain mit OpenEmbedded folgendermaßen kompiliert werden:
  bitbake meta-toolchain-openmoko


Letzendlich müssen jedes mal, wenn Du die Toolchain benutzt, Umgebungsvariablen gesetzt oder geändert werden, damit die Werkzeuge gefunden werden. Die Toolchain stellt ein Script zur Verfügung, mit den dieser Vorgang automatisiert wird. (The toolchain provides a script to do that, so the only thing you need to do is to source it.). Beachte, dass du zunächst eine Bash oder sh starten musst, falls du keine der beiden benutzt (überprüfe dies mit echo $SHELL)

. /usr/local/openmoko/arm/setup-env
  • Zum Schluss musst du /usr/local/openmoko/arm/bin zur Umgebungsvariable $PATH hinzufügen, da sonst die kommenden Schritte nicht funktionieren werden.
export PATH=$PATH":/usr/local/openmoko/arm/bin"

Kompilieren eines Beispielprojektes

in einem beliebigen Verzeichnis (in diesem Beispiel ~/):

  • kopiere den Quellcode des heruntergeladenen Beispielprogrammes:
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/
  • Remember to set the proper environment variables (again with "sh" or "bash") for openmoko:
. /usr/local/openmoko/arm/setup-env
  • Nun musst du eine Build-Urumgebung für dieses Programm erstellen. Dieser Vorgang überprüft auch ob alle benötigten Bibliotheken und Werkzeuge auf Deinem System vorhanden sind. Falls dieser Vorgang mit einem Fehler abbricht, beachte den vorangegangenen Abschnitt "Bedingungen zur Nutzung der Toolchain"
om-conf openmoko-sample2
  • Je nach Wunsch kannst du jetzt den Code der Beispielanwendung in openmoko-sample2/src verändern
  • Um die Applikation aus dem "source code" zu erstellen, muss zuerst eine Makefile generiert werden, damit dann einfach make benutzt werden kann
cd openmoko-sample2
  • benutze das autogen.sh Script um eine Makefile zu erstellen.
./autogen.sh
  • Falls hier ein Felher Auftritt (i.e. "You need to install gnome-common from the GNOME CVS") muss dieser durch Installation von "gnome-common" beseitigt werden, andernfalls kannst Du nun "make" eingeben:
make

Falls du dieses Projekt auf dem Host installieren willst um es später als Gerüst für folgende Projkte, z.B. als "shared library" benutzen zu konnen, (If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.)

om-conf --prefix=/usr/local/openmoko openmoko-sample2
cd openmoko-sample2
make install

How to modify the sample project

In order to build your own project by using openmoko-sample2 files, some changes are needed:

  • copy the downloaded sample application source
cp -r /usr/local/openmoko/source/openmoko-sample2 ~/

  • rename the folder with the name of your project (in this example your-project-name) and delete old sample files
mv openmoko-sample2 your-project-name
cd your-project-name
cd src
rm *.c
  • copy your sources (in this example your-sources) into src/
cp your-sources .
cd ..
  • now in the main folder modify autogen.sh by updating the following lines
PKG_NAME="your-project-name"
  • modify configure.ac by updating the following lines ('main.c' should be the main file in your project)
AC_INIT(your-project-main, 0.0.1, http://www.openmoko.org/)    
AC_CONFIG_SRCDIR(src/main.c)
  • go into data/ folder and rename these files with the name of your project
cd data
mv openmoko-sample.png your-project-name.png
mv openmoko-sample.desktop your-project-name.desktop
  • modify Makefile.am inside data/ by updating the following lines
dist_desktop_DATA = your-project-name.desktop
dist_appicon_DATA = your-project-name.png
  • modify Makefile.in inside data/ by updating the following lines
dist_desktop_DATA = smart-search.desktop
dist_appicon_DATA = smart-search.png
  • modify your-project-name.desktop by updating the following lines
Name=your-project-name
Encoding=UTF-8
Version=0.0.1
Type=Application
Exec=your-project-name
  • and by adding the following line
Icon=your-project-name
  • move into src/ folder
cd ..
cd src
  • modify Makefile.am by updating the following lines
bin_PROGRAMS = your-project-name	
your_project_name_SOURCES = \				
 		main.c 
your_project_name_LDADD  = @DEPENDENCIES_LIBS@
  • be sure to put instead of main.c all your .c and .h files and modify all the '-' characters with '_' in the variable names

Packaging your application

We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.

om-make-ipkg openmoko-sample2

Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your Neo and install it:

scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:
ssh root@192.168.0.202 ipkg install openmoko-sample2_0.1_armv4t.ipk

Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.

You can also supply the version number, a description, and an author / contacts string in a control file:

om-make-ipkg myapp myapp_control

A template of myapp_control:

Package: $appname
Version: 0.1
Description: package built by openmoko toolchain
Section: openmoko/applications
Priority: optional
Maintainer: $USER
Architecture: armv4t
Homepage: http://www.openmoko.org/
Depends: 
Source: ${SRC}

Where to go from here

Using the external toolchain is an easy way to build applications for your Neo. If you are familiar with this procedure, you might also want to look into

Advanced topics

Using toolchain provided libraries

Add the necessary libraries to the _LDADD field in src/Makefile.am, for example:

openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2

make sure to run om-conf again after this.

Installing additional libraries into the toolchain

Sooner or later you will want to compile an application that has dependencies which can't be fulfilled by the precompiled toolchain, e.g. some obscure libraries.

In that case, feel free to request the inclusion of additional libraries into the next release of the OpenMoko toolchain. Until then, here is how you enhance your already installed toolchain. Say, we want to add the library called liburiparse:

cd ~/source
wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2
./configure --host=arm-angstrom-linux-gnueabi \
--prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/
make
make install

That's it.

Getting your application packaged by OE

If you have written a cool application which you want to share with others, the best way to do that is to

  1. upload your application source code to a public location
  2. submit a BitBake recipe to OpenEmbedded, preferably via the OpenEmbedded bugtracker.

See also Customizing the Openmoko Distribution.

Troubleshooting