CyanogenMod für Nexus 4 (mako) auf Debian oder Ubuntu (x64) kompilieren

andry

andry

Fortgeschrittenes Mitglied
37
Hallo,

da das kleine How-To im XDA einerseits Englisch und andererseits etwas merkwürdig geschrieben wurde, habt ihr hier eine kurze Anleitung auf Deutsch.

Die vorher zu installierenden Pakete sind in etwa gleich. Allerdings installiert Debian mit dem meta-package "build-essentials" keine Header-files, außerdem unterscheiden sich je nach Version Paketnamen:

Vorbereitung

Für Debian Squeeze (amd64)

1. "non-free" Repository eurer sources.list hinzufügen (Debian Wiki), "apt-get update" ausführen, um die Änderungen zu übernehmen

2. Abhängigkeiten installieren:
Code:
apt-get install git-core gnupg flex bison python rar original-awk gawk p7zip-full gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libc6-dev x11proto-core-dev libx11-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils g++-multilib lib32z1-dev ia32-libs lib32ncurses5-dev lib32readline6-dev gcc-multilib g++-multilib xsltproc openjdk-6-jdk linux-headers-$(uname -r)
Hinweis für Sid Benutzer: Statt "lib32readline6-dev" einfach mal "lib32readline-gplv2-dev" ausprobieren, außerdem "libwxgtk2.6-dev" durch "libwxgtk2.8-dev" ersetzen, sollte so funktionieren, aber ohne Garantie.

Für Ubuntu >=11.10 (amd64)

1. Abhängigkeiten installieren:
Code:
apt-get install git-core gnupg flex bison python rar original-awk gawk p7zip-full gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libc6-dev x11proto-core-dev libx11-dev libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils g++-multilib lib32z1-dev ia32-libs lib32ncurses5-dev lib32readline-gplv2-dev gcc-multilib g++-multilib xsltproc
Synchronisieren, Kompilieren:

Hinweis: Damit zukünftige Builds schneller zu kompilieren sind, benutzt ihr am besten jetzt schon den Cache. Um das auch nach einem Reboot beizubehalten, kommt der Befehl in die bashrc:
Code:
echo "export USE_CCACHE=1" >> /etc/bash.bashrc
Jetzt noch den CCACHE vergrößern, da er im Standard sehr klein ist, dafür braucht ihr das Paket "ccache", das ihr via apt installiert:
Code:
apt-get install ccache
Anschließend den Cache erweitern (benötigt 5GB weiteren freien Speicherplatz):
Code:
ccache -M 5G


1. "repo" herunterladen, ausführbar machen und nach /usr/local/bin verschieben:
Code:
wget http://www.isinux.de/repo && chmod +x repo && mv repo /usr/local/bin/
2. Ein Verzeichnis mit genug Speicher aussuchen, die Sources haben allein schon etwa 9GB. In diesem Beispiel: /home/user/cmod

3. In das neue Verzeichnis wechseln, das Repo. initialisieren:
Code:
repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
4. Jetzt kommt das leidige Laden der Source, ebenfalls im selben Verzeichnis ausführen:
Code:
repo sync -j 8
Hinweis: "-j 8" bezieht sich auf die gleichzeitigen Jobs. Wenn es trotz 8 Jobs über 5 Stunden dauert, einfach mal ein paar mehr ausprobieren.

5. Geräte spezifische Sourcen herunterladen:
Die nächste Zeile müsst ihr vor jedem Build ausführen!
Code:
. build/envsetup.sh
Ganz genau so schreiben! Punkt, Leerzeichen, build/envsetup.sh.
Code:
lunch cm_mako-userdebug
6. Proprietäre Daten vom Gerät holen:
Als erstes müsst ihr adb installieren, das könnt ihr entweder über das Android SDK machen oder hier als einzelnes Programm herunterladen, ausführbar machen und verschieben:
Code:
wget http://www.isinux.de/adb && chmod +x adb && mv adb /usr/local/bin/
Danach müsst ihr USB-Debugging am Nexus 4 aktivieren und es an den Computer anschließen.
Code:
cd device/lge/mako
./extract-files.sh
cd ../../..
Diese Zeile solltet ihr alle 2-3 Wochen wiederholen.
7. Pre-Builts holen:
Code:
/home/user/cmod/vendor/cm/get-prebuilts
Ich glaube - bin mir aber nicht mehr allzu sicher -, dass die Datei bei mir nicht ausführbar war, falls das bei euch auch so ist, vorher ausführbar machen:
Code:
chmod +x /home/user/cmod/vendor/cm/get-prebuilts
9. Los geht's:
Code:
brunch mako
Aktualisieren, Kompilieren:

1. Schritt 7 und 8 wiederholen

Hinweis: Bei Schritt 7 bin ich mir nicht sicher, da ich nicht weiß, wie oft die Pre-Builds aktualisiert werden, aber schaden kann es nicht.

2. Sources bereinigen (dadurch werden alte Builds gelöscht, vorher sichern):
Code:
make clobber
3. Das Repository aktualisieren:
Code:
repo sync -j 8
4. "Bauen"
Code:
lunch cm_mako-userdebug && brunch mako

Hinweis: "brunch" führt "breakfast" aus, anschließend "mka".
Wer die Zeit für das Kompilieren messen will, kann vor "brunch" den Befehl "time" einsetzen.


Die gebauten Dateien liegen anschließend im Verzeichnis "/home/user/cmod/out/target/product/mako"


Vielleicht hilft es ja jemandem.

PS: Habe auf die wirklich total einfachen Sachen verzichtet, Beispiel: Verzeichniswechsel, Installation von Debian/Ubuntu etc. Der Verweis auf das Debian Wiki ist hoffentlich gestattet! :)


André


// Edit:

local_manifest.xml is deprecated: Wurde angepasst.
"repo"-Datei aktualisiert
Cache-Hinweis
Breakfast für den Fall der Fälle hinzugefügt
Ein paar Zeilen angepasst.



Wenn es zu Fehlern beim Synchronisieren kommt (und das ist oft), einfach abwarten! Das kommt leider sehr, sehr oft vor!
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Flextrick, LordXeth, Dirk64 und 6 andere
Na dann werde ich daheim mal die VMWare anwerfen und mir Ubuntu laden :D
 
Selber getestet habe ich nur Debian, aber die Pakete für Ubuntu sind wohl Foren nach richtig. :)

Habe ein paar wichtige Pakete gegooglet, die meisten waren unter 11.10 nicht unter diesem Namen dabei. Wenn da etwas hakt, einfach sagen.
 
Danke. Super Anleitung. Wenn nur repo sync bei mir nicht so lange dauern würde...
 
Also bei Ubuntu 12.10 muss man libwxgtk2.6-dev auf libwxgtk2.8-dev ändern.
Er installiert die Pakete mal..
 
  • Danke
Reaktionen: andry
Danke! Hast recht, habe es geändert. :)

Habe das für Sid auch angepasst, da ist es genauso. Sorry, es ist wirklich schwer für die ganzen Debian/Ubuntu Repos. die richtigen Abhängigkeiten klarzustellen.
 
Zuletzt bearbeitet:
Kurze Frage:
Bei mir zieht er das Build-Datum nicht mit. Hab jeden Tag repo sync und envsetup sowie brunch gemacht, aber hinten raus fällt heute noch eine Zip mit dem Namen "cm-10.1-20130104-UNOFFICIAL-mako.zip", auch nach dem Flashen in den Einstellungen steht das Datum. Der ROM ist aber in wirklichkeit vom 9.1..
Was läuft da schief??

Edit:
Nu gehts...
Hab "./get-prebuilts" und breakfast vor brunch gemacht. Eins von beiden wirds gewesen sein?!
 
Zuletzt bearbeitet:
Was ist breakfast?
 
Hm, breakfast muss eigentlich gar nicht. Vielleicht vorher mal mit "make installclean" saubermachen, vorher die alten Dateien aus "out" sichern.

Ich füge es mal ein, kaputt geht dadurch jedenfalls nichts. Eigentlich sollte brunch erst breakfast und dann mka ausführen. Vielleicht muss man die Umgebung auch erst wieder auffrischen, damit er sich das aktuelle Datum zieht.
 
Zuletzt bearbeitet:
Das mit dem Datum kommt daher, das ohne ein clean kein neues Datum zustande kommt.
 
  • Danke
Reaktionen: Der_Schubi und andry
Danke für die Anleitung. Ein kleiner Hinweis: bei mir funktioniert die Zeile:
Code:
nano /home/user/cmod/.repo/local_manifests
nicht.

Ich muss:
Code:
nano /home/user/cmod/.repo/local_manifest.xml
angeben, damit die Sachen geladen werden.

