Krumeltee

-> Elektronik, Mikrocontroller und Retro-Computing <-

Cross-Compiling für Android – Toolchain

Posted by krumeltee - 11. Februar 2014

Um Programme, wie wir sie von Linux oder anderen Betriebssystemen her kennen auf einem Android-Gerät laufen zu lassen, brauchen wir einen Cross-Compiler. Der Cross-Compiler compiliert auf dem PC Programme für die ARM-Architektur des jeweiligen Android-Gerätes.

Android gibt es auch noch für andere Plattformen als ARM, aber die sind recht selten und ich gehe daher nicht darauf ein. Das erstellen der Cross-Toolchain (Compiler, Binutils, …) ist für andere Archtitekturen teilweise sehr unterschiedlich, das Compilieren an sich, bis auf die anderen Target-Optionen nicht.

Neben einem Cross-Compiler benötigt man noch „adb“, die „Android Debug Bridge“. Dieses Programm lässt einen recht einfach seine Binaries und weitere Dateien auf das Handy schieben, ausführen und eine Shell öffnen. Zwinged ist dies nicht, man kann auch den Umweg über Massenspeicher, MTP, WLAN, … gehen und mit einem Terminal-Programm auf dem Handy arbeiten, mit der adb ist es aber um einiges komfortabler.

  • Der Cross-Compiler

Ich verwende die „Sourcery CodeBench Lite Edition„-Toolchain welche einen C/C++-Compiler, Assembler, Linker und Debugger enthält. Ebenso enthalten ist die Standard-C-Library inkl. der Header- und Development-Dateien.

Die Toolchain alleine braucht etwa 350MB Platz. Compiliert man aber z.B. den Kernel hat man schonmal 600MB-1000MB nur an Quelldateien + den Tarball oder die git/svn-Informationen, beim Compilieren für jede benutzte C-Datei noch eine Objekt-Datei…. Da sammelt sich schnell viel Datenmüll an. Man braucht zum sauber Arbeiten mindestens 5-8GB freien Speicher, ich empfehle aber mindestens 15-20GB.

Ich setze vorraus, dass man hierfür mit Linux arbeitet. Auf Windows gestaltet sich das ganze ein wenig anders, was aber hauptsächlich nur an anderen Verzeichnis-Namen und einer anderen Shell liegt. Theorethisch klappt es sowohl mit Linux als auch mit Windows mit dieser Toolchain. Getestet habe ich dies hier mit Gentoo und Debian, auf anderen (aktuellen) Distributionen sollte es genauso sein.

Ich verwende die „G++ Lite 2010.09-110“ Toolchain für Linux. Bei der Auswahl der Pakete wähle ich den Installer, nicht das blosse tar-Paket.

Installationziel der Toolchain wird /opt/arm-linux-gcc/ sein, daher braucht man root-Rechte beim Ausführen des Installers.

$ chmod +x apm-2010.09-110-powerpc-apm-linux-gnu.bin
$ su -c './apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console'

oder für die, die sudo verwenden:

$ sudo ./apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console

Nun wird man durch die Lizenzbedingungen geführt, die man mit „Y“ bestätigt und wählt „1“ für „Typical“, bestätigt.

Jetzt gibt man den Zielpfad an: „/opt/arm-linux-gcc“. Die Frage, ob Links (symlinks) angelegt werden sollen, beantwortet man mit „nein“, da man sich sonst das System damit „zumüllt“. Es reicht vollkommen aus, den Cross-Compiler später mit in den Pfad aufzunehmen.

Hat man nun den Cross Compiler installiert, muss man ihn in seinen Pfad mit aufnehmen. Will man dauerhaft Zugriff auf diesen ARM-Cross-Compiler haben, schreibt man in die ~/.bashrc folgendes:

export PATH=$PATH:/opt/arm-linux-gcc/bin/

Wenn man den Zugriff nicht dauerhaft haben will, sondern jedesmal, bevor man loslegt den Pfad von Hand angeben will, man man genau dieses auf der Konsole. Jetzt einmal die Shell neu öffnen oder kurz von Hand „export ….“ eingeben und der Cross-Compiler steht.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

 
%d Bloggern gefällt das: