Proiect de LicențăDisertație [630777]

Universitatea din Craiova
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Calculatoare și Tehnologia Informației

Proiect de Licență/Disertație

Crearea unui Custom Rom pentru Android

Embedded system

Autor, Coordonator,
Udrea Cristian Dr.Ing.Enescu Nicolae
Viorel Iulian

<Data>

Cuprins

1. ceva ………………………….. ………………………….. ………………………….. ………………………….. …. una

2.incaceva ………………………….. ………………………….. ………………………….. …………………………. alta

3. Bibliografie ………………………….. ………………………….. ………………………….. …………………… last

Ce este Android?
Android este un sistem de operare open -source utilizat pentru smartphone -uri. Ofera libertatea
deplin a pentru persoanele care il folosesc.

Ce este Android Source Code?
Android este open -source creat pentru o gam a larga de dispozitive. Scopurile principale ale
Android sunt de a crea o platform a de software desc hise disponibile pentru parteneri de telefoane
mobile , OEM -uri, si dezvoltatorii care fac ideile lor inovatoare o realitate si introduc un produs
de success in lumea real a, care imbun atateste experien ta consumatorului in telefonie
mobil a.Rezultatul este un pr odus de consum, calitativ cu codul surs a open pentru personalizare si
portare.
Practic Android permite personaliza romului fara nici o restric tie.

Ce este ROM -ul pentru Android ?
Android ROM -ul este sistemul de operare Android. Aceasta este interfa ta utilizator (Sense UI in
telefoane HTC ,Touchwiz in Samsung,etc ) si sistemul de fi siere pentru men tinerea contactelor
etc. Este compus dintr -un kernel Linux si diverse programe de completare pentru a ob tine o
functionalitate specific a.

Ce con tine un Android Rom?
In principiu, un Android Rom Con tine urm atoarele lucruri principale:
 Kernel
 Bootloader
 Recovery
 Radio
 Framework
 Apps
 core
 android -runtime,Etc

Definitii pentru termenii folositi

Kernel
Un kernel este componenta critica a Android si a tuturor sistemelor de operare. Ea poate
fi vazuta ca un fel de punte de leg atura intre aplica tiile si hardwa re-ul real al unui dispozitiv.
Dispozitive le Android folosesc kernel Linux, dar nu este exact acela si kernel a altor sisteme de
operare bazate pe Li nux ce il folosesc. Exist a o mul time de cod specific Android construit.
Produc atorii de echipament original trebuie s a contribuie, de asemenea, pentru c a au nevoie s a
dezvolte drivere de hardware pentru piesele pe care le utilizeaz a necesara pentru versiun ea de
kernel pe care il utilizeaz a. Acesta este motivul pentru care dureaz a un timp pentru dezvoltatorii
Android independen ti si modderi care fac port la ultima versiune de android pentru un telefon
care sa incetat update -uri.
Driverele scrise pentru a lucra cu kernel KitKat pe un telefon nu va func tiona neaparat pe
un kernel Lolipop . Este important, pentru c a una dintre func tiile principale ale kernel -ului este
de a controla hardware -ul. Exista o mul time de cod surs a, cu mai multe op tiuni pentru a putea
construirea kernel, mai mult decat va puteti imagina, dar in cele din urm a este doar intermediar
intre hardware -ul si software -ul. Deci, practic, dac a orice instruc tiune este dat a pentru telefon
acesta da mai intai comanda kernel -ului pentru sarcina special a.

Bootloader
Bootloader este un cod care este executat inainte de orice s istem de operare incepe
porneasca . Bootloader este practic pachetul de instruc tiuni pentru a porni kerne l-ul sistemului de
operare si cele mai multe dintre ele au, de asemenea, propriul mediu de depanare sau modificare.
Ganditi-va la bootloader ca un punct de control de securit ate pentru toate aceste . Pentru c a, dac a
sunte ti capabil de a schimba ce e pe aceste mobile, sunte ti in stare s a strcati lucrurile, dac a nu stii
ce faci ti.Practic acesta da comenzi kernel -ul dispozitivului la Boot pe dispozitiv in mod
corespunz ator, f ara probleme. Foarte mare atentie cu bootloader deorece poate strica totu.

Recovery
Recovery este definit in termeni simpli, ca surs a de rezerv a. Ori de c ate ori firmware -ul
telefonului este deteriorat, recovery va ajuta pentru a restabili sau de a repara firmware -ul defect
sau a face debug intr-o stare de lucru. Este de asemenea folosit pentru intermiten pentru a face
flash la Rom, kernel si multe lucruri.

Radio
Radio este primul lucru pe care ruleaza, chiar inainte de bootloader. Ea controleaz a toate
comunica tiile wireless cum ar fi antena GSM, GPS etc.

 Acestea sunt principalele p arti ale sistemului de operare Android.

Android Development
Setarea spatiului de lucru in Linux

1. Sistemul de operare Linux(Recomand versiunea 14.04 deoarece sunt putine sansese sa
intampinati probleme).
2. Java Development Kit(JDK)
3. Diverse toolu -uri folosite.
Odata descarcat Linux sunt 3 variante de a instala:
1. Instalati ca sistem de operare principal
2. Instalati ca masina virtuala inauntru la Windows.
3. Dual -boot cu Windows folosind diverse partitii.

