[Tutorial] Wie erstellt man ein ROM aus den Sourcen (AOSP, CM, AOKP, AOSPA usw...)

Kiwi++Soft

Kiwi++Soft

Ehrenmitglied
32.707
Wie erstellt man ein ROM aus den Sourcen (AOSP, CM, AOKP, AOSPA usw...):

Ich wurde in der Vergangenheit ein paar mal gefragt, wie man 'aus den Sourcen' ein ROM erstellt. Daher will ich kurz ein paar Worte dazu niederschreiben. Diese Anleitung hat erst mal keinen Anspruch auf Vollständigkeit, das wäre einfach zu viel um es vollständig aufzuschreiben und ich will hier eher eine Übersicht über den ganzen Prozess liefern.

Ebenso gehe ich hier nicht sehr genau auf das Erstellen des 'Device-Trees' ein, die Begründung dazu kommt weiter unten im Text.

Wenn man ein selbst erstelltes ROM auf seinem Gerät einspielt, kann das Gerät Schaden nehmen. Ich bin nicht verantwortlich für irgendwelche Folgen!

Voraussetzungen:

Vorkenntnisse:
Es ist eine Grund-Voraussetzung, dass man Linux, Linux-Shell-Scripte, Makefile-Syntax, Android-Mk-Syntax, C, C++ und Java beherrscht.

Hardware:
Um mit einem Port erfolgreich sein zu können, muss man auf dem Computer mindestens 40 GB freien Plattenplatz haben. Der Rechner sollte 8GB Ram und eine angemessene CPU haben (DualCore mit 2 GHz minimum)

Schritt 1

Linux installieren. Um aus Sourcen builden zu können braucht man ein Linux System auf basis von Ubuntu 12. Das kann entweder ein eigener Rechner mit Linux, eine separate Boot-Partition oder ein Virtueller Rechner (Oracle VBox, VMWare oder HyperV) sein. Das Linux kann Ubuntu oder ein Abkömmling (Lubuntu, Xubuntu) sein.

Schritt 2

Einrichten der Build-Umgebung. Dazu gibt es eine ganz brauchbare Anleitung hier:

Downloading and Building | Android Developers

Schritt 3

Herunterladen der Sourcen. Das macht man mit repo. Dazu erstellt man sich ein 'Arbeitsverzeichs' und startet in dem ein Terminal-Fenster. Dort das repo 'Initalisieren':

Für AOSP: repo init -u git://android.googlesource.com/platform/manifest.git
Für CM 10.1: repo init -u git://github.com/CyanogenMod/android.git
Für AOKP: repo init -u git://github.com/AOKP/platform_manifest.git
Für PA: repo init -u git://github.com/ParanoidAndroid/android.git

Danach repo sync

Dann warten bis alles runtergeladen ist. Da das echt viel (~15 GB!!) ist, kann dass mehrere Stunden dauern...

Schritt 4

Device-Tree anlegen: Jetzt wird es lustig... Dazu muss man sich Beispiele (von ähnlichen Geräten, am besten mit ähnlicher Hardware und vom gleichen Hersteller) angucken und viiieel googlen.

Ein paar gute Links:

Porting Android to Devices | Android Developers
How To Port CyanogenMod Android To Your Own Device - CyanogenMod
Adding device support to PA, & Building ROM

Beim Anlegen des Device-Trees verwendet man den Code-Name des Devices. Den hat der Hersteller des Gerätes vergeben. Dieser wird in den weiteren Schritten zum starten des Builds benötigt.

Ich gehe hier nicht weiter darauf ein, wie man einen Device-Tree erstellt, denn:

  • Es ist hochgradig Geräte-Abhängig.
  • Sehr umfangreich und würde den Rahmen eines Überblicks sprengen.
  • Es hat viel mit 'Stochern im Trüben' zu tun...

Schritt 5

Build starten: Zuerst muss man mal das Build-Environment initialisieren:

. build/envsetup.sh

