Как да си направиш порт TWRP за Android

, можете да опитате да работите с по-малко дърво, като това Минимален манифест TWRP . Възможно е обаче да има ситуации, при които ще са ви необходими повече репо сделки, отколкото позволява този манифест.



Основна бележка преди компилиране: Ако добавите или промените някакви флагове, ще трябва да направите чист (или да направите clobber) преди повторно компилиране, в противен случай вашите промени на флага няма да бъдат включени!

След като имате изходния код на TWRP, трябва да променим някои от флаговете за изграждане за вашето конкретно устройство. Намерете BoardConfig.mk за вашето устройство - обикновено това ще бъде намерено в устройства / производител / кодово име (например устройства / lge / чук / BoardConfig.mk)



Конфигурацията на платката трябва да включва архитектура и настройки на платформата - те обикновено са вече включени ако използвате конфигурация на чуждо устройство. Но ако сте създали свой собствен, ще трябва да ги добавите. Това е така, защото без тях зареждането за възстановяване може да се подразбира и то просто ще мига многократно логото на TeamWin на вашия екран.



Флаговете трябва да се поставят в долната част на BoardConfig.mk, под заглавие #twrp



За всичко устройства, трябва да инструктирате TWRP коя тема да се използва. Флагът TW_THEME се използва вместо по-стария флаг DEVICE_RESOLUTION, което означава, че TWRP вече използва мащабиране, за да разтегне всяка тема.

Вашите опции са: portrait_hdpi, portrait_mdpi, landscape_hdpi, landscape_mdpi и watch_mdpi. За портретен режим най-вероятно ще искате hdpi темата от 720 × 1280 и нагоре, но за пейзажни устройства отидете с 1280 × 720 и нагоре.

Така че вашият раздел за флаг за изграждане + флаг на темата трябва да изглежда така:



#twrp

TW_THEME: = портрет_hdpi

Някои допълнителни флагове за изграждане, които искате да включите в този раздел (кредити за форуми на XDA):

  • RECOVERY_SDCARD_ON_DATA: = вярно (това дава възможност за правилна обработка на / данни / носители на устройства, които имат тази папка за съхранение (повечето пчелни пити и устройства, които първоначално са доставени с ICS като Galaxy Nexus) Този флаг обаче не е необходим за тези типове устройства. не дефинирайте този флаг, а също така не включвайте никакви препратки към / sdcard, / internal_sd, / internal_sdcard или / emmc във вашия fstab, тогава автоматично ще приемем, че устройството използва емулирано хранилище.)
  • BOARD_HAS_NO_REAL_SDCARD: = true - деактивира неща като разделяне на SD карта и може да ви спести малко място, ако TWRP не се побира във вашата папка за възстановяване
  • TW_NO_BATT_PERCENT: = true - деактивира показването на процента на батерията за устройства, които не го поддържат правилно
  • TW_CUSTOM_POWER_BUTTON: = 107 - персонализира картите на бутона за захранване за заключения екран
  • TW_NO_REBOOT_BOOTLOADER: = true - премахва бутона за рестартиране на буутлоудъра от менюто за рестартиране
  • TW_NO_REBOOT_RECOVERY: = true - премахва бутона за възстановяване на рестартирането от менюто за рестартиране
  • RECOVERY_TOUCHSCREEN_SWAP_XY: = вярно - размества картографирането на докосванията между оста X и Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = вярно - преобръща стойностите на сензорния екран на оста y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = вярно - преобръща стойностите на сензорния екран на х ос
  • TWRP_EVENT_LOGGING: = вярно - позволява регистриране на събитие за докосване, за да помогне за отстраняване на грешки при проблемите със сензорния екран (не оставяйте това включено за издание - това ще запълни вашия регистрационен файл много бързо)
  • BOARD_HAS_FLIPPED_SCREEN: = true - обръща екрана с главата надолу за екрани, които са били монтирани с главата надолу

Допълнителни флагове за изграждане могат да бъдат намерени чрез прелистване през файловете на Android.mk в източника за възстановяване, но те обикновено не се използват, така че няма смисъл да ги документирате.

Използване на Recovery.Fstab

TWRP 2.5 и по-нова версия има поддръжка за нови функции recovery.fstab - по-специално възможността за разширяване на функциите за архивиране / възстановяване на TWRP. Не е необходимо да добавяте fstab флагове, защото повечето дялове ще бъдат обработвани автоматично.

TWRP поддържа само v2 fstabs във версия 3.2.0 и по-нова - в по-старите версии на TWRP ще трябва да използвате стария формат на fstab. Ето пример за TWRP fstab за Galaxy S4:

