Cum să DIY Port TWRP pentru Android

, puteți încerca să lucrați cu un copac mai mic, cum ar fi acesta Minimal Manifest TWRP . Cu toate acestea, pot exista situații în care veți avea nevoie de mai multe repozite decât permite acest manifest.



Notă majoră înainte de compilare: dacă adăugați sau modificați orice steaguri, va trebui să faceți curățenie (sau să faceți clobber) înainte de recompilare, altfel modificările steagului dvs. nu vor fi incluse!

După ce aveți codul sursă TWRP, trebuie să schimbăm câteva dintre steagurile de construire pentru dispozitivul dvs. specific. Găsiți BoardConfig.mk pentru dispozitivul dvs. - de obicei, acesta va fi găsit în dispozitive / producător / nume de cod (de exemplu, dispozitive / lge / hammerhead / BoardConfig.mk)



Configurarea plăcii trebuie să includă arhitectura și setările platformei - acestea sunt de obicei deja incluse dacă folosiți configurația dispozitivului altcuiva. Dar dacă ți-ai creat propriul, va trebui să le adaugi. Acest lucru se datorează faptului că, fără acestea, boot-ul de recuperare poate fi separat și va clipi sigla TeamWin pe ecran în mod repetat.



Steagurile ar trebui să fie plasate în partea de jos a BoardConfig.mk, sub titlul #twrp



Pentru toate dispozitive, trebuie să instruiți TWRP ce temă să utilizați. Steagul TW_THEME este utilizat în locul steagului DEVICE_RESOLUTION mai vechi, ceea ce înseamnă că TWRP folosește acum scalarea pentru a întinde orice temă.

Opțiunile dvs. sunt: ​​portrait_hdpi, portrait_mdpi, landscape_hdpi, landscape_mdpi și watch_mdpi. Pentru modul portret, cel mai probabil veți dori tema HDPI de 720 × 1280 sau mai mult, dar pentru dispozitivele peisaj mergeți cu 1280 × 720 și mai sus.

Deci, secțiunea steagului de construire + steagul temei ar trebui să arate astfel:



#twrp

TW_THEME: = portrait_hdpi

Câteva steaguri de construcție suplimentare pe care doriți să le includeți în această secțiune (credite pentru forumurile XDA):

  • RECOVERY_SDCARD_ON_DATA: = adevărat (acest lucru permite manipularea corectă a / datelor / suporturilor de stocare pe dispozitivele care au acest folder pentru stocare (majoritatea Fagure și dispozitive care au fost livrate inițial cu ICS, cum ar fi Galaxy Nexus) Totuși, acest semnal nu este necesar pentru aceste tipuri de dispozitive. nu definiți acest semnal și, de asemenea, nu includeți referințe la / sdcard, / internal_sd, / internal_sdcard sau / emmc în fstab-ul dvs., atunci vom presupune automat că dispozitivul utilizează stocare emulată.)
  • BOARD_HAS_NO_REAL_SDCARD: = adevărat - dezactivează lucruri precum partiționarea cardului SD și vă poate economisi spațiu dacă TWRP nu se potrivește în patiunea de recuperare
  • TW_NO_BATT_PERCENT: = true - dezactivează afișarea procentului de baterie pentru dispozitivele care nu o acceptă corect
  • TW_CUSTOM_POWER_BUTTON: = 107 - personalizează maparea butonului de pornire pentru ecranul de blocare
  • TW_NO_REBOOT_BOOTLOADER: = true - elimină butonul de repornire a încărcătorului din meniul de repornire
  • TW_NO_REBOOT_RECOVERY: = true - elimină butonul de recuperare a repornirii din meniul de repornire
  • RECOVERY_TOUCHSCREEN_SWAP_XY: = true - schimbă maparea atingerilor între axa X și Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = true - întoarce valorile ecranului tactil pe axa y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = true - răstoarnă valorile ecranului tactil pe axa x
  • TWRP_EVENT_LOGGING: = true - permite înregistrarea evenimentelor tactile pentru a ajuta la depanarea problemelor legate de ecranul tactil (nu lăsați acest lucru activat pentru o versiune - vă va completa fișierul jurnal foarte repede)
  • BOARD_HAS_FLIPPED_SCREEN: = true - întoarce ecranul cu capul în jos pentru ecranele care au fost montate cu capul în jos