Setarea spatiului de lucru pentru compilar e

Instalarea programelor necesare pentru developemnt la Android Rom
1. Instalare Java Development Kit (JDK)
Se deschide terminal in Linux si se introduce urmatoarea comanda:
sudo apt -get update && sudo apt -get install openjdk -7-jdk
Aceata comanda instaleaza java .

2. Instalarea programelor secundare:
sudo apt -get install git -core gnupg flex bison gperf build -essential \
zip curl zlib1g -dev gcc -multilib g++ -multilib libc6 -dev-i386 \
lib32ncurses5 -dev x11proto -core-dev libx11 -dev lib32z -dev ccache \
libgl1 -mesa -dev libxml2 -utils xsltproc unzip

Setarea spatiului de lucru

Dupa ce am instalat programele necesare trebuie sa descarcam codu sursa pentru android.Pentru
a face acestu lucru avem nevoie de “repo”
Creeam un director pentru a stoca “repo” pe Hdd nostru.
 mkdir ~/bin
Def: “~” semnifica directoru home
Introducem aceasta comanda in terminal si sistemu va stii ce sa faca
Cea mai comuna metoda de a face aceasta este de a adauga comanda in fisieru .bashrc.Acesta
este fisieru care se citeste intotdeauna c and se deschide terminalu si se poate adauga comenzi sau
ce doriti sa initializati la inceput.Se deschide ~/.bashrc cu un editor de texte ,un exemplu de
comanda este:
 gedit ~/.bashrc
Cand fisieru text este deschis trebuie sa adaugam la sfarsit
 PATH=~/bin: $PATH
Se apasa Ctrl+O pentru salvare si Ctrl+X pentru iesire.
Se salveaza si inchide.

Ce este un repo?

Repo este un instrument de management care sa construit peste Git . Repo unific a multe arhive
de GIT atunci c and este necesar , face upload la fisiere atunci cand facem modificari si
automatizeaz a lucru de dezvoltare pe Android .
Descarcam repo utilizand Curl:
 mkdir ~/bin && curl http://commondatastorage.googleapis.com/git -repo-downloads/repo
> ~/bin/repo && chmod a+x ~/bin/repo
Comanda chmod a+x ~/bin/repo asigura ca repo poate fi folosit.
Adaugam folderu bin pentru comenzile repo
 sudo gedit .bashrc
 export PATH=~/bin:$PATH
Pentru a ne identifica ulterior daca facem commituri folosim:
 git config –global user.email "you@youremail. com"
 git config –global user.name "yourpreferredusername"
Trebuie sa facem un director unde vom salva codu pentru android.Eu l -am denumit AOSP
,desigur puteti sa folositi orice nume doriti.
Facem directoru
 mkdir ~/AOSP
Si ne intram in el
 cd ~/AOSP

Descarcarea codului
Trebuie sa va decideti asupra carui dispozitiv veti lucra .Eu o sa descarc ultimu cod de
Marshmallow pentru Nexus 5
 repo init -u https://andro id.googlesource.com/platform/manifest -b android -6.0.1_r43
Acum pentru a sincroniza fisierele online cu calculatoru dvs scriem comanda
 Repo sync
Cam as ava arata odata ce incepe sa descarce.

Durata va varia in functie de conexiunea de internet si puterea calculatorului.
Odata ce a terminat sa faca sync ar trebuie sa fie totul intr -un folder denumit CCACHE

In screenshot se afla toate fisierele descarcate din repo.

Optional pentru a spori timpul de compilare in viitor va trebie sa setam un spa tiu de lucru
rezervat.
Deschidem fisierul ~/.bashrc si adaugam la sfarsit export CCACHE=1 ,salvam si inchidem.

Revenim la terminal si sa fie in directoriu AOSP
Setam spatiu pentru cache intre 50 -100Gb recomandat
 prebuilts/misc/linux -x86/ccache/ccache -M 50G –Eu folosesc 50Gb
Urmeaza sa instalm driverele necesare pentru telefon
Eu folosesc nexus 5 si se pot descarca de la https://developers.google.com/android/nexus/drivers
Sunt 3 fisiere disponibile
Broadcom pentru NFC, Bluetooth, Wi -Fi
Lg pentru Camera, Senzori, Audio
Qualcomm pentru Grafica, GSM, Camera, GPS, Senzori, Media, DSP, USB
Se desca rca toate 3 fisieri si se ext rag in folderu AOSP
Aceste trebuie instalate ,in terminal se introduce comanda:
 ./ extract -broadcom -hammerhead.sh
 ./ extract -lge-hammerhead.sh
 ./ extract -qcom -hammerhead.sh

De asemenea trebuie accept pentru instalarea acestuia …

Odata finalizata comand a va aparea in terminal un mesaj de confirmare precum si fisierelea pe
care au fost folosite.

In final vom incepe sa creeam Romu de baza pe care vom lucra.
Inainte trebuie sa facem un meniu pentru ce vom lucra ca nu creeam un rom gresit sau ceva
generic. In terminal folosim comanda
 build/envsetup.sh
 lunch pentru a vedea ce optiuni avem

