[Anleitung] Wie erstellt man ein Custom ROM:

  • 76 Antworten
  • Neuester Beitrag
Diskutiere [Anleitung] Wie erstellt man ein Custom ROM: im Anleitungen für Samsung Galaxy S im Bereich Root / Hacking / Modding für Samsung Galaxy S.
sunra

sunra

Experte
Wollt ihr auch mal ein eigenes ROM erstellen und seid es Leid das Ganze WWW mühsam nach Anleitungen und Tools zu durchsuchen??

Mir ist es so ergangen und deshalb habe ich nun diesen Thread erstellt.

Ich habe das Ganze selber erfolgreich getestet. Es gibt natürlich Stolperseteine.
Bei Fragen einfach hier im Thread melden!

An dieser Stelle bedanke ich mich recht herzlich bei meinem persönlichen „Mentor“ auf Android-Hilfe.de ;-)

Danke scheichuwe!



Ich freue mich über positive Kritik, Verbesserungsvorschläge und Hinweise auf weitere nützliche Informationen!


Genug geschwafelt ;-)

Übersicht:
#1 - ROM erstellen
#2 - Scripte, Modems, Kernel, etc.
#3 - Individuelle Anpassungen (Themes, erweitertes Ausschaltmenü, etc.)
#4 - Weitere Anpassungen und Voreinstellungen

(Bevor ihr Fragen stellt überprüft die Anleitung nochmal auf Ergänzungen)

Ihr könnt auch meine ROM verwenden um euch Sachen anzuschauen oder um darauf weiter aufzubauen.
Die ist schon optimiert und verfügt über einen Custom-Kernel.
Ihr erspart euch dann das deodexen und zipalignen, was sehr zeitaufwendig und unspannend ist ;-)

https://www.android-hilfe.de/forum/...xy-s.1470/rom-my-rom-jvr-by-sunra.130864.html

Hier kann man auch nützliche Infos finden: My-Settings.zip



So geht’s:


1.

- Stock-ROM auf SamFirmware.com runterladen.
-----------------------------------------------------------------------------------------------

2.

- Factory.rfs aus dem CODE_....tar – Archiv entpacken.
-----------------------------------------------------------------------------------------------

3.

- Factory.rfs mit z.b. MagicISO in einen Ordner „system“ entpacken.
-----------------------------------------------------------------------------------------------

4.

- zuerst -> /system/framework deodexen
- dann -> /system/app deodexen

Reihenfolge einhalten!

Wie? Mit diesem Tool: xUltimate
-----------------------------------------------------------------------------------------------

5.

- png´s optimieren und apk´s zipalignen mit xUltimate oder Apk Manager 4.9

-Tastaturen, ScreenCapture, phone.apk, camera.apk und die framework-Dateien sind da empfindlich, da am besten nur deodexen.
-----------------------------------------------------------------------------------------------

6.

- Deodexte und optimierte Inhalte aus
-/system/framework
-/system/app

wieder in euren „system“ –Ordner kopieren.
-----------------------------------------------------------------------------------------------

7.

-In den Ordner „system“ welcher app, bin, cameradata usw. enthält
-Superuser.apk nach /system/app (LINK im Anhang)
-su und busybox nach /system/xbin (LINK im Anhang)
kopieren.
-----------------------------------------------------------------------------------------------

8.

-Das Ganze dann in eine update.zip kopieren und evtl. einen Ordner erstellen für modem.bin und zImage. Also für das Modem und den Kernel.

Edit:
Ich hab euch eine "Barebone".zip angehängt.
- Es enthält einen leeren "system" Ordner
- Es enthält einen "updates" Ordner. Dieser enthält das script zum flashen des Modems. Modem ist keines enthalten. Das ausführen des Scripts zum Modem flashen ist auch im updater-script auskommentiert.
- Das updater-script stammt aus scheichuwes ROM. Ich hab mir das hier zur Veranschaulichung "ausgeborgt" weil es sehr übersichtlich ist und alles beinhaltet was man benötigt.

-----------------------------------------------------------------------------------------------

9.

-In der .zip muß ein Ordner \META-INF\com\google\android\ mit einem updater-script und einem binary-script enthalten sein.
-----------------------------------------------------------------------------------------------

10.

