Toolchain/de

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(Kompilieren eines Beispielprojektes)
Line 107: Line 107:
 
  ./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 Felher Auftritt ( "You need to install gnome-common from the GNOME CVS") muss dieser selbsterklärend durch Installation von "gnome-common" beseitigt werden, andernfalls kannst Du 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 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, (ü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

Revision as of 23:49, 20 July 2008


Contents

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 ( "You need to install gnome-common from the GNOME CVS") muss dieser selbsterklärend 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, (ü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

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

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