Selectam ce dorim ,in cazul meu pentru Nexus 5 nume de cod hammerhead adica
optiunea 19 si apasam enter

Ca sa creeam romu introducem
 make -j16 otapackage
 make  creeaza
-jX  X reprezint numare de cores x threads per core.Eu am i5 quad core CPU are 4 logical
cores x2 threads adica 8
Otapackage  un zip care se poate flash din TWRP

Prima compliare s -ar putea sa dureze….
Screenshot cand ruleaza.

Am folosit i5 ,8Gb ram , SSD(care face diferenta foarte mult la timpu de compilare)

 ATENTIE!!!!! Nu este recomandat sa compliati pe o partitie de windows formatata
NTFS,Linux s -ar putea sa aiba probleme ,greseala facuta si de mine care m -a costat
14 ore

Daca partitia este ext4 pe hdd dureaza ~3ore pe un SSD cam ~1 ora cu configuratia specificata
de mine.Timpu dureaza de la pc la pc

Dupa ce s -a terminat ,locatia unde se va afla este:
/home/username /AOSP/out/target/product/hammerhead

Datorita comenzii “ -otapackage” s -a creat un fisier de tip zip care va putea fi folosit prin
intermidiu TWRP.Se va face flash la .zip si va fi instalat pe telefon.
Dimensiunea ocupata este de ~ 230MB

Tutorial instalare custom rom pe telefon

Program folosite
3. Android SDK – necesar pentru a debloca Bootloader
4. Android Drivers
5. Twrp image
6. Custom rom zip pentru flash impreuna cu gapps si/sau altceva.
Flash tutorial
1. Se descarca android sdk de pe http://devel oper.android.com/sdk/index.html .Se
instaleaza intr -un folder in care vom lucra.
Optional
Daca telefonu este nou si nu a abut booloader unlocked atunci va trebui sa -l deblocam.
Cel mai simplu mod de a verifica este sa stingeti telefonu , apoi trebuie sa tineti simultan pasat pe
butonu de pornire(lateral dreapta) + buton sunet jos(buton stanga,ultimu de jos).Telefonu va intra
in fastboot mode.
Verificam Lock State: Unlocked(deblocat) sau Locked(blocat)

Pentru a debloca este necesat android sdk plus dri vere instalate in windows/linux.
Deschidem folderu SDK/platform -tool/, tinem apasat pe Shift apoi click dreapta in folder si
selectam “Open command window here”,va deschide cmd cu locatia respective.
Introducem comanda “fastboot devices” pentru a verifica driverele.

Daca nu se afiseasa nimic ,driverele nu au fost instalate.
Aceste pot fi descarcate din SDK ,deschidem Device Manager

Dupa cum vedeti drivere de Android nu sunt instalate se face click dreapta pe Android apoi dam
browser unde avem SDK si drivere descarcate.

In momentul cand ne intreaba daca vrei sa instalam trebuie sa avem bifat Always trust software
from “Google Inc”.

Si selectam Install.Pe ecran va aparea un mesaj de confirmare.

Reintroducem comanda fastboot devices si ar trebui s a afiseze dispozitivu conectat.

Observam de aceasta data dispozitivu este conectat la pc si functioneaza.

Introducem comanda “fastboot oem unlock”

Selectam optiune Yes din Volum +/ – si apasam power button.Durata va fi de cateva minute
Reintroducem comanda “fastboot reboot” pentru a reporni telefonu.

2. Porniti telefonu in fastboot mode,decarcatti ultima versiune de twrp
https://dl.twrp.me/hammerhead/ si copiat in Sdk/platform -tools.
Deschideti terminal si introduceti fastboot flash recovery numetwrp.img

In acest moment ati instalat un custom recovery necesar pentru a instala custom rom sau ce doriti
pe telefon.

3. Apasati pe volume + pana va aparea RECOVERY pe ecran apoi selectati apasand power
button.

4. Selectati Wipe ->Swipe to factory reset ->Back ->Format Data,introduceti YES ->Back x2 –
>Advanced Wipe ->Selectati Dalvik,System,data,cache ->Swipe to Wipe ->Back x3

5. Install -> selectati .zip care doriti sa instalati din memoria telefonului sau Usb OTG –
>Swip e to confirm flash ->Asteptati sa se instaleze ->Reboot system

6. Prima pornire o sa dureze ceva timp ~15 minute.

Revenirea la factory default

Necesita Google factory image https://developers.google.com/android/nexus/images
-Se descarca ultima versiune pentru Nexus 5 ,dezarhivati continutu in SDK/platform -tool
-Deschideti terminal ,verificati starea telefonului cu comanda “fastboot devices”daca este
conectat la pc sau nu.
-Scrieti comanda “flash -all.bat” in cmd si telefonu va incepe sa revina la stare originala din
fabrica.Ecranu telefonului va reporni de cateva ori,totul este normal.Durata va fi de 2 -3 minute.

Odata terminat telefonu va reporni automat.

Tutorial fl ash si root

 Daca sunteti Android stock