-Das updater-script könnt ihr euch nun mit Notepad++ anpassen.
-----------------------------------------------------------------------------------------------

11.

-Außerdem müsst ihr ein Shell-Script erstellen, welches für das flashen des Modems und des Kernels zuständig ist. Dieses Script müsst ihr aus dem updater-script starten.
Wie das geht könnt ihr euch vorerst mal in anderen ROMs abschauen.
-----------------------------------------------------------------------------------------------

Nun ist euer ROM grundsätzlich fertig!
Jetzt könnt ihr euch beim modifizieren austoben. Apps ersetzen/hinzufügen, Theme einbauen, Scripte einbauen, usw.

Viel Spaß! :biggrin:



Weitere Informationen, Tools und Details:

How to make an Odin ROM
[SCRIPT] ROM Packager [UPDATE 7/2] - xda-developers
...
 

Anhänge

  • Superuser.apk
    191,9 KB Aufrufe: 496
  • busybox-EntpackMich.zip
    1 MB Aufrufe: 383
  • Barebone_JVQ.zip
    313,4 KB Aufrufe: 413
  • csc + apn.zip
    56,9 KB Aufrufe: 364
Zuletzt bearbeitet:
sunra

sunra

Experte
Howto mod the stock XXJVR kernel SU/Init.d Support


Modems:
http://niekske.myftp.biz:81/elfinder/
(Danke an Perka!)



Nützliche Links:


Linux-Kompendium: Shellprogrammierung

BusyBox Syntax

Scratchpad - Documenting Edify for Android Updater-Scripts
Output to recovery UI from shell script - xda-developers


Beispielscripte:


updater-script:

Hier ein ordentliches und übersichtliches updater-script aus scheichuwes ConsummateROM - JVQ [2.3.4][Odin/CWM][06.07.2011]
(Achtung! Die Syntax im updater-script unterscheidet sich von einem Shell-Script und es gibt weniger Möglichkeiten! Eine genaue aktuelle Beschreibung hab ich auch noch nicht gefunden)

Code:
ui_print("");
show_progress(0.400000, 0);
#mount partitions
run_program("/sbin/mount", "/system");
run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
run_program("/sbin/mount", "/cache");
run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");

#wipe partitions
ui_print(" - Wipe partitions - ");
delete_recursive("/cache");
delete_recursive("/data");
delete_recursive("/data/dalvik-cache");
delete_recursive("/dbdata");
delete_recursive("/system");
ui_print("");
show_progress(0.400000, 10);

#install new files
ui_print(" - Copy new files - ");
ui_print(" - /system - ");
package_extract_dir("system", "/system");
ui_print(" - /tmp - ");
package_extract_dir("updates", "/tmp");
ui_print("");

#toolbox symlinks
ui_print(" - Set symlinks - ");
symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date", "/system/bin/dd",
        "/system/bin/df", "/system/bin/dmesg", "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id",
        "/system/bin/ifconfig", "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice", "/system/bin/kill",
        "/system/bin/ln", "/system/bin/log", "/system/bin/ls", "/system/bin/lsmod", "/system/bin/mkdir", "/system/bin/mount",
        "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify",
        "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice", "/system/bin/rm", "/system/bin/rmdir",
        "/system/bin/rmmod", "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole",
        "/system/bin/setprop", "/system/bin/sleep", "/system/bin/smd", "/system/bin/start", "/system/bin/stop", "/system/bin/sync",
        "/system/bin/top", "/system/bin/umount", "/system/bin/vmstat", "/system/bin/watchprops", "/system/bin/wipe");
symlink("/system/xbin/su", "/system/bin/su");
symlink("/system/bin/dumpstate", "/system/bin/dumpmesg");
symlink("/system/bin/debuggerd", "/system/bin/csview");
ui_print("");
show_progress(0.200000, 0);