За да увеличите максимално съвместимостта с вашето конкретно дърво за изграждане, можете да създадете twrp.fstab и да използвате PRODUCT_COPY_FILES, за да поставите в> и т.н.> twrp.fstab.

Когато TWRP стартира и намери twrp.fstab в рамдиска, той ще го преименува на> etc> recovery.fstab.bak - основно замества fstab от вашето устройство с TWRP fstab, което разширява съвместимостта.

Примерен код:

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

Fstab в TWRP може да съдържа някои „флагове“ за всеки дял, изброен в fstab.

Тези знамена са добавени до края на списъка с дялове във fstab, разделен с празно пространство / интервали / раздели. Флагът ще засегне само този дял, но не и други. Флаговете са разделени с точка и запетая. Ето няколко примерни кода:

Нека разгледаме това малко по малко. Флагът тук ще покаже име на „Micro SDcard“. Флагът wipeingui ще направи този дял достъпен за изтриване в менюто Advanced Wipe. Сменяемият флаг показва, че този дял не винаги присъства, което ще предотврати показването на грешки при монтирането.

Пълен списък със знамена (кредити за TeamWin) :

  • подвижен - показва, че дялът може да не присъства, предотвратявайки показването на грешки при монтажа по време на зареждане
  • съхранение - показва, че дялът може да се използва като място за съхранение, което прави дяла достъпен като място за архивиране, възстановяване, инсталиране на zip и т.н.
  • настройки за съхранение - само един дял трябва да бъде зададен като съхранение на настройките, този дял се използва като място за съхраняване на файла с настройки на TWRP
  • може да се изтрива - указва, че дялът може да бъде изтрит от системата, но не може да бъде изброен в GUI за изтриване от потребителя
  • userrmrf - замества нормалния формат на изтриване и позволява изтриването на дяла само с помощта на командата rm -rf
  • backup = - трябва да бъде наследен от знака за равенство, така че backup = 1 или backup = 0, 1 показва, че дялът може да бъде включен в списъка за архивиране / възстановяване, докато 0 гарантира, че този дял няма да се покаже в списъка за архивиране.
  • wipeingui - кара дялът да се показва в GUI, за да позволи на потребителя да го избере за изтриване в разширеното меню за изтриване
  • изтриване на фабрично нулиране - дялът ще бъде изтрит по време на фабрично нулиране
  • ignoreblkid - blkid се използва за определяне на файловата система, която се използва от TWRP, този флаг ще накара TWRP да пропусне / игнорира резултатите от blkid и да използва файловата система, посочена само в fstab
  • retainlayoutversion - кара TWRP да запази файла .layoutversion в / data на устройства като Sony Xperia S, които използват / data / media, но все още имат отделен / sdcard дял
  • символна връзка = - кара TWRP да изпълнява допълнителна команда за монтиране при монтиране на дяла, обикновено използвана с / data / media за създаване / sdcard
  • дисплей = - задава име на дисплей за дяла за изброяване в GUI
  • име на съхранение = - задава име на съхранение за дяла за изброяване в списъка за съхранение на GUI
  • резервно име = - задава резервно име за дяла за включване в списъка за архивиране / възстановяване на GUI
    length = - обикновено се използва за запазване на празно място в края на дяла / data за съхраняване на ключа за дешифриране, когато е налице пълното криптиране на устройството на Android, ако не зададете това може да доведе до невъзможност за криптиране на устройството
  • canencryptbackup = - 1 или 0 за активиране / деактивиране, прави TWRP криптиране на архива на този дял, ако потребителят избере криптиране (важи само за резервни копия на tar, а не за изображения)
  • userdataencryptbackup = - 1 или 0 за активиране / деактивиране, кара TWRP да шифрова само частта от потребителските данни на този дял, някои подфулди като / data / app няма да бъдат криптирани, за да се спести време
  • подразделяне на = - трябва да бъде наследен от знака за равенство и пътя на дяла, на който е подразделение. Подразделението се третира като „част“ от основния дял, така че например TWRP автоматично прави / datadata подраздел на / data. Това означава, че / datadata няма да се показват в листингите на GUI, но / datadata ще бъдат изтрити, архивирани, възстановени, монтирани и демонтирани по всяко време, когато тези операции се извършват с / data.

Добър пример за използването на подраздели са 3x efs дяловете на LG Optimus G:

Това обединява всичките 3 дяла в един “EFS” запис в TWRP GUI, позволяващ и трите да бъдат архивирани и възстановени заедно под един запис.