1.Descarcati ultimu .zip, custom kernel(optional), Supersu(root,optional)
2.Asigurativa ca aveti ultima versiune de bootloader si radio(mai just este explicat cum sa faceti
flash).
3.Intrati in Recovery
4.Flash .zip
5.Flash kernel,SuperSu(optional)
6.Reboot.

 Daca sunteti pe custom rom diferit.
1.Descarcati ultimu .zip, custom kernel(optional), Supersu(root,optional)
2.Asigurativa ca aveti ultima versiune de bootloader si radio(mai just este explicat cum sa facet i
flash).
3.Intrati in Recovery
4.Faceti Wipe system, data, cache, and dalvik cache in Wipe > Advanced Wipe
(OBLIGATORIU).
4.Flash .zip
5.Flash kernel,SuperSu(optional)
6.Reboot.

 Cum sa faceti update la bootloader si radio
1.Intrati in bootloader
2.Descarcati ultima versiune de factory image pentru dispozitiv
3.Comparati versiunea curenta de bootloader/radio cu versiunea bootloader/radio pe care o aveti
instalata pe telefon.Daca sunt la fel atunci puteti proceda mai departe ,daca nu trebuie sa face ti
flash.
4.Fiti siguri ca aveti mediu de lucru setat cum am explicat mai sus.
5.Intrati in folderu sdk cu bootloader si radio images si scrieti urmatoarea comenzi in cmd.
fastboot flash bootloader name_of_bootloader.img

fastboot reboot -bootloader
fastboot flash radio name_of_radio.img

 Cum sa faceti root la telefon.
Exista 2 metode, system root si systemless root
System root: Modifica partitia de system ,este stabile si merge fara problem.Mergeti pe aceasta
metoda daca nu va pasa de Android Pay.
Systemless root: Este o metoda noua , nu modifica partitia de system si permite folosirea
Android Pay.Permite si instalarea de OTA de la Google,exista unele aplicatii care au probleme
cu acest root.
Daca alegeti system root mergeti pe SuperSu 2.52 sau versiunea mai noua.
Daca alegeti systemless root mergeti pe SuperSu 2.64 sau mai tarziu.

 Cum sa instalati
System root: Faceti flash la .zip in mod normal.
Systemless root:
1.In TWRP accesati TWRP > Advanced > Termianl Command
2.Selectati folderu default(pentru root ar trebui sa fie / )utilizand butonul din dreapta.
3.Scrieti aceste comenzi in Termianl cate una pe rand
echo SYSTEMLESS=true>>/data/.supersu
echo BINDSYSTEMXBIN=false>>/data/.supersu
Prima comanda forteaza systemless root
A doua comanda previne /su/xbin_bind sa existe ,lucru ca strica Android Pay.
4.Flash SuperSu 2.64+
 Daca doriti sa reventi la system fara root doar faceti flash la “UnSu” linku il puteti accesa
http://forum.xda -developers.com/attachment.php?attachmentid=3528363&d=1446472307

Exemplu de modificare a boot option in android
-Reboot menu –

Schimbarea pe care doresc sa o este adaugare de optiuni noi la Power Menu.Este meniu care
apare atunci cand este tinut apasat pe butonu de power.De obicei la telefoanele Nexus este doar
optiunea de ‘Power Off’.Doresc sa adaug optiuni extra care imi permit reboot la telefon,airplane
mode,si silent.Functionalitatea de airplane si silent sunt deja scris e in android doar ca trebuie sa
le expunem.Optiunea de reboot trebuie sa o implementam noi insine.

Ca sa schimbam trebuie sa ne ducem in folderu frameworks/base in care vom petrece mult timp
,aproximativ toate modificarile vor avea loc in acest folder.

Prima data trebuie sa configuram meniu.Ne ducem in core/res/res/values/config.xml si gasim
string –array denumit “config_globalActionsList”.Vom adauga noile noastre optiuni.

Adaugam urmatoarele linii in string array:
&lt;item&gt;reboot&lt;/item&gt;
&lt;ite m&gt;airplane&lt;/item&gt;
&lt;item&gt;silent&lt;/item&gt;

Apoi vom deschide core/res/res/values/strings.xml si gasim string denumit
“global_action_power_off”.Veti vedea ca actiunele globale deja exista pentru cele doua functii
,vom adauga:
&lt;string name="global_action_reboot"&gt;Reboot&lt;/string&gt;
Acesta este string simplu care va aparea in Power Menu.
Trebuie sa facem update si la core/res/res/values/symbols.xml ca sa facem referire la noul string
creat in framework.
Gasim ‘global_action_power_o ff si adaugam:
&lt;java -symbol type="string" name="global_action_reboot" /&gt;
Pentru ultima parte si cea mai interesanta parte va trebui sa implementam functionalitatea reboot.