Semnalizări de construcție suplimentare pot fi găsite prin parcurgerea fișierelor Android.mk din sursa de recuperare, dar de obicei nu sunt utilizate, așa că nu are rost să le documentăm.

Folosind Recovery.Fstab

TWRP 2.5 și versiuni ulterioare acceptă noi funcții de recuperare.fstab - în special capacitatea de a extinde funcțiile de backup / restaurare ale TWRP. Nu este nevoie să adăugați steaguri fstab, deoarece majoritatea partițiilor vor fi gestionate automat.

TWRP acceptă doar fstabs v2 în versiunea 3.2.0 și versiuni ulterioare - în versiunile mai vechi ale TWRP, va trebui să utilizați vechiul format al fstab. Iată un exemplu de TWRP fstab pentru un Galaxy S4:

Pentru a maximiza compatibilitatea cu arborele dvs. particular de construire, puteți crea un twrp.fstab și puteți utiliza PRODUCT_COPY_FILES pentru a plasa în> etc> twrp.fstab.

Când TWRP lansează și găsește twrp.fstab în ramdisk, îl va redenumi în> etc> recovery.fstab.bak - practic înlocuiește fstab-ul de pe dispozitiv cu TWRP fstab, care extinde compatibilitatea.

Exemplu de cod:

PRODUCT_COPY_FILES + = device / lge / hammerhead / twrp.fstab: recovery> root> etc> twrp.fstab

Fstab-ul din TWRP poate conține câteva „steaguri” pentru fiecare partiție listată în fstab.

Aceste steaguri sunt adăugate până la capăt a listării partițiilor în fstab, separate prin spațiu alb / spații / file. Steagul va afecta doar acea partiție, dar nu și altele. Steagurile sunt separate prin punct și virgulă. Iată câteva exemple de cod:

Deci, să examinăm acest lucru puțin câte puțin. Steagul de aici va da un nume afișat de „Micro SDcard”. Steagul wipeingui va face această partiție disponibilă pentru ștergere în meniul Advanced Wipe. Semnalizatorul detașabil indică faptul că această partiție nu este întotdeauna prezentă, ceea ce va împiedica afișarea erorilor de montare.

O listă completă de steaguri (credite către TeamWin) :

  • amovibil - indică faptul că partiția poate să nu fie prezentă împiedicând afișarea erorilor de montare în timpul bootării
  • depozitare - indică faptul că partiția poate fi utilizată ca stocare, ceea ce face ca partiția să fie disponibilă ca stocare pentru backup, restaurare, instalări zip etc.
  • setări depozitare - ar trebui setată o singură partiție ca stocare a setărilor, această partiție este utilizată ca locație pentru stocarea fișierului de setări al TWRP
  • șters - indică faptul că partiția poate fi ștearsă de sistemul back-end, dar nu poate fi listată în GUI pentru ștergere de către utilizator
  • userrmrf - suprascrie tipul de format normal de ștergere și permite doar ștergerea partiției folosind comanda rm -rf
  • backup = - trebuie să fie urmat de semnul egal, deci backup = 1 sau backup = 0, 1 indică faptul că partiția poate fi listată în lista de backup / restaurare în timp ce 0 asigură că această partiție nu va apărea în lista de backup.
  • wipeingui - face ca partiția să apară în GUI pentru a permite utilizatorului să o selecteze pentru ștergere în meniul avansat de ștergere
  • ștergereafacerii - partiția va fi ștearsă în timpul unei resetări din fabrică
  • ignoreblkid - blkid este utilizat pentru a determina ce sistem de fișiere este utilizat de TWRP, acest semnal va face ca TWRP să sară / ignore rezultatele blkid și să utilizeze sistemul de fișiere specificat numai în fstab
  • retainlayoutversion - face ca TWRP să păstreze fișierul .layoutversion în / date pe dispozitive precum Sony Xperia S, care folosește / date / media, dar are încă o partiție separată / sdcard
  • link simbolic = - determină TWRP să ruleze o comandă de montare suplimentară la montarea partiției, utilizată în general cu / data / media pentru a crea / sdcard
  • afişa = - setează un nume de afișare pentru partiția pentru listare în GUI
  • nume de stocare = - setează un nume de stocare pentru partiția pentru listare în lista de stocare GUI
  • nume de rezervă = - setează un nume de rezervă pentru partiția pentru listare în lista de backup / restaurare GUI
    lungime = - utilizată de obicei pentru a rezerva spațiu gol la sfârșitul partiției / date pentru stocarea cheii de decriptare atunci când este prezentă criptarea completă a dispozitivului Android, dacă nu setați acest lucru se poate ajunge la incapacitatea de a cripta dispozitivul
  • canencryptbackup = - 1 sau 0 pentru activare / dezactivare, face ca TWRP să cripteze copierea de rezervă a acestei partiții dacă utilizatorul alege criptarea (se aplică numai copiilor de rezervă tar, nu imaginilor)
  • userdataencryptbackup = - 1 sau 0 pentru activare / dezactivare, face ca TWRP să cripteze doar porțiunea de date utilizator a acestei partiții, anumite subplanete precum / data / app nu ar fi criptate pentru a economisi timp
  • subpartitionof = - trebuie să fie succedat de semnul egal și calea partiției din care este o subpartiție. O subpartiție este tratată ca „parte” a partiției principale, astfel încât, de exemplu, TWRP face din / date automat o subpartiție de / date. Aceasta înseamnă că / datadata nu va apărea în listele GUI, dar / datadata ar fi șterse, făcute copii de siguranță, restaurate, montate și demontate de fiecare dată când aceste operații sunt efectuate pe / data.

