A rom forrásának letöltése, a build környezet
Nos. Most, hogy ide eljutottunk, már majdnem készen is vagyunk, csak éppen a kód kéne még, amivel dolgozni akarunk ugye. Miért a CM? Azért, mert van egy nagyon szépen dokumentált rendszere és nem utolsósorban, ha hivatalosan nem is, de modderektől igen széles körben elérhető források sokasága áll a kezdők szolgálatában:
Szóval: Terminál elő:
$ sudo apt-get install -y git curl
Ezek csak kisebb, de fontos csomagok. Ezek kezelik majd letöltéseket. A -y kapcsoló megkímél bennünket a kérdések sokaságától. Mindent magától csinál vele, mert mindenhol "igen" ("yes") választ ad.
Hirdetés
$ mkdir ~/bin
$ mkdir ~/android
Két könyvtárra lesz szükségünk, mint látjuk. Az elsőben biztonságos helyen lesz a repo script. A másodikba kerül a forráskód.
$ echo "PATH=~/bin:$PATH" > ~/.bashrc
$ export PATH=~/bin:$PATH
Ez a környezeti váltózó hozzáadása. Itt figyeli a rendszer, hogy hol is vannak a futtatható fájlok. Ide kerül mindjárt a repo ugye. Most zárjuk be, majd nyissuk meg újra a Terminalt!
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
Semmi extra. Itt csak annyi történik, hogy a kis alkalmazásunk lehúzza nekünk a repo fájlt a megadott címről az előkészített könyvtárunkba. Ez így viszont nem jó, mert nem lesz jogunk futtatni.
Tehát adjunk jogokat is neki:
$ chmod a+x ~/bin/repo
Most pedig menjünk a célkönyvtárunkba végre, hogy le tudjuk tölteni a forrást.
$ cd ~/android
Állítsuk be a forrásunk letöltési tárolóját! Értelemszerűen olyat válasszunk, amit támogat a telefonunk, illetve valaki már esetleg írt rá dev.tree-t. Hogy mi is az, azzal később foglalkozunk.
CM7
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
CM9
$ repo init -u repo init -u git://github.com/CyanogenMod/android.git -b ics
CM10
$ repo init -u git://github.com/CyanogenMod/android.git -b jellybean
CM10.1
$ repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
Nem sokat fog tölteni, csak az indexfájlokat húzza le és megáll a szinkront várva. Közben kérheti az email címet és a nevet. Nem kell félni, semmire nem fogják használni, csak az egyedi azonosítónk épül fel belőle!
Nincs más hátra, mint a szinkron:
$ repo sync -jX
A "X" egy tetszőleges szám. Azt mutatja, hogy hány szálon fut a letöltés. Erősebb neteknél be lehet próbálkozni egy 16-os értékkel, amúgy 4 ajánlott.
Itt álljunk neki kajálni, illetve mehetünk kávézni, wc-re stb... Ugyanis most forrástól függően kb. 6-21 GB fog letöltődni. Beletelik némi időbe.
Néhány órával később....
Mikor végre lenn van az áhított forrás, akkor nincs más dolgunk, mint elindítani a fordítót és kimenni némi újabb hideg élelem után kutatva. Egy négy magos gépen kb. 40-50 perc a fordítási idő. Ha valakinek olyan kis Atom procis cucca van, mint nekem, annak 8-16 óra...
Szóval a fordító indítása:
$ . build/envsetup.sh
Fontos az elején a szóköz a pont után, ne hagyjátok le!
$ lunch
Itt megkapjuk a listát mire fordíthatunk, tehát mi van most előkészítve nekünk. 3 részből tevődik össze az eszközök neve. Például a ZTE Blade:
full_blade-eng
Az első standard érték, nem tudjuk állítgatni. A build környezetnek kell. A második az adott eszköz kódneve, előtte a kötelező "_" szintén a fordítónak kell. Az utolsó egy kulcs, ami a következő lehet:
-user: ez lenne az alap. Limitált hozzáférés, semmi root és egyéb dolog.
-userdebug: ezt szoktuk használni, mert ez root jogokat is ad az alaphoz
-eng: ha ezt választjuk, akkor az összes debug tool is lefordul a forrással, tehát minden tesztet elérünk és később azokkal is tudunk dolgozni. Viszont ez tart a legtovább.
Ám a CM romok alatt mostanra egyetlen dev.tree sincs előre letöltve. Sem a hozzájuk tartozó kernel. Mit is tehetünk?
Mintha mi sem történt volna, futtassuk csak a parancsot! Ki fogja írni, hogy nem találja ezt az eszközt még, de megkeresi. Ha minden jól ment és az eszközünk tényleg támogatott, akkor most a fordító letölti a megfelelő dev.tree-t. Ellenkező esetben kissé ráfaragtunk, ugyanis írhatunk egy sajátot, aminek a kitárgyalása kimerítené a következő 30 oldalt is a cikkben...
Most menjünk a dev.tree alá és csatlakoztassuk a készülékünk az USB hibakeresést engedélyezve:
cd device/gyarto/eszkoz
./extract-files.sh
Ezzel lemásoljuk az eszközünkbe telepített nem nyílt forrású részeket, amiket használni szeretnénk a romban továbbra is. Vigyázzunk, hogy ha pl. CM7-es romot akarunk, akkor ne CM9-es fájlokat másoljunk bele, mert nem szereti.
Ezzel előállítottuk az eszköz vendor mappáját, visszamehetünk a főkönyvtárba:
cd ../../..
Aztán megpróbálhatunk építkezni:
$ make -jX
Itt is, mint a letöltésnél, azt jelzi az X, hogy a fordításra hány folyamatszálat adunk. Melegen ajánlom, hogy senki se próbálkozzon 4 feletti számmal, ha még valamit akar is csinálni a gépén...
Ha minden jól ment és nem hibával állt meg a fordítónk, akkor most a könyvtárunkban ott figyel az out/target/product/ezközünkneve mappa alatt a system.img fájlunk. Ha nem találja az eszközünk a fordító, akkor próbáljuk ki a
$ brunch blade
...vagyis a brunch parancs után simán az eszköz nevét megadni. A CM7-es verziók gyakran csak így fordultak le.
Ha a make parancs sikeres volt és megvan a system.img, akkor:
Adjuk ki még a:
$ make otapackage -jX
...parancsot és várjuk meg hogy létrehozza a zip fájunk, amivel a recovery alól máris tehetjük fel a forrásunk végeredményét... Természetesen itt is dolgozhatunk több szálon!
Ha a brunch parancsot használtuk, akkor egyből a kész zipet kapjuk meg.
A fordító megkezdte a munkát, készül a friss CM7!
A végleges romunk mellé telepíthetünk még némi optimalizálást szolgáló kiegészítőt is:
sudo apt-get install pngcrush
Ám mire megyünk mindezzel, ha lényegében most egy olyan kész romunk van, amit amúgy is letölthetünk? Na ugye, hogy semmire!
A cikk még nem ért véget, kérlek, lapozz!