Deschidem services/core/java/com/android/server/policy/GlobalActions.java:
Prima data trebuie sa importam modificarile noastre pentru ca compilarea sa aiba success.
import android.os.*;
Facem scroll pe la linia 85 si veti vedea un comment care zice ca exista variabile care sunt
valabile pentru actiunile globale.Vom adauga string pen tru noul nostru buton de reboot
GLOBAL_ACTION_KEY_POWER add:
private static final String GLOBAL_ACTION_KEY_REBOOT = "reboot";
Remarcati asemanare cu primul string pe care l -am definit in pasii anteriori si “r” nu este mare.
Facem scroll pe la linia 257 si vom vedea ArraySet fiind declarant “addedKeys”Chiar mai jos
este un loop seteaza fiecare handler pentru fiecare tip de actiune declarata in defaultActions .Aici
vom systemului sa gestioneze nou nostru buton de reboot.Ca de obicei vom adauga sub
GLOBAL_ ACTION_KEY_POWER un alt statement pentru
GLOBAL_ACTION_KEY_REBOOT
if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {
mItems.add(new PowerAction());
} else if(GLOBAL_ACTION_KEY_REBOOT.equals(actionKey)){
mItems.add(new RebootAction());
}

Observati ca am inst ant o noua instant a clasei RebootACtion care inca nu exista,pasul final este
sa cream aceasta clasa.

Gasim clasa PowerAction in juru liniei 325 si facem vom delcara urmatoarele:
private final class RebootAction extends SinglePressAction{

private RebootAction(){
super(R.drawable.ic_lock_power_off, R.string.global_action_power_off);
}

@Override
public void onPress() {
try {
IPowerManager powerManager =
IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));

powerManager.r eboot(false, null, false);
}catch(RemoteException e){
Log.e(TAG,"PowerManager service failed! : " +e);
}
}

@Override
public boolean showDuringKeyguard() {
return true;
}

@Override
public boolean showBeforeProvisioning() {
return true;
}
}
In construct oru nostru vom apela constructoru SinglePressAction care mosteneste prin extindere
SinglePressAction care ne da onPress(),ShowDuringKeyguard() si showBeforeProvisioning()
metode care trebuie implementate.Pentru acum am mers cu optiunea default pentru retur n la
showDuringKeyguard() si showBeforePRovisioning().La metoda onPress() este locul unde sa
efectuat modificarile
Folosind clasa PowerAction ca exemplu,facem referire la interfata IPowerManager si chemam
metoda de reboot.Metoda de reboot este definite ca:
void reboot(boolean confirm, String reason, boolean wait);
Personal nu vreau sa am un dialog de tip popup cand apas pe reboot,asa ca definesc primu
parametru ca fals,nu o a dau un motiv anume pentru care este chemat asa ca dau null pentru al
doilea param etru,si in ultimu rand true pentru optinea de “wait”,optinea de chemare va trebui sa
astepte operatiunea sa fie complete si nu return,nu conteaza asa ca o sad au fals.
Acestea sunt modificarile.Ne ducem in terminal la directoriu parinte pentru AOSP si compilam
cu comanda “make –j8”.

KERNEL

Guvernatoare CPU
Aplicatiia recomandata pentru a face modificari in kernel: Kernel Adiutor
https://play.google.com/store/apps/details?id=com.grarak.kerneladiutor

Ce este un guvernator CPU?
Un guvernator CPU in Android controleaza frecventele cum cresc si scad in raspuns cu
activitatile utilizatorului pe dispozitiv.Guvernatoarele au o important a major pe telefoane si
tablete cu android, influenteaza fluditatea sistemului si duratea bateriei pe o reincarcare.
Cpu folosite:

1.DanceDance – este bazat pe guvernator conservativ cu modificari inteligente,face scaling la
frecventa conform legilor guv ernatorului conservativ .Incepe de la frecventa cea mai mica
,verifica timpu de incarcare si daca este mai decat upthreshold atunci va urca frecvanta cate una
pe rand.Marea majoritate a timpului petrecut este la frecvente joase .Obiectivu este de a obtine
cea mai buna baterie cu performante decente.
2.Uberdemand – este guvernatoru ondemand cu 2 faze,tine frecventa maxima la 1728 MHz
,obligand astfel CPU sa nu se duca direct la maxim 2265MHz
3.Lionheart – este un guvernator conservativ bazat pe samsung,elementele de configurare( cum
ar fi thresholds si sampling rate) au fost schimbate ca guvernatoru sa se comporte ca unul de
perfomanta avand un cost de baterie, urcare frecventei este foarte agresiva.
4.Darkness – Este bazat pe guvernatoru nightmare dar mult mai simplu si rapid , configurare de
baza cu o structura compleza.Este un update la guvernatoru nightmare avand stabilitate in
performanta,este foarte stabil in teste.
5.Electroactive – guvernatoru a f ost creat pentru a obtine rezultate bune intre peromanca si
baterie.Inlocuieste guvernatorul electrodemant fiind mult mai bun cu bateria si fluid comparativ
cu cel original.Este un hibrid utilizand o metorda unica de a combina guvernatoarele interactive
si ondemand.Include mai multe modificari pentru a avea o baterie mai buna decat guvernatorul
interactie plus adaosuricare permit o gestionare mai buna puterii si performanteleor in jocuri.Cpu
boost, graphic boost, fast_start , deep_sleep.
6.Intellimm – O res criere a vechiului guvernator Min Max, are 3 stari de procesor: Idle, UI si
Max. Intelliminmax(intellimm) este proiect at pentru a lucra cu SoC.

7.Intelliactive – bazat pe guvernatoru interactive de la google cu mai multe imbunatatiri:
 Self-boost capabilit ati de la driver
 Scheduling in 2 faze ( idle/busy pentru a preveni frecventa maxima)
 Verifica starea offline a cpu ,evita hotplugging.