Danach ist es je nach ROM unterschiedlich. Den Text <code-name> durch den oben vergebenen Code-Name des Devices ersetzten.

AOSP:
lunch full-<code-name>
make -j4

CM10.1 und AOKP:
brunch <code-name>

PA:
rom-build.sh <code-name>

Schritt 6

Das erstellte ZIP testen: Das Ergebniss des Wilds wird ein CWM-installierbares ZIP sein und liegt unter out/target/product/picasso_e2/... Das erstellte ZIP auf das Tablet kopieren und ins CWM booten und installieren. Hier empfieht sich ein Wipe-Data, da das neu erstellte ROM sicher nicht mit den App-Daten des bisherigen ROMs kompatible ist.

Bei AOSP wird kein CWM-Installierbares ZIP erstellt. Das Ergebnis des Builds muss man von Hand in ein solches verwandeln.

Fehler-Behandlung

Wenn es zu Build-Abbrüchen kommt: Genereller Tipp, wenn es zu Fehlern während des Builds kommt, ist es ratsam, nur den ersten Fehler zu behandeln, denn die anderen Fehler sind oft nur Folgefehler. Sich um die zu kümmern, verschwendet Energie und ist oft nach der Behandlung des ersten Fehlers unnötig.

Grüsse Uwe
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: kevte89, markus.tullius, Furkaan28 und 13 andere
Hallo,
hast du eine Idee woran es liegen könnte?

xyz@OneW370STL:~/Development/Android/AOSP$ repo init -u git://android.googlesource.com/platform/manifest.git
Get git://android.googlesource.com/platform/manifest.git
fatal: unable to connect to android.googlesource.com:
android.googlesource.com[0: 173.194.69.82]: errno=Connection timed out
android.googlesource.com[1: 2a00:1450:4008:c01::52]: errno=Network is unreachable

fatal: unable to connect to android.googlesource.com:
android.googlesource.com[0: 173.194.69.82]: errno=Connection timed out
android.googlesource.com[1: 2a00:1450:4008:c01::52]: errno=Network is unreachable

fatal: cannot obtain manifest git://android.googlesource.com/platform/manifest.git
xyz@OneW370STL:~/Development/Android/AOSP$
Netzwerk funktioniert definitiv und die Tools sind soweit alle installiert...:sad:

Edit: Es scheint als ob die URL bei AOSP flasch ist. Es ist nicht git://.. sondern https://...
 
Zuletzt bearbeitet:
https:// oder git:// gehen i.a. beide. Aber manchmal ist ein Server down. Das hatte ich auch schon mal (auch an einem Wochenende) Montags ging es dann wieder.

Daher mache ich mir inzwischen vor dem sync eine Kopie, um dann ggf auf der weiterspielen zu können.

MfG Uwe
 
  • Danke
Reaktionen: DeJe
Ich habe wieder mal einen Versuch gestartet und habe ein Problem beim Builden.
Zuerst aber kurz was ich habe, wie und wo.
OS: Mac OS X 10.8
Source: AOKP
Ziel: flashbare ZIP für mein Xperia Z (yuga)

Ausgeführte Befehle:
brew install git coreutils findutils gnu-sed gnupg pngcrush repo (und was alles dazugehört)
hdiutil create -type SPARSE -fs "Case-sensitive Journaled HFS+" -size 60g -volname "android" -attach ~/Desktop/Android && cd /Volumes/android && mkdir aokp && cd aokp
repo init -u https://github.com/AOKP/platform_manifest.git -b jb-mr2
repo init -g all,-notdefault,yuga,sony
repo sync -j8
source build/envsetup.sh
brunch yuga

