Как самостоятельно портировать TWRP для Android

, вы можете попробовать работать с меньшим деревом, например с этим Минимальный манифест TWRP . Однако могут возникнуть ситуации, когда вам понадобится больше репозиториев, чем позволяет этот манифест.



Важное примечание перед компиляцией: если вы добавляете или изменяете какие-либо флаги, вам нужно будет сделать clean (или сделать clobber) перед перекомпиляцией, иначе ваши изменения флагов не будут включены!

После того, как у вас есть исходный код TWRP, нам нужно изменить некоторые флаги сборки для вашего конкретного устройства. Найдите BoardConfig.mk для своего устройства - обычно его можно найти в устройства / производитель / кодовое имя (например, devices / lge / hammerhead / 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: = portrait_hdpi

Некоторые дополнительные флаги сборки, которые вы захотите включить в этот раздел (спасибо форумам XDA):

  • RECOVERY_SDCARD_ON_DATA: = true (это обеспечивает правильную обработку / data / media на устройствах, которые имеют эту папку для хранения (большинство Honeycomb и устройств, которые изначально поставлялись с 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: = true - меняет местами отображение касаний между осями X и Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = true - переворачивает значения сенсорного экрана по оси Y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = true - переворачивает значения сенсорного экрана по оси x
  • TWRP_EVENT_LOGGING: = true - включает регистрацию событий касания, чтобы помочь отладить проблемы с сенсорным экраном (не оставляйте это включенным для выпуска - это очень быстро заполнит ваш файл журнала)
  • 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 для помещения в> etc> twrp.fstab.

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

Пример кода:

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
  • протереть - указывает, что раздел может быть очищен серверной системой, но не может быть указан в графическом интерфейсе пользователя для очистки пользователем.
  • userrmrf - отменяет обычный формат очистки и позволяет очистить раздел только с помощью команды rm -rf
  • После резервной копии = - должен стоять знак равенства, поэтому резервная копия = 1 или резервная копия = 0, 1 указывает, что раздел может быть указан в списке резервного копирования / восстановления, а значение 0 гарантирует, что этот раздел не будет отображаться в списке резервных копий.
  • Wipeingui - отображает раздел в графическом интерфейсе, чтобы пользователь мог выбрать его для очистки в расширенном меню очистки.
  • wipeduringfactoryreset - раздел будет очищен при сбросе настроек
  • ignoreblkid - blkid используется для определения, какая файловая система используется TWRP, этот флаг заставит TWRP пропускать / игнорировать результаты blkid и использовать только файловую систему, указанную в fstab
  • сохранить - заставляет TWRP сохранять файл .layoutversion в / data на таких устройствах, как Sony Xperia S, которые вроде используют / data / media, но по-прежнему имеют отдельный раздел / sdcard
  • символическая ссылка = - заставляет TWRP запускать дополнительную команду монтирования при монтировании раздела, обычно используется с / data / media для создания / sdcard
  • дисплей = - устанавливает отображаемое имя раздела для отображения в графическом интерфейсе
  • имя хранилища = - устанавливает имя хранилища для раздела для включения в список хранилищ GUI
  • резервное имя = - устанавливает имя резервной копии для раздела для включения в список резервного копирования / восстановления графического интерфейса.
    length = - обычно используется для зарезервирования пустого места в конце раздела / data для хранения ключа дешифрования, когда присутствует полное шифрование устройства Android, отсутствие настройки этого может привести к невозможности зашифровать устройство
  • canencryptbackup = - 1 или 0 для включения / выключения, заставляет TWRP шифровать резервную копию этого раздела, если пользователь выбирает шифрование (применяется только к резервным копиям tar, а не к изображениям)
  • userdataencryptbackup = - 1 или 0 для включения / выключения, заставляет TWRP шифровать только часть пользовательских данных этого раздела, некоторые подзаполнения, такие как / data / app, не будут зашифрованы для экономии времени
  • подраздел = - после него должен стоять знак равенства и путь к разделу, в котором он находится. Подраздел рассматривается как «часть» основного раздела, поэтому, например, TWRP автоматически делает / datadata подразделом / data. Это означает, что / datadata не будет отображаться в списках графического интерфейса пользователя, но / datadata будет стираться, копироваться, восстанавливаться, монтироваться и размонтироваться каждый раз, когда эти операции выполняются с / data.

Хорошим примером использования подразделов являются разделы 3x efs на LG Optimus G:

Это объединяет все 3 раздела в одну запись «EFS» в графическом интерфейсе TWRP, позволяя создавать резервные копии и восстанавливать все три вместе под одной записью.

С 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 для того же устройства, которая дает тот же результат:

Кроме того, вы можете включить etc twrp.flags, которые используют формат V1 Fstab, и их можно использовать для дополнения V2 Fstab с помощью флагов TWRP, дополнительных разделов, не включенных в V2 Fstab, или переопределения настроек в V2 Fstab.

Например, устройство Huawei может иметь этот файл V2 fstab в файле etc recovery.fstab:

В него также могут быть включены следующие флаги:

Итак, первые две строчки в TWRP.Flags добавят разделы Boot и Recovery, которые не присутствовали в V2 Fstab. Затем строка / cust в TWRP.flags проинструктирует TWRP разрешить конечному пользователю создать резервную копию раздела (cust) и дать ему отображаемое имя.

Раздел / misc присутствует в twrp.flags, а раздел / oeminfo указывает TWRP также разрешить резервное копирование и присвоить ему отображаемое имя.

Нам нужна строка / data, потому что многие устройства Huawei зашифрованы, но используют специальные двоичные файлы Huawei - таким образом, мы используем двоичные файлы Huawei для автоматической расшифровки устройства в режиме восстановления. Итак, здесь строка / data будет указывать TWRP использовать / dev / block / dm -0, а не / dev / block / bootdevice / by-name / userdata, который обычно используется для «правильного» монтажа ».

Наконец, есть / system_image, так что TWRP будет включать возможность создания образа системы в меню резервного копирования и восстановления.

Официальный github TeamWin также должен содержать последние примеры деревьев устройств для устройств с официальным портом TWRP. TeamWin можно найти на github ВОТ .

После того, как Omni или CM были синхронизированы и вы установили флаги TWRP, вы должны собрать исходный код ./build/envsetup.sh

И вы захотите «пообедать» устройство, чтобы вы могли сделать что-нибудь вроде «обеда omni_hammerhead.eng».

После успешного обеда большинство устройств будет использовать эту команду:

Вам нужно заменить # в –j # на количество ядер +1. Итак, если у вас двухъядерный процессор, это –j3, четырехъядерный будет –j5 и т. Д. Замените # на количество ядер +1, поэтому, если у вас двухъядерный процессор, это -j3, а четырехъядерный - -j5 и т.

Также для типичных устройств Samsung это потребуется:

Это потому, что большинство устройств Samsung включают восстановление как дополнительный рамдиск в багажнике, вместо отдельного раздела восстановления (который используется на большинстве других устройств).

К настоящему времени у вас должен быть скомпилирован TWRP для вашего устройства, и, надеюсь, он работает в среде эмулятора. Вы всегда должны сначала тестировать свой порт TWRP в среде эмулятора, чтобы не рисковать, что ваше устройство сломается.
Загрузите этот набор файлов конфигурации устройства.

Скомпилируйте образ восстановления, используя эти файлы устройства. В Android SDK нажмите Инструменты -> Управление AVD. Щелкните New. Настройте его следующим образом:

Затем нажмите ОК.

Когда у вас есть 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 или блоком управления загрузчиком, и решают, загружать ли разделы A или B. Когда доступно обновление OTA, данные из активного слота копируются из неактивного слота и исправляются / обновляются. Например, если вы в настоящее время находитесь в слоте A, ваше устройство загрузит обновление и скопирует существующий системный раздел из слота A и исправит / обновит его новыми обновлениями в слот B. После завершения копирования и обновления BCB обновляется, и устройство перезагружается, используя слот B. В следующий раз, когда доступно обновление, системный раздел в слоте B копируется в слот A и обновляется, BCB обновляется, и мы перезагружаемся в слот A. При просмотре разделов на устройстве вы увидите что-то вроде этого:

Обратите внимание на разделы с двойной загрузкой, системы и поставщика в списке выше, но только на один раздел пользовательских данных.

Хотя мне известно об отсутствии технических требований, все поставленные до сих пор устройства A / B не имеют отдельного раздела для восстановления. Вместо этого загрузочный образ содержит восстановление на своем виртуальном диске. Важно знать, что загрузочный образ теперь также содержит восстановление. Для полноты картины системный раздел представляет собой полную корневую файловую систему. Во время загрузки, если ядру предлагается загрузиться для восстановления, оно извлечет ramdisk в загрузочный раздел. Если загрузчик не сообщает ядру о загрузке для восстановления, ядро ​​смонтирует соответствующий системный раздел (A или B), поскольку системный раздел является полной корневой файловой системой. Это означает, что системный раздел на этих устройствах монтируется в / вместо / system, а системный раздел содержит все файлы, которые обычно находились бы на ramdisk загрузочного образа и во вложенной папке / system.

С точки зрения TWRP, есть 3 вещи, которые вы должны сделать для устройства A / B. Во-первых, вам нужно установить

Код:

Наконец, как только вы войдете в TWRP, вы, вероятно, захотите убедиться, что hal-info bootctl отвечает правильно, без ошибок. Обычно для правильной работы двоичного файла bootctl требуется проприетарная библиотека или даже пара служб. Если bootctl не работает правильно, то вы также не сможете правильно переключать слоты в TWRP.

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

Код:

AB_OTA_UPDATER: = верно

вы также можете установить:

Код:

BOARD_USES_RECOVERY_AS_BOOT: = верно

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = верно

Если вы установите

Код:

BOARD_USES_RECOVERY_AS_BOOT: = верно

тогда make recoveryimage больше не будет работать, и вместо этого вам нужно будет сделать bootimage. Я не рекомендую устанавливать любой из этих флагов для деревьев сборки только с TWRP. Эти флаги, вероятно, потребуются разработчикам, создающим полные ПЗУ для устройств A / B.

Установка / прошивка TWRP на устройствах A / B:

Поскольку все известные устройства A / B не имеют отдельного раздела восстановления, вам в конечном итоге придется прошить TWRP в загрузочный раздел. На Pixel 1 и 2 мы используем загрузку fastboot для временной загрузки TWRP без прошивки TWRP. Затем мы поставляем zip, чтобы пользователи могли прошивать TWRP в оба слота. Вы можете загрузить один из этих zip-архивов с нашего веб-сайта и при необходимости обновить zip-архив для поддержки ваших устройств. В конце концов, мы добавим в TWRP инструменты, которые позволят пользователям прошивать восстановления на этих устройствах без использования zip-архивов.

Недавно я работал над Razer Phone. К сожалению, Razer Phone не поддерживает загрузку с быстрой загрузкой. Вместо этого пользователи должны определить свой текущий активный загрузочный слот, используя

Код:

попасть в TWRP. После входа в TWRP они могут перейти на страницу перезагрузки и вернуться к исходному активному слоту, сделать резервную копию, а затем установить TWRP. Использование неактивного слота позволяет пользователям получить хорошую неизмененную резервную копию своего устройства перед установкой TWRP.

Дополнительные замечания:

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

  1. Файлы конфигурации устройства для компиляции TWRP из исходников для вашего устройства - не перепаковывайте recovery.img вручную , им необходимо скомпилировать его из исходного кода.
  2. После того, как TeamWin создаст копию TWRP, они отправят ее вам для проверки - как только вы ее подтвердите, TeamWin создаст рабочий образ для вашего устройства и добавит его в официальное приложение TWRP.
13 минут на чтение