8.Interactive – Scaleaza frecventa pe parcusul unui timp setat de kernel dev sau utilizator.Este
guvernatorul default a mai multor producatori de smartphone -uri si tableta.
9.Conservative – este configurat astfel sa foloseasca tot timplu o frecventa cat mai mica poate fi
descris si ca un guvernator ondemand mai lent.
10.Ondemand – este unul din cele mai originale si vechi guvernatoare disponubile pe kernel
linux.Cand sarcina plasata pe proceor atinge threshold stabilit, guvernatorul va urca rapid la
frecventa maxima a p rocesorului( face telefonu foarte fluid idn cauza acesteia).Are un impact
negativ asupra performantei fata de alti guvernatori.
11.Performance – blocheaza procesorul telefonului la frecventa maxima.

Drivere Hotplugging:
Mpdecision : Este driver default al hotplugging. Este cel mai folosit pe scara larga in toate
dispozitivele Android.
Intelliplug : Este un hotplugging echilibru at intre durata de viata a bateriei excelenta si
performanta.De asemenea este un driver personalizat de faux123.
Blu_plug : Hotpluggin g dinamic de la eng.stk's shamu kernel cu optiuni pentru salvarea bateriei
avand ecranu stins.
Mako Hotplug : Este un hotplugging popular al dev Francokernel. Este foarte configurabil,se
poate folosi dual core pentru aplicatii usoare si quad core pentru uti lizare intensa .
Msm_hotplug : Durata de viata a bateriei este buna, un custom hotplugging al qualcomm bazat
pe driveru personalizat de myflux.Este o alegere populara pentru utilizatori.

Ce ar trebui sa ne uita la un guvernator CPU:
Sunt foarte multe guvernatoare disponibile pe android, sunt cateva lucruri importante cand ne
uitam la un guvernator

Viteza – Cu cat mai multa cu atat mai bine! De obicei avand mai multa viteza rezulta in
diminuarea bateriei, cel mai bine ar fi un echilibru intre cele doua .
Bateria – Cu cat mai multa baterie cu atat mai putina performanta! Avand un guvernator battery
friendly inseamna mai putina performanta (eventual lag) ,cel mai bine ar fi un echilibru intre cele
doua.
Stabilitate – Anumite guvernatoare sunt foarte stabi le si nu duc la blocarea telefonului sau
restart neasteptat.
Fluiditate – Nu este exact ca viteza,un guvernator poate sa fie rapid dar nu inseamna ca este
fluid.O metoda de a testa este un scroll sus/jos pe o pgaina sau deschideti si inchide aplicatii.

Pentru dispozitivele qualcomm:

 Durata de viata a bateriei:
– mpdecision
– Mako Hotplug
– Intelliplug

 Performanta
-mpdecision

 Pentru echilibru
– Mako Hotplug
– Intelliplug
– mpdecision

Pentru performanta:
 Interactive ;
 Intelliactive;
 Performance;
 Lionheart ;

Pentru baterie :

 Ondemand;
 Conservative;
 Intellimm;

Pentru performanta si baterie:

 Interactive ;
 Intelliactive;
 Ondemand;

Pentru Gaming

 Interactive ;
 Intelliactive;
 Performance;
 Lionheart;
 Ondemand ;

Guvernatoare GPU

1.Perf ormance – Tine frecventa GPU la frecventa maxima .Este cea mai buna metoda de a
obtine cea mai buna experienta in jocuri si nu va intereseaza bateria.
2.Powersave – Asemanator guvernatorului CPU ,mentrine GPU la frecventa joase.Cel mai bun
pentru baterie dar lag foarte mare in jocuri.
3.Ondemand – Este asemanator guvernatorului CPU ,frecventa urca cand telefonu este detectata
folosire telefonului.O echilibrare buna intre performanta si baterie.
4.Simple – Este un guvernator nou pentru modul de scalare a frecventei GPU.Permite un control
mai bun asupra frecventei creste/descreste, asta inseamna mai multa performanta sau mai multa
baterie.
5.Conservative – Prefera frecventele joase cat mai mult timp posibil.
Cateva guvernatoare recomandate pent ru CPU (general):

I/O Schedulers

De ce sa schimbat I/O Scheduler la telefon?

Mare majorite a producatorilor de telefoane pastreaza I/O scheduler blocat astfel utilizatorii nu
pot sa modifice valoriele default care are putea duce la o crestere de performanta a telefonului.
Daca telefonul este rootat aveti posibilitatea sa modificati aceste valori permitant o performanta
mai buna si chiar crestea duratei de viata a bateriei.

Care I/O schedulers sunt disponibile:

Input/Output (I/O) este un termen de a descrie metoda sistemelor de operare care decide ordinea
operatiuni pe blocul I/O care vor fi depuse pe volumul de stocare.I/O scheduling este denumit si
„disk scheduling”

I/O schedulers pot avea mai multe scopuri, în funcție de scopul planificatoru l I/O, unele
obiective comune sunt:
– Pentru a minimiza timpul pierdut de pe hard disk cand cauta.
– Să acorde prioritate cererilor I/O la anumite procese.
– Pentru a da o parte din lățimea de bandă pe disc pentru fiecare proces care rulează.
– Pentru a ga ranta că anumite cereri vor fi emise înainte de un anumit termen.