Vielleicht ist bei meinem System (Ubuntu 12.04) ja irgendwas falsch gelaufen... aber so geht es bei mir.
 
Deine Repo Version ist einfach noch die alte. Updaten dann klappts.

Gesendet von meinem Nexus 4 mit Tapatalk 2
 
  • Danke
Reaktionen: Jensemann1969
Da kam tatsächlich eine Meldung. Aber ich war der Meinung, dass ich erfolgreich aktualisiert habe, denn jetzt kam die Meldung nicht mehr.

Meine repo-Version ist 1.18. Vermute ich mal...
 
Ich baue mir übrigens immer direkt den aktuellsten Franco Kernel ein, habe dafür ein kleines Script geschrieben.

Code:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
	exit 1
fi

echo "Downloading latest Franco Kernel..."
cur_kernel=`curl -s http://minooch.com/franciscofranco/Nexus4/appfiles/nightly`
curl -# http://minooch.com/franciscofranco/Nexus4/boot-${cur_kernel}.img -o boot.img
cp $1 ${1%.*}-franco.zip
echo -n "Replacing Kernel..."
zip ${1%.*}-franco.zip boot.img  > /dev/null 2>&1
if [ $? -ne 0 ] ; then
  echo -e "\e[00;31m ERR\e[00m"
  exit 1
fi
echo -e "\e[00;32m OK\e[00m"
rm boot.img
exit 0

Syntax: ./script.sh cm-10.zip

Das erstellt dann eine neue .zip mit "-franco" im Namen...

Falls jemand Interesse daran hat...

//edit: Den root-Check habe ich eigentlich nur für mich drin, weil ich oft in geschützten Verzeichnissen unterwegs bin. Ist jetzt nicht unbedingt für jeden notwendig..
 

Anhänge

  • kernmerg.PNG
    kernmerg.PNG
    1,3 KB · Aufrufe: 357
Zuletzt bearbeitet:
  • Danke
Reaktionen: Jensemann1969
So, hier noch etwas Feedback. Aktuell bin ich gerade auf Debian Squeeze (x64) in einer VM unterwegs.

Punkt 5: (lunch mako) funktioniert nicht (-> "Kommando nicht gefunden"). Mittels .repo/local_manifest.xml und neu syncen bekomme ich die Daten aber auch. Wenn es denn die selben Daten sind...

Punkt 6: Mangels USB (in der VM) kann ich das leider nicht machen. Meine Umgehungslösung für Punkt 5 hat aber die entsprechenden Dateien geholt. Jedenfalls sind bei mir in den entsprechenden Verzeichnissen (/vendor/lge/mako/proprietary) jede Menge Dateien enthalten. Die kommen vermutlich aus diesem Repository: *Repository entfernt.*

Davon abgesehen, läuft es soweit durch. Dauert halt ewig... ;-)

Danke für die Anleitung! Auch wenn ich vermutlich doch lieber das jeweilige Nightly abwarte, ist es ein tolles Gefühl, die Firmware für sein Telefon zumindest selbst kompilieren zu können. :thumbup:
 
Zuletzt bearbeitet von einem Moderator:
Zu 5.:
Hast du . build/envsetup.sh ausgeführt?

Gesendet mit Tapatalk 2
 
finnq hat mich auf ein illegales Repo hingewiesen, er war so nett und hat das korrigiert und die Schritte angepasst. Allerdings ist es jetzt notwendig, das Nexus via USB anzuschließen.

Er wird allerdings heute Abend noch ein paar Kleinigkeiten anpassen. :)
 
Der_Schubi schrieb:
Zu 5.:
Hast du . build/envsetup.sh ausgeführt?

Gesendet mit Tapatalk 2

Natürlich nicht - ist ja erst einige Schritte weiter unten an der Reihe... Mir fehlt es wohl noch an grundlegendem Know-How.
 
Zuletzt bearbeitet von einem Moderator:
Bitte unterlasst weitere Diskussionen zu diesem Thema. Ich werde die Anleitung heute Abend noch etwas überarbeiten/berichtigen.

Gesendet von meinem Nexus 4 mit Tapatalk 2
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: andry und Jensemann1969

Ähnliche Themen

tilo140380
Antworten
1
Aufrufe
2.189
tilo140380
tilo140380
tilo140380
Antworten
2
Aufrufe
2.354
tilo140380
tilo140380
J
  • josephjean
Antworten
0
Aufrufe
2.287
josephjean
J
Zurück
Oben Unten