Как сделать DIY порт TWRP для Android —

В Appual имеется множество руководств «Как получить root на Android», но корневые руководства не существуют для каждого устройства на планете — обычно это происходит по ряду причин; особенно, недоступность пользовательского восстановления, такого как TWRP, для любого конкретного устройства. К счастью, портирование пользовательского рекавери, такого как TWRP, на ваше устройство не является невероятно трудным (хотя все еще справедливо)

Если у вас есть устройство, для которого вы хотите получить root-права, и вы не можете найти какой-либо доступный метод root, вам следует тщательно изучить, как портировать TWRP для себя. Это, по крайней мере, даст вам возможность настраивать восстановление, когда вы пытаетесь получить root права на свое устройство.

Если вы заинтересованы в подобных проектах для Android, подумайте также о следующих руководствах Appuals:

  • Как собрать Android-ядро Mediatek из исходного кода
  • Как создать собственное ПЗУ из Android Open Source Project | Pt. 2
  • Как вручную оформить тему Android System UI

Предпосылки:

Базовые знания команд Linux и / или компиляции AOSP с нуля.

Если вы не знакомы с основными командами Linux и / или сборкой AOSP, это руководство не для вас — не существует «дружественного для новичков» способа написать руководство для этого процесса. Сначала я предлагаю попробовать несколько более простых операций, таких как чтение руководства Appual о том, как создать AOSP с нуля.

Теперь для сборки вы можете использовать Omni версии 5.1–8.1 или CM версии 12.1–15.1 — но если вы используете CM, вы можете столкнуться с небольшими проблемами, связанными с makefile. Если вы не разбираетесь в устранении проблем, связанных с make-файлом, вы должны вместо этого использовать Omni.

Но если вы решите использовать CM, вам нужно будет поместить TWRP в папку CM / bootable / recovery-twrp и установить RECOVERY_VARIANT: = twrp в файле BoardConfig.mk

Вы можете найти исходный код TWRP здесь, и вам следует выбрать последнюю доступную ветку. Вам не нужно будет делать это с Omni, поскольку он по умолчанию включает источник TWRP, если только вы не используете более старую версию Omni — в этом случае вы захотите извлечь из последней ветки.

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

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

После получения исходного кода TWRP нам необходимо изменить некоторые флаги сборки для вашего конкретного устройства. Найдите BoardConfig.mk для вашего устройства — обычно это можно найти в устройствах / изготовителе / ​​кодовом названии (например, devices / lge / hammerhead / BoardConfig.mk)

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

Флаги следует размещать внизу BoardConfig.mk под заголовком #twrp

Для всех устройств вам нужно указать TWRP, какую тему использовать. Флаг TW_THEME используется вместо старого флага DEVICE_RESOLUTION, что означает, что TWRP теперь использует масштабирование для растягивания любой темы.

Доступны следующие варианты: портрет_hdpi, портрет_mdpi, пейзаж_hdpi, пейзаж_mdpi и watch_mdpi. В портретном режиме вам, скорее всего, понадобится тема hdpi с разрешением 720 × 1280 и выше, а для альбомных устройств — с разрешением 1280 × 720 и выше.

Таким образом, ваш раздел сборки флага + флаг темы должен выглядеть так:

#twrp

TW_THEME: = портрет_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 поддерживает только fstabs v2 в версии 3.2.0 и выше — в более старых версиях TWRP вам придется использовать старый формат fstab. Вот пример TWRP fstab для Galaxy S4:

Чтобы максимизировать совместимость с вашим конкретным деревом сборки, вы можете создать twrp.fstab и использовать PRODUCT_COPY_FILES для размещения в> etc> twrp.fstab.

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

Пример кода:

PRODUCT_COPY_FILES + = устройство / lge / hammerhead / twrp.fstab: восстановление> root> и т. Д.> Twrp.fstab

Fstab в TWRP может содержать некоторые «флаги» для каждого раздела, указанного в fstab.

Эти флаги добавляются в конец списка разделов в fstab, разделяя их пробелами / пробелами / табуляциями. Флаг будет влиять только на этот раздел, но не на другие. Флаги разделяются точкой с запятой. Вот пример кода:

Итак, давайте рассмотрим это по крупицам. Флаг здесь даст отображаемое имя «Micro SDcard». Флаг wipeingui сделает этот раздел доступным для стирания в меню Advanced Wipe. Съемный флаг указывает, что этот раздел не всегда присутствует, что предотвратит отображение ошибок монтирования.

Полный список флагов (кредиты TeamWin):

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

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

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

Также могут быть включены эти флаги:

 

Итак, первые две строки в TWRP.Flags добавят разделы Boot и Recovery, которых не было в Fstab V2. Затем в строке / 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 включит опцию для создания образа системы в меню Backup и Restore.

Официальный TeamWin github также должен содержать последние примеры деревьев устройств для устройств, имеющих официальный порт TWRP. GitHub TeamWin можно найти ЗДЕСЬ.

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

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

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

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

Кроме того, типичные устройства Samsung потребуют этого:

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

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

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

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

Когда у вас есть AVD и ваш recoveryimage, вы можете загрузить TWRP в эмуляторе, перейдя в папку android-sdk / tools и выполнив эту команду:

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

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

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

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

Код:

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

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

Код:

AB_OTA_UPDATER: = true

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

Код:

BOARD_USES_RECOVERY_AS_BOOT: = true

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = true

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

Код:

BOARD_USES_RECOVERY_AS_BOOT: = true

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

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

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

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

Код:

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

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

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

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