Un bun exemplu de utilizare a subpartițiilor îl reprezintă partițiile 3x efs de pe LG Optimus G:

Aceasta agregă toate cele 3 partiții într-o singură intrare „EFS” în interfața grafică TWRP, permițând tuturor celor trei să fie copiate și restaurate împreună sub o singură intrare.

Cu TWRP 3.2.0 și mai sus, care folosește V2 Fstab, tu nu este nevoie să adăugați nicio semnalizare de construcție . Suportul V2 Fstab este automat. V2 Fstab acceptă și metacaractere (simbolul *) care pot fi utile pentru carduri USB OTG și micro-SD cu partiții multiple. De asemenea, puteți continua să utilizați formatul V1 Fstab și este complet posibil să utilizați atât tipurile V1, cât și V2 în același Fstab.

De exemplu, iată o linie V1 Fstab cu un wildcard destinat unui USB OTG:

Iată o linie V2 Fstab pentru același dispozitiv care obține același rezultat:

În plus, puteți include etc twrp.flags care utilizează formatul V1 Fstab și pot fi utilizate pentru a suplimenta V2 Fstab cu semnalizatoare TWRP, partiții suplimentare care nu sunt incluse în V2 Fstab sau setări suprasolicitate în V2 Fstab.

De exemplu, un dispozitiv Huawei ar putea avea această fstab V2 în recuperarea etc.

De asemenea, poate include aceste steaguri:

Deci, aici, primele două linii din TWRP.Flags vor adăuga partițiile Boot și Recovery, care nu erau prezenți în V2 Fstab. Apoi, linia / cust din TWRP.flags va instrui TWRP să permită utilizatorului final să facă backup partiției (cust) și să îi dea un nume afișat.

Partiția / misc este prezentă în twrp.flags, iar partiția / oeminfo instruiește TWRP să permită, de asemenea, copiile de rezervă și să îi dea un nume afișat.

Avem nevoie de linia / data, deoarece multe dispozitive Huawei sunt criptate, dar folosim binare speciale Huawei - astfel, folosim binare Huawei pentru a decripta dispozitivul automat în modul de recuperare. Deci aici linia / data va instrui TWRP să folosească / dev / block / dm -0 și nu / dev / block / bootdevice / by-name / userdata, care este de obicei folosit pentru montarea „corectă”.

În cele din urmă există / system_image, astfel încât TWRP va include o opțiune pentru a crea o imagine de sistem în meniurile Backup și Restore.

Github-ul oficial TeamWin ar trebui să conțină, de asemenea, ultimele exemple de arbori de dispozitive pentru dispozitive care au un port oficial TWRP. Github-ul TeamWin poate fi găsit AICI .