1.FIOPS

Beneficii:
– Atinge valori inalte de citiri și scrieri rapide in benchmark
– Timp de lansare a aplicatiilor mai rapid si o experienta generala de UI buna

Dezavantaje:
– Nu este cel m ai sensibil I/O planificator ( poate face lag de telefon)
– Nu este bun la multitasking

2.Cfq

Beneficii:
– Are o p erformanță bine echilibrată I/ O
– Excelent pe sistemele multiprocesor
– Vazut ca un scheduler I/O stabil
– Bun pentru multitasking

Dezavantaje:
– Unii utilizatori raportează scanare media durează cel mai lung pentru a finaliza folosind CFQ.
Acest lucru ar pute a fi din cauza proprietății , deoarece lățimea de bandă este distribuită în mo d
egal tuturor operațiunilor i/ o în timpul de boot -up, scanare media nu se acordă o prioritate
specială.

3.Deadline

Beneficii:
– Aproape un scheduler în timp real.
– Excelează în reducerea latenței oricărui dat un singur I / O
– Cel mai bun scheduler pentru acc es la baze de date și q ueries .
– Are destul de bine in benchmark, probabil cel mai bun .
– Ca noop, un scheduler bun pentru flash drive

Dezavantaje:
– În cazul în care telefonul este supraîncărcat, pot aparea crash -uri si inchideri neasteptate a
proceselor.

4.Fifo

Beneficii:
– Navigare UI mai rapidă și o experiență generală mai buna de telefon
– Timpu de pornire mai rapid și lansare rapida a aplicațiilor

Dezavantaje:
– Nu este bun pentru multitasking greu
– Viteze de scriere mai lente

5.Noop

Beneficii:
– Prime ste cereri de I/O, cu cel mai mic număr de cicluri de cpu.
– Cele mai bune memorii flash, deoarece nu există nici o penalizare.
– Se comporta excelent in benchmark
– Este foarte de încredere

Dezavantaje:
– Reducerea numărului de cicluri CPU corespunde unu i declin simultan în performanță
– Nu este cel mai sensibil I/O
– Nu este foarte bun la multitasking (în special sarcini de lucru grele)

6.Row

Beneficii:
– Navigare UI rapidă și experiență generală buna in telefon
– Timpu de pornire mai rapid și de executie a aplicatiilor este rapid.

Dezavantaje:
– Nu este bun cu multitasking greu.
– Vteze de scriere mai lente.

7.Sio

Beneficii:
– Este simplu și stabil.
– Nu are rezultate foarte bune in benchmark.

Dezavantaje:
-Viteza de scriere incet comparativ cu alte scheldures.
– Viteze de citire secvențială de pe flash drive -urile nu sunt la fel de bun alte scheduler I/O

8.Tripndroid

Beneficii:
– Excelent la performanță I/O și multitasking de zi cu zi
– Este bine rotunjit și eficient scheduler I/O
– Foarte sensibil I/O Scheduler (Comparativ cu FIOPS)

Dezavantaje:
– Performanța variază între diferite dispozitive (Unele dispozitive executa foarte bine)

9.Zen

Beneficii:
– Foarte eficient I /O scheduling
– Mai stabil decât VR

Dezavantaje:
– Variabilitate de performanta poate condu ce la rezultate diferite (Nu funcționează bine, uneori)

I/O Read Ahead Cache :

Daca utilizati un custom kernel probabil ati auzit de un termen numit Read Ahead cache
sau cache.Este practic un cache pentru fiserele care au fost deschise recent de pe dispozitivul
mobil astfel ca sa poate fi accesat rapid din nou,daca este necesar.

Sursa: http:/ /andrux -and-me.blogspot.ro/2014/06/various -conditions -and-io-performance.html

Recomandari:
Pentru stabilitare 128 kB read -head value ;
Pentru performanta 2048 kB read -head value ;
Pentru orice memorie interna 128 kB read -head value ;
Pentru carduri SD cu memorie mai mica de 8 GB 128 kB read -head value ;
Pentru carduri SD cu memorie de 16 GB 1024 kB read -head value ;
Pentru carduri SD cu memorie de 32 GB 2048 kB read -head value ;

Pentru carduri SD cu memorie de 64 GB+ 2048 kB read -head value ;
De retinut!!!
 Nu intoteaunea mai mult inseamna mai bine!
 Anumite carduri nu pot suporta valori ridicare pentru read -ahead cache, fiti siguri ca aveti
carduri de o calitate superioara
 Stock este bun pentru majoritatea oamenilor dar nu este cel mai bun ca performanta
 Nu toat e kernele permit schimbarea I/O
 Performantele difera de la un dispozitiv la altu!

Un benchmark cu rezultate pentru diferite I/O
Sequential in MB/sec(Mai mare este mai bine)

Random in IOPS(Mai mare este mai bine)

Sursa: http://forum.xda -developers.com/showpost.php?p=58807943&postcount=85

Recomandari I/O schedulers :

Pentru viata de zi cu zi:
 SIO ;
 ROW ;
 NOOP ;
 CFQ ;
 Deadline ;

Pentru baterie:
 NOOP ;
 FIOPS ;
 SIO ;
 ROW ;

Pentru Gaming
 Deadline ;
 ZEN ;
 ROW ;
 CFQ ;

Pentru performanta (Benchmarking):
 FIOPS ;
 Deadline ;
 NOOP ;
 ROW ;

Pentru multitasking greu
 BFQ ;
 CFQ ;
 Deadline ;

IO Scheduler comparatie

 Prin urmare cel mai bun i/o nu poate fi ales cu usurinta,cel mai bine
este sa alegeti dvs in functie de nevoile fiecarui.

TCP Algoritm

Ce este un algoritm TCP?
Algoritmii sunt folositi de TCP,protocolul de transmitere a datelor utilizat de mai multe aplicatii
pe internet.Principalul obiectiv al unui algoritm TCP este de a evita transmiterea mai multor date
decat reteaua este capabila sa transmita.Algoritmii diferiti raspund in mod diferit la sarcinile de
retea,dar ele sunt toate bazate pe acelasi principu.

Lucrur i care să se uite în algoritmii TCP includ (dar nu exclusiv):
– Viteze de download / upload – mai mare numărul, cu atât mai bine
– Latenta – cu cat mai mic numărului, cu atât mai bine

TCP Algorithm:
1.Cubic
2.Reno
3.Bic
4.Westwood
5.Hybla
6.Htcp
7.Vegas
8.Veno
9.Yeah
10.Illinois

Bechmark

Download / Upload / Latenta

cubic:
Primu test : 15ms – 25,95Mbps – 22,57 Mbps
Al doilea test : 14ms – 25,92Mbps – 23,26Mbps

reno:
Primu test : 13ms – 30,71Mbps – 21,63Mbps
Al doilea test : 13ms – 29,83Mbps – 23,71Mbps

bic:
Primu test : 12ms – 25,58Mbps – 23,81Mbps
Al doilea test : 13ms – 25,98Mbps – 23,82Mbps

westwood:
Primu test : 11ms – 32,85Mbps – 23,50Mbps
Al doilea test : 13ms – 28,48Mbps – 23,49Mbps

hybla:
Primu test : 14ms – 26,39Mbps – 22,64Mbps
Al doilea test : 14ms – 28,67Mbps – 22,76Mbps

htcp:
Primu test : 14ms – 28,44Mbps – 22,23Mbps
Al doilea test : 15ms – 25,95Mbps – 23,20Mbps

vegas:
Primu test : 14ms – 23,69Mbps – 21,82Mbps
Al doilea test : 14ms – 27,20Mbps – 22,27Mbps

veno:
Primu test : 13ms – 24,78Mbps – 23,33Mbps
Al doilea test : 13ms – 2350Mbps – 22,84Mbps

yeah:
Primu test : 14ms – 28,57Mbps – 23,48Mbps
Al doilea test : 17ms – 28,89Mbps – 23,34Mbps

illinois:
Primu test : 13ms – 27,63Mbps – 23,44Mbps
Al doilea test : 16ms – 28,77Mbps – 21,66Mbps

Recomandari:

Pentru viteza :
– Westwood – Excelent
– Highspeed
– LP

Pentru stabilitate :
– Cubic – Excelent
– Reno

Pentru retele cu lantenta mare :
– Westwood – Excelent
– BIC

General :
– Cubic – Excelent
– Westwood – Excelent
– Reno

Comparatie

Concluzie

Recomandare mea este sa folositi Cubic sau Westwood , sunt cele mai stabile si eficiente pentru
mobil.Folosirea reala in lume este diferit fata comparatie in algoritmi.

Exist si mituri despre afectarea bateriei cand schimbam ,nu sunt adevarate !!!!!

Bibliografie

1. [TUT] [SABERMOD] How to Compile Your Own AOSP/CM Custom Kernel
http://forum.xda -developers.com/moto -g/general/tut -how -to-compile -aosp -cm-kernel -t2880399

2. Compile AOSP – https://source.android.com/source/initializing.html

3. How to use toolchaing for roms and kernels – http://www.xda -developers.com/custom –
toolchain -roms -kernels/

4. Toolchains – http://forum.xda -developers.com/chef -central/android/guide -switching -to-
custom -toolchain -t2927662

5. How to tweak and mo d Android using init.d scripts
http://forum.xda -developers.com/showthread.php?t=2198510

6. Android Kernel building
http://www.itechnospot.com/blog/howtos/android -kernel -buildi ng-tutorial/

7. AOSP developing efficiently
http://blog.udinic.com/2014/07/24/aosp -part-3-developing -efficiently/

8. I/O Scheduler
http://andrux -and-me.blogspot.ro/2014/06/various -conditions -and-io-performance.html
9. Windows dual boot / Grub 2
https://help.ubuntu.com/community/WindowsDualBoot

10. Comunitate de dezvoltare
http://forum.xda -developers.com/

11. Build Android From Source
http://xda -university.com/as -a-developer/getting -started -building -android -from –
source

12. I/O Scheduler Storage
http://forum.xda -developers.com/showpost.php?p=58807943&postcount=85

Similar Posts