С TWRP 3.2.0 и по-нова версия, която използва V2 Fstab, вие не е необходимо да добавяте никакви флагове за изграждане . Поддръжката на V2 Fstab е автоматична. V2 Fstab също поддържа заместващи символи (символът *), които могат да бъдат полезни за USB OTG и micro-SD карти с множество дялове. Можете също така да продължите да използвате формата V1 Fstab и е напълно възможно да използвате и двата типа V1 и V2 в един и същ Fstab.

Например, тук е линия V1 Fstab с заместващ символ, предназначен за USB OTG:

Ето линия V2 Fstab за същото устройство, което постига същия резултат:

Освен това може да включите и т.н.

Например, устройство на Huawei може да има този V2 fstab в etc recovery.fstab:

Може да включва и тези флагове:

И така, първите два реда в TWRP.Flags ще добавят дяловете Boot и Recovery, които не присъстваха във V2 Fstab. След това линията / cust в TWRP.flags ще инструктира TWRP да позволи на крайния потребител да архивира (cust) дяла и да му даде име за показване.

Разделът / misc присъства в twrp.flags, а дялът / oeminfo възлага на TWRP също да позволи архивиране и даване на име за показване.

Нуждаем се от линия за данни, защото много устройства на Huawei са криптирани, но използваме специални двоични файлове на Huawei - по този начин използваме двоичните файлове на Huawei, за да декриптираме устройството автоматично в режим на възстановяване. Така че тук / data data ще инструктира TWRP да използва / dev / block / dm -0, а не / dev / block / bootdevice / by-name / userdata, което обикновено се използва за „правилно” монтиране ”.

Накрая има / system_image, така че TWRP ще включва опция за създаване на системен образ в менютата за архивиране и възстановяване.

Официалният TeamWin github трябва също да съдържа най-новите примерни дървета на устройства за устройства, които имат официален порт TWRP. Github на TeamWin може да бъде намерен ТУК .

След като Omni или CM са синхронизирани и сте настроили своите TWRP флагове, трябва да създадете източник. / Build/envsetup.sh

И вие ще искате да „обядвате“ устройството, за да можете да направите нещо като „обяд omni_hammerhead.bg“.

След успешен обяд повечето устройства ще използват тази команда:

Трябва да замените # в –j # с броя на ядрата +1. Така че, ако имате двойно ядро, това е –j3, квадроцикълът ще бъде –j5 и т.н.

Също така, типичните устройства на Samsung ще изискват това:

Това е така, защото повечето устройства на Samsung включват възстановяването като допълнителен RAM диск в багажника, вместо на отделен дял за възстановяване (който повечето други устройства използват).

Досега трябва да имате компилиран TWRP за вашето устройство и се надяваме да работи в среда на емулатор. Винаги трябва първо да тествате своя TWRP порт в среда на емулатор, така че да не рискувате да пречи на вашето устройство.
Изтеглете този набор от конфигурационни файлове на устройството.

Компилирайте изображение за възстановяване, като използвате тези файлове на устройството. В Android SDK кликнете върху Инструменти -> Управление на AVD. Щракнете върху New. Настройте го по следния начин:

След това щракнете върху OK.

След като имате AVD и вашето изображение за възстановяване, можете да стартирате TWRP в емулатора, като прегледате папката си android-sdk / tools и изпълните тази команда:

Имайте предвид, че ADB не работи веднага. Около 10 до 15 секунди след като TWRP завърши зареждането, ADB ще се включи онлайн. Стартираме ADB чрез init.rc, така че дори ако TWRP не успее да се зареди поради някаква грешка в кода, която може да сте допуснали, ADB все пак трябва да работи. Наслади се!

TWRP и A / B устройства (кредити за TeamWin):

От гледна точка на TWRP, A / B устройствата не се различават много от обикновените устройства, но разработчиците изглежда са срамежливи да работят на тези устройства. Ще се опитам да хвърля малко светлина по този въпрос и се надявам, че това ще послужи като ръководство за пренасяне на TWRP към A / B устройства.

Първо, нека разберем какво е A / B устройство и как е различно. A / B устройствата имат дубликати на много дялове на устройството. A / B устройство има 2 пъти системни дялове, 2 пъти дялове за зареждане, 2 пъти дялове на доставчици, 2 пъти дялове за модем / фърмуер и т.н. Само един слот се използва наведнъж. По време на ранното зареждане първите етапи на буутлоудъра четат малко количество данни, наречени BCB или Bootloader Control Block, и решават дали да стартират A дяловете или B дяловете. Когато е налична актуализация на OTA, данните от активния слот се копират от неактивния слот и се коригират / актуализират. Например, ако в момента сте на слот A, вашето устройство ще изтегли актуализацията и ще копира съществуващия системен дял от слот A и ще го закърпи / актуализира с новите актуализации в слот B. След като копирането и актуализирането приключи, BCB се актуализира и устройството се рестартира с помощта на слот B. Следващия път, когато е налична актуализация, системният дял в слот B се копира в слот A и се актуализира, BCB се актуализира и рестартираме в слот A. Когато преглеждаме дялове на устройството, ще видите нещо подобно:

Обърнете внимание на двойните дялове за зареждане, системата и доставчика в горния списък, но само един дял на потребителски данни.

Въпреки че технически няма изискване, което да съм наясно, всички A / B устройства, доставени до момента, нямат отделен дял за възстановяване. Вместо това, изображението за зареждане съдържа възстановяването в дисковия си диск. Важното е да знаете, че изображението за зареждане сега също съдържа възстановяването. За пълнота системният дял е пълна коренна файлова система. По време на зареждане, ако на ядрото бъде казано да се стартира до възстановяване, то ще извлече диска в диска за зареждане. Ако на ядрото не е казано от буутлоудъра да стартира до възстановяване, тогава ядрото ще монтира подходящия системен дял (A или B), тъй като системният дял е пълна коренна файлова система. Това означава, че системният дял на тези устройства е монтиран към / вместо към / система и системният дял съдържа всички файлове, които обикновено биха били в диска за стартиране на изображението и / системната подпапка.

От гледна точка на TWRP има 3 неща, които трябва да направите за A / B устройство. Първо, трябва да настроите

Код:

И накрая, след като влезете в TWRP, вероятно ще искате да се уверите, че bootctl hal-info отговаря правилно, без грешки. Обикновено двоичният файл bootctl изисква собствена библиотека или дори няколко услуги, за да работи правилно. Ако bootctl не работи правилно, тогава няма да можете да превключвате слотовете в TWRP правилно.

В допълнение към настройката

Код:

AB_OTA_UPDATER: = вярно

може да искате да зададете:

Код:

BOARD_USES_RECOVERY_AS_BOOT: = вярно

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = вярно

Ако зададете

Код:

BOARD_USES_RECOVERY_AS_BOOT: = вярно

след това направете recoveryimage вече няма да работи и вместо това ще трябва да направите bootimage. Не препоръчвам да задавате нито един от тези флагове за дървета за изграждане само на TWRP. Тези флагове вероятно ще са необходими за разработчиците, изграждащи пълни ROM за A / B устройства.

Инсталиране / мигане на TWRP на A / B устройства:

Тъй като всички известни A / B устройства нямат отделен дял за възстановяване, в крайна сметка ще трябва да мигате TWRP към дяла за зареждане. На Pixel 1 и 2 използваме бързо зареждане за временно зареждане на TWRP, без да мига TWRP. След това доставяме цип, който позволява на потребителите да мигат TWRP и към двата слота. Можете да изтеглите един от тези ципове от нашия уебсайт и да актуализирате ципа, колкото е необходимо, за да поддържате вашите устройства. В крайна сметка ще добавим инструменти към TWRP, за да позволим на потребителите да мигат възстановявания на тези устройства, без да е необходимо да използват ципове.

Наскоро работех по Razer Phone. За съжаление Razer Phone не поддържа бързо зареждане. Вместо това потребителите трябва да определят своя активен в момента слот за зареждане с помощта

Код:

за да влезете в TWRP. Веднъж в TWRP, те могат да отидат на страницата за рестартиране и да се върнат към първоначално активния си слот, да направят резервно копие и след това да инсталират TWRP. Използването на неактивния слот позволява на потребителите да получат добро, немодифицирано архивиране на своето устройство, преди да инсталират TWRP.

Допълнителни бележки:

Ако искате да получите TWRP официално се поддържа за вашето устройство за да може да се инсталира автоматично с приложението TWRP и наистина искате да направите това, така че другите собственици на същото устройство да могат да се насладят на официалната поддръжка на TWRP и това е хубавото нещо, трябва да изпратите следната информация на TeamWin:

  1. Конфигурационни файлове на устройството за компилиране на TWRP от източника за вашето устройство - не препакетирайте recovery.img на ръка , те трябва да го компилират от източник.
  2. След като TeamWin създаде копие на TWRP, те ще ви го изпратят за валидиране - след като го потвърдите, TeamWin ще изгради работно изображение за вашето устройство и ще го добави към официалното приложение TWRP.
13 минути четене