După ce Omni sau CM au fost sincronizate și ați configurat semnalizatoarele TWRP, ar trebui să creați o sursă ./build/envsetup.sh

Și veți dori să „prânziți” dispozitivul, astfel încât să puteți face ceva de genul „lunch omni_hammerhead.eng”.

După un prânz reușit, majoritatea dispozitivelor vor folosi această comandă:

Trebuie să înlocuiți # în –j # cu numărul de bază +1. Deci, dacă aveți un nucleu dual este –j3, un quadcore va fi –j5 etc. Înlocuiți # cu numărul de nucleu +1, deci dacă aveți un nucleu dual este -j3 și un quad core devine -j5 etc.

De asemenea, dispozitivele tipice Samsung vor necesita acest lucru:

Acest lucru se datorează faptului că majoritatea dispozitivelor Samsung includ recuperarea ca un disc ram suplimentar în boot, în loc de pe o partiție de recuperare separată (pe care o folosesc majoritatea celorlalte dispozitive).

Până acum, ar trebui să aveți TWRP compilat pentru dispozitivul dvs. și, sperăm, funcționează într-un mediu de emulator. Mai întâi ar trebui să testați întotdeauna portul TWRP într-un mediu de emulator, astfel încât să nu riscați să vă opriți dispozitivul.
Descărcați acest set de fișiere de configurare a dispozitivului.

Compilați o imagine de recuperare folosind acele fișiere ale dispozitivului. În SDK-ul Android, faceți clic pe Instrumente -> Gestionați AVD-urile. Faceți clic pe Nou. Configurați-l după cum urmează:

Apoi faceți clic pe OK.

După ce aveți AVD-ul și imaginea de recuperare, puteți porni TWRP în emulator navigând în folderul Android-sdk / tools și rulați această comandă:

Rețineți că ADB nu funcționează imediat. Aproximativ 10 - 15 secunde după ce TWRP finalizează pornirea, ADB va fi online. Pornim ADB prin init.rc, deci chiar dacă TWRP nu reușește să pornească din cauza unui fel de eroare de cod pe care ați făcut-o, ADB ar trebui să funcționeze în continuare. Bucurați-vă!

Dispozitive TWRP și A / B (credite către TeamWin):

Din punct de vedere TWRP, dispozitivele A / B nu sunt foarte diferite de dispozitivele obișnuite, dar dezvoltatorii par să fie timizi în ceea ce privește lucrul pe aceste dispozitive. Voi încerca să fac puțină lumină asupra acestui subiect și sperăm că acest lucru va servi drept ghid pentru portarea TWRP pe dispozitive A / B.

În primul rând, să înțelegem ce este un dispozitiv A / B și cum este diferit. Dispozitivele A / B au duplicate ale mai multor partiții de pe dispozitiv. Un dispozitiv A / B are 2xpartiții sistem, 2x partiții de boot, 2x partiții furnizor, 2x partiții modem / firmware, etc. Se utilizează un singur slot la un moment dat. În timpul pornirii timpurii, primele etape ale bootloaderului citesc o cantitate mică de date numite BCB sau Bootloader Control Block și decid dacă să pornească partițiile A sau partițiile B. Când este disponibilă o actualizare OTA, datele din slotul activ sunt copiate din slotul inactiv și corecționate / actualizate. De exemplu, dacă vă aflați în prezent în slotul A, dispozitivul dvs. va descărca actualizarea și ar copia partiția de sistem existentă din slotul A și o va corela / actualiza cu noile actualizări în slotul B. Odată ce copierea și actualizarea sunt complete, BCB este actualizat și dispozitivul repornește utilizând slotul B. Data viitoare când este disponibilă o actualizare, partiția de sistem din slotul B este copiată în slotul A și actualizată, BCB se actualizează și repornim în slotul A. Când vizualizați partiții pe dispozitiv, veți vedea așa ceva:

Rețineți partițiile de pornire duală, sistem și furnizor din lista de mai sus, dar numai o partiție de date utilizator.