#set permissions
ui_print(" - Set permissions - ");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm_recursive(0, 0, 0755, 0755, "/system/etc");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 2000, 0755, "/system/vendor");
set_perm(0, 2000, 0755, "/system/vendor/firmware");
set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh");
set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd");
set_perm(0, 2000, 0755, "/system/etc/bluetooth");
set_perm(0, 3003, 02755, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm(0, 0, 06755, "/system/xbin/busybox");
set_perm(0, 0, 755, "/tmp/redbend_ua");
ui_print("");
show_progress(0.200000, 20);

#install busybox
ui_print(" - Install busybox - ");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
ui_print("");

#install modem
ui_print(" - Install modem - ");
run_program("/tmp/redbend_ua", "restore", "/tmp/modem.bin", "/dev/block/bml12");
ui_print("");

#install kernel
#ui_print(" - Install kernel - ");
#run_program("/tmp/redbend_ua", "restore", "/tmp/zImage", "/dev/block/bml7");
#run_program("/tmp/redbend_ua", "restore", "/tmp/zImage", "/dev/block/bml8");
ui_print("");
show_progress(0.100000, 0);

#end
ui_print(" - Done - ");
Hier wird das Modem mit Hilfe des "redbend_ua" Scripts installiert welches mit dem Befehl
Code:
run_program("/tmp/redbend_ua", "restore", "/tmp/modem.bin", "/dev/block/bml12");
... ausgeführt wird.

Die Installation eines Kernels wurde hier mit # ausgeblendet. Wieso erfährt ihr in scheichuwes ROM-Thread ...





shell-script:
(BusyBox Syntax)

Code:
#!/sbin/sh

cp -f /system/framework/framework-res.apk /tmp/framework-res.apk
cd /tmp/framework
/sbin/zip -r /tmp/framework-res.apk *
cd ..
cp -f /tmp/framework-res.apk /system/framework/framework-res.apk
Dies ist ein kleines Beispiel einer Scriptanwendung aus meiner My-Settings.zip. Ihr könnt euch das darin genauer anschauen.

Hier kommt z.b. dieser Befehl zum Einsatz:
(Ich hab hier bewusst was ganz einfaches zur Veranschaulichung gewählt.)

cp

cp [OPTIONS] SOURCE DEST
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY
Options:
-a Same as -dpR
-d,-P Preserve links
-H,-L Dereference all symlinks (default)
-p Preserve file attributes if possible
-f Force overwrite -i Prompt before overwrite
-R,-r Recurse
-l,-s Create (sym)links
 
Zuletzt bearbeitet:
sunra

sunra

Experte
/system/build.prop:

Hier kann man den Namen der ROM angeben der dann unter Telefoninfo angezeigt wird.
Den Density Wert ändern, Standardklingelton einstellten, usw.

/data/system/accounts.db:

Hier werden eure Account Daten gespeichert. Nur interessant wenn man ein ROM nur für sich selbst erstellt und man seine Account Daten gleich mitinstallieren will.

/dbadata:

Hier werden sämtliche App und Systemeinstllungen gespeichert.

/etc/gps.conf:

Hier kann man den seiner Region entsprechenden NTP-Server einstellen.

/system/etc/apns-conf.xml

Darin befindet sich die Liste der APNs. Ich hab euch oben eine .xml angehängt welche vermutlich alle Bekannten enthält.

/system/csc

Darin befinden sich die Ländercodes. Ich hab euch oben eine MulitCSC angehängt.


Wer Lust hat kann gerne noch weitere interessante Pfade posten. Ich füge dass dann hier ein.
Hab jetzt keine Lust mehr ....
 
Zuletzt bearbeitet:
sunra

sunra

Experte
Den edify link hab ich vergessen ... Werd ich dann einfügen.
Das mit dem recovery output ist genial. Das kannte ich noch nicht und genau das brauch ich weil ich ja im my-settings.zip das meiste auf ein shell script auslagere.

Wie meinst du das mit punkt 5? apk's auch mit apk manager optimieren? Also nur zipalignen mit xultimate?
 
scheichuwe

scheichuwe

Guru
apks mit xUltimate optimieren ist das gleiche wie Images optimieren und apks zipalignen mit Apk Manager 4.9

Einen Schritt kann man sich also sparen.
Ich nutze eigentlich nur xUltimate.
Apk Manager bzw. apktool verwende ich dann um die ganzen Mods einzubauen...
 
sunra

sunra

Experte
Alles klar. Werde das heute abend ändern.

@kev: danke fürs editieren. Der monitor auf dem ich das erstellt habe verfügt über 2048 pixel in der breite ;-)