Also ist mein Computer jetzt gerade schön am builden als er nach evtl. 20 Minuten abbricht.
Ich konnte den Fehler auf die folgenden Zeilen lokalisieren:
Code:
/Volumes/android/aokp/kernel/sony/apq8064/scripts/mod/elf.h:4:10: fatal error:
'asm/hwcap.h' file not found
#include <asm/hwcap.h>
^
1 error generated.
make[4]: *** [scripts/mod/mk_elfconfig] Error 1
make[3]: *** [scripts/mod] Error 2
make[3]: *** Waiting for unfinished jobs....

Das komische:
Unter aokp/kernel/sony/apq8064/arch/arm/include/asm ist die Datei zu finden. Auch wenn ich in der elf.h Datei den include Befehler geändert habe:
#include < aokp/kernel/sony/apq8064/arch/arm/include/asm/hwcap.h>
Hat er sie nicht gefunden.

Hat da jemand eine Idee?
 
Im allgemeinen wird empfohlen, auf Ubuntu 12 mit einem 64 Bit System zu bauen.

Damit sollte es keine Probleme geben.

MfG Uwe
 
Unter Ubuntu ist das ganze aber noch komplizierter!
Dort muss ich ja z.B. noch den ganzen CC Compiler (oder wie der hiess) aufbauen, PATH ergänzen etc. Ich habe keine Lust zum fünften Mal ein Gast-Batriebsystem aufzubauen, zum zehnten Mal den repo sync duchlaufen zu lassen und zum zwanzigsten Mal alles builden zu lassen.

Also entweder du hast eine Lösung oder ich bleibt dabei.

Ich hatte wie oben gesagt schon mal Ubuntu drauf und war damit noch viel weniger weit gekommen als mit dem Mac OS X.

Ausserdem muss es mit jedem UNIX basierenden OS funktionieren!
Und wie gesagt; Ich installier kein Linux, wenn ich mir einen Mac gekauft habe!
Das war ja grundlegend auch der Grund dafür. (oder einer von vielen)

So wie ich das richtig gelesen habe (das Log) hat er jetzt ja nur noch Fehler beim Zusammenbauen des Kernels, das System sollte fertig sein?
 
u.k-f schrieb:
Schritt 1

Linux installieren. Um aus Sourcen builden zu können braucht man ein Linux System auf basis von Ubuntu 12. Das kann entweder ein eigener Rechner mit Linux, eine separate Boot-Partition oder ein Virtueller Rechner (Oracle VBox, VMWare oder HyperV) sein. Das Linux kann Ubuntu oder ein Abkömmling (Lubuntu, Xubuntu) sein.

Diese Anleitung basiert darauf. Ich baue mit meinem Linux CM 10.1, CM 10.2, AOKP, Paranoid-Android, Kernel und Recoveries (Die von gebauten Systeme findest Du alle hier im Forum). Seltsamerweise klappt das bei mir.

Entweder Du machst es so, dann helfe ich bei Problemen, oder Du weißt es besser als ich, dann brauchst Du meine Hilfe bestimmt nicht.


Wenn Du weißt, dass es mit MacOS besser geht, will ich Dir nicht im Weg stehen. Bestimmt ist es leichter, das von Dir berichtete Problem zu fixen, als ein Linux aufzusetzen. (Dafür habe ich immerhin 4 Stunden gebraucht :scared:)

Also, Du hast die Wahl...

MfG Uwe
 
  • Danke
Reaktionen: DevMark
Natürlich hab ich keine Zeit 4 Stunden ein Linux aufzubauen und langsam auch keine Nerven mehr.

Werde es mir evtl. in den Ferien nochmals anschauen, aber ich kann dir schon jetzt sagen dass es nicht funktionieren wird. Den es liegt nicht am OS!
 
Aber wenn Du das gleiche Build-Environment verwendest wie ich, kann ich das Problem bei mir nachstellen, das kann ich im Falle eines Macs nicht, da ich keinen Mac habe.

So einfach ist das.

Support kann ich für das geben, was ich selbst habe. Aussagen über System, die ich nicht habe, treffe ich nicht gerne.

MfG Uwe
 
Das Problem mit dem Kernelbuild lässt sich auch unter Linux verifiziern.
 
Hallo!

Ich plane, einen eigenen Custom ROM zu erstellen. Damit ich damit anfangen kann, brauche ich eine kompilierte und blanke(so eine wie sie die Hersteller bekommen) Version von Android 4.3.
Weiß jemand, wo man das bekommt?

Vielen Dank,
Oebbler.
 
Aus dem AOSP

Gesendet von meinem U9200 mit der Android-Hilfe.de App
 
Danke!

Ich kann leider nicht auf den Danke-Button klicken, da ich ihn nicht finde.
 
Schöne Übersicht zum ROM Building. Als Linux-Neuling fällt es mir persönlich noch recht schwer mich in die ganze Umgebung einzufinden. Beim Builden tritt bei mir auch folgender Fehler auf:

$ lunch aosp_arm-eng
/bin/bash: java: Kommando nicht gefunden.

es muss den Befehl aber geben, denn wenn ich "lunch" ohne Parameter eingebe, wird mir ein entsprechendes Menü mit Optionen angezeigt. Woran könnte das liegen?
 
Hast Du das JDK installiert?

Es wird ja nach java gesucht:

Code:
/bin/bash: [B][U][COLOR="Red"]java[/COLOR][/U][/B]: Kommando nicht gefunden.

MfG Uwe
 
  • Danke
Reaktionen: Steb
Theoretisch ja. Vielleicht habe ich eine Fehlermeldung übersehen natürlich.
Code:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
Das sind doch die erforderlichen Befehle wenn ich mich nicht täuche? Habe ich direkt von Google übernommen.
Aber ich gehe dem mal nach ;)
 
Du kannst ja in dem Terminal einfach mal

Code:
java -v

eingeben, ob und welches Java er findet.

Ausserdem ist folgendes zu beachten:

Java wird nicht direkt nach /bin oder /usr/bin installier, sondern es werden nur symlinks auf das 'Aktive JDK' jdk gesetzt. Wenn diese fehlen, wird der o.a. Befehl zu 'Not found' führen...

MfG Uwe
 
Hi steb,

Java ist in den Partner-Quellen nicht mehr verfügbar.. Wegen linzen und so ein mist ^^
Schau mal hier: Oracle Java
Die schritte musst du einfach gehen, dann klappt alles ;)

IM Prinzip sind es nur die schritte:
- Java runterladen
- in einne bestimmten ordner verschieben
- dem system sagen dass java, javac, jar ect. dort liegen...

Gruß
 
u.k-f schrieb:
Du kannst ja in dem Terminal einfach mal
Code:
java -v
eingeben, ob und welches Java er findet.
Leider findet er gar keins, es werden mir nur diverse Lösungsvorschläge angezeigt:
Code:
Das Programm »java« ist in folgenden Paketen enthalten:
 * default-jre
 * gcj-4.6-jre-headless
 * openjdk-6-jre-headless
 * gcj-4.5-jre-headless
 * openjdk-7-jre-headless
Versuchen Sie: sudo apt-get install <ausgewähltes Paket>
Allerdings wird scheinbar explizit ein JDK von Sun/Oracle verlangt?

StefMa schrieb:
Hi steb,

Java ist in den Partner-Quellen nicht mehr verfügbar.. Wegen linzen und so ein mist ^^
Schau mal hier: Oracle Java
Ich habe mir die Anleitung angesehen, um das entsprechende JDK 6 runterzuladen muss ich mich erst bei Oracle anmelden leider...ist sowas denn empfehlenswert?

Ich nahm an, dass über
Code:
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid  partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
die entsprechenden Schritte auch durchgeführt werden?
 

Ähnliche Themen

cehuisken
  • cehuisken
Antworten
1
Aufrufe
682
Andy
Andy
D
Antworten
0
Aufrufe
2.366
Defier
D
E
Antworten
4
Aufrufe
2.115
Kardroid
Kardroid
Zurück
Oben Unten