Deși nu există nicio cerință din punct de vedere tehnic de care sunt conștient, toate dispozitivele A / B livrate până acum nu au o partiție de recuperare separată. În schimb, imaginea de încărcare conține recuperarea în discul său ram. Important este să știți că acum imaginea de boot conține și recuperarea. Pentru completitudine, partiția de sistem este un sistem de fișiere rădăcină complet. În timpul pornirii, dacă kernelului i se spune să pornească la recuperare, acesta va extrage discul ram din partiția de pornire. Dacă kernel-ul nu este informat de bootloader să pornească la recuperare, atunci kernel-ul va monta partiția de sistem corespunzătoare (A sau B) deoarece partiția de sistem este un sistem de fișiere rădăcină complet. Aceasta înseamnă că partiția de sistem de pe aceste dispozitive este montată pe / în loc de pe / sistem și partiția de sistem conține toate fișierele care ar fi fost în mod normal în ramdisk-ul de imagine de boot și într-un / dosar de sistem.

Din punct de vedere TWRP, trebuie să faceți 3 lucruri pentru un dispozitiv A / B. Mai întâi, trebuie să setați

Cod:

În cele din urmă, odată ce ați intrat în TWRP, probabil că veți dori să vă asigurați că bootctl hal-info răspunde corect fără erori. De obicei, binarul bootctl necesită o bibliotecă proprietară sau chiar câteva servicii pentru a funcționa corect. Dacă bootctl nu funcționează corect, atunci nu veți putea schimba corect sloturile din TWRP.

Pe lângă setare

Cod:

AB_OTA_UPDATER: = adevărat

poate doriți să setați și:

Cod:

BOARD_USES_RECOVERY_AS_BOOT: = adevărat

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = adevărat

Dacă stabiliți

Cod:

BOARD_USES_RECOVERY_AS_BOOT: = adevărat

apoi faceți recoveryimage nu va mai funcționa și în schimb va trebui să faceți bootimage. Nu recomand să setați niciunul dintre aceste stegulețe pentru arborii de construire numai TWRP. Aceste semnalizări vor fi probabil necesare pentru dezvoltatorii care construiesc ROM-uri complete pentru dispozitive A / B.

Instalarea / intermitent TWRP pe dispozitive A / B:

Deoarece toate dispozitivele A / B cunoscute nu au o partiție de recuperare separată, va trebui în cele din urmă să blocați TWRP pe partiția de boot. Pe Pixel 1 și 2, folosim boot boot rapid pentru a porni temporar TWRP fără să clipească TWRP. Furnizăm apoi un zip pentru a permite utilizatorilor să blocheze TWRP pe ambele sloturi. Puteți descărca una dintre aceste fermoare de pe site-ul nostru web și puteți actualiza fișierul zip după cum este necesar pentru a vă sprijini dispozitivele. În cele din urmă, vom adăuga instrumente la TWRP pentru a permite utilizatorilor să blocheze recuperări pe aceste dispozitive fără a fi nevoie să utilizeze fermoare.

Recent, am lucrat la Razer Phone. Din păcate, telefonul Razer nu acceptă boot-ul rapid. În schimb, utilizatorii trebuie să își determine slotul de boot activ în prezent utilizând

Cod:

pentru a intra în TWRP. Odată ajunși în TWRP, pot accesa pagina de repornire și reveni la slotul inițial activ, pot face o copie de rezervă, apoi pot instala TWRP. Utilizarea slotului inactiv permite utilizatorilor să obțină o copie de rezervă bună și nemodificată a dispozitivului lor înainte de a instala TWRP.

Note Aditionale:

Dacă doriți să obțineți TWRP acceptat oficial pentru dispozitivul dvs. astfel încât să poată fi instalat automat cu aplicația TWRP și chiar doriți să faceți acest lucru, astfel încât ceilalți proprietari ai aceluiași dispozitiv să se poată bucura de asistența oficială TWRP și este un lucru frumos de făcut, va trebui să trimiteți următoarele informații la TeamWin:

  1. Fișiere de configurare a dispozitivului pentru a compila TWRP de la sursă pentru dispozitivul dvs. - nu reambalați manual un recovery.img , trebuie să o compileze din sursă.
  2. După ce TeamWin creează o copie a TWRP, aceasta vă va trimite spre validare - odată ce ați validat-o, TeamWin va crea o imagine de lucru pentru dispozitivul dvs. și o va adăuga în aplicația oficială TWRP.
Citește 13 minute