Edit: Lesen schadet nicht:

xUltimate Theme/MM Optimizer will opt_png and zip_align all .png's and .apk's in a MM .zip or update.zip or whatever .zip (It will also remove any .db files)
 
Zuletzt bearbeitet:
sunra

sunra

Experte
Na da hab ich die bastelambitionen der User hier doch etwas überschätzt :)
Ich dachte das würde doch mehr Leute interssieren ...
 
sunra

sunra

Experte
Na das ist hier ja schon fast so was wie ein Privatchat ;-)
Danke wiedermal. Mal schauen ob da was dabei is was ich noch nicht gelesen habe.
Werde die Links jetzt auf jeden Fall mal einsortieren.

Wenn du schon da bist ... Weißt du ob außer dem CF-Root noch ein anderer Kernel läuft mit JVR?

Dachte ich frag mal bevor ich mich durch die ganzen Threads suche ...

Hast du auch mal den Galaxian-Kernel oder wie der heisst getestet mit deiner ROM?
Der hat ja angeblich Voodoo Color integriert. Das scheint der einzige zu sein der dass hat und Voodoo Color ist einer der Hauptgründe warum ich ungern auf CM7 verzichte ...
 
Zuletzt bearbeitet:
scheichuwe

scheichuwe

Guru
sunra schrieb:
...

Wenn du schon da bist ... Weißt du ob außer dem CF-Root noch ein anderer Kernel läuft mit JVR?
...
Talon (von existz) bzw. snail (von zacharias)

Root ging zwar auch erst nachdem ich vorher CF-Root drauf hatte, ansonsten läuft der aber einwandfrei (auch inkl. Voodoo Color).
 
sunra

sunra

Experte
Das ist ja ein gute Nachricht! Danke!

So, also der Anleitungsthread hier ist jetzt wirklich sehr ausführlich würde ich sagen?

Jetzt muß man wohl wirklich nur noch viel Zeit und Motivation haben :)

Edit: Wie man su einbauen kann hab ich auch verlinkt ...
 
scheichuwe

scheichuwe

Guru
Du kannst auch einfach su und busybox nach /system/xbin kopieren und Superuser.apk nach /system/app.
Dann könntest du dein ROM sogar mit dem Stock-Kernel laufen lassen (man braucht allerdings einen Custom-Kernel, um das ROM flashen zu können...).
 
sunra

sunra

Experte
Ja, das hatte ich eh schon in der Anleitung. Jetzt hab ich zusätzlich die Anleitung verlinkt wie man das und das verwenden von init.d Scripten im Stock-Kernel einbauen kann. Finde ich auch interessant und entzaubert ein bisschen das Kernel modden ;-)

Edit:
(man braucht allerdings einen Custom-Kernel, um das ROM flashen zu können...).
Außer man macht ein Odin ROM oder?
 
M

MeineFirmware

Gast
Hallo,da ich ständig hin und her flashe und dabei ständig meine apps (sind nur paar)neu installiere habe ich mir gedacht die apss in die firmware einzukochen um bei erneutem flashen der gleichen firmware das sie schon am anfang an dabei sind.Also ,wäre meine frage wie ich nur die apps draufpacke?Alles andere bleibt dann orginal vorhanden,diese apps wären dann zb der opera browser und tunein radio und noch paar hintergrund bilder.Eventuell würde ichnoch paar apps löschen.Und meine 2.Frage wäre.....ob ich dann die kernel die es zuzeit gibt dann nutzen kann?
 
sunra

sunra

Experte
Die Apps in einem Ordner /data/app in die .zip mitreinpacken und im updater-script extrahieren lassen.

Schau dir am besten MY-ROM an. Das kannst du gerne als Vorlage nehmen.
Den Launcher kann man auch aus /system/app löschen und durch einen anderen ersetzen.

Für das was du da ansprichst wäre aber vielleicht überhaupt eine My-Settings.zip besser?
 
M

MeineFirmware

Gast
Oh man,das ist nicht so leicht wie ich es mir gedacht habe.Hab eigentlich kein plan was deodex und vor allem die script muss ichmir mal näher anschauen.
 
sunra

sunra

Experte
Da kommt man schon rein. Einfach verschiedene vergleichen. Bei problemen meld dich ...