Android 용 TWRP 포트 DIY 방법

어렵습니다 (여전히 상당히 그렇습니다).



루팅하려는 장치가 있고 사용 가능한 루트 방법을 찾을 수없는 경우 직접 TWRP를 포팅하는 방법을 배우는 것이 좋습니다. 이것은 적어도 장치를 루팅하려고 할 때 작업 할 사용자 지정 복구를 제공합니다.



이러한 종류의 DIY Android 프로젝트에 관심이 있다면 Appuals에서 다음 가이드를 읽어보세요.



전제 조건 :

Linux 명령 및 / 또는 처음부터 AOSP 컴파일에 대한 기본 지식.



기본 Linux 명령 및 / 또는 AOSP 빌드에 익숙하지 않은 경우이 가이드가 적합하지 않습니다.이 프로세스에 대한 가이드를 작성하는 '초보자 친화적'방법은 없습니다. 처음부터 AOSP를 빌드하는 방법에 대한 Appual의 가이드를 읽는 것과 같이 더 쉬운 작업을 먼저 시도하는 것이 좋습니다.

이제 빌드를 위해 Omni 버전 5.1 ~ 8.1 또는 CM 버전 12.1 ~ 15.1을 사용할 수 있습니다. 그러나 CM을 사용하는 경우 makefile과 관련된 작은 문제가 발생할 수 있습니다. makefile 문제를 해결하는 데 익숙하지 않은 경우 대신 Omni를 사용하도록 선택해야합니다.

그러나 CM을 사용하기로 결정한 경우 CM / bootable / recovery-twrp 폴더에 TWRP를 배치하고 BoardConfig.mk 파일에 RECOVERY_VARIANT : = twrp를 설정해야합니다.

TWRP 소스 코드를 찾을 수 있습니다. 여기 , 사용 가능한 최신 분기를 선택해야합니다. Omni의 이전 버전을 사용하지 않는 한 기본적으로 TWRP 소스가 포함되어 있으므로 Omni에서이 작업을 수행 할 필요가 없습니다.이 경우 최신 브랜치에서 가져 오는 것이 좋습니다.

만약 너라면 TWRP 만 빌드하고 싶습니다. , 다음과 같은 작은 나무로 작업 해 볼 수 있습니다. 최소 매니페스트 TWRP . 그러나이 매니페스트에서 허용하는 것보다 더 많은 리포지토리가 필요한 상황이있을 수 있습니다.

컴파일 전 주요 사항 : 플래그를 추가하거나 변경하는 경우 다시 컴파일하기 전에 정리 (또는 클러버)해야합니다. 그렇지 않으면 플래그 변경 사항이 포함되지 않습니다!

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입니다. 세로 모드의 경우 720x1280 이상의 hdpi 테마를 원할 가능성이 높지만 가로 장치의 경우 1280x720 이상이 필요합니다.

따라서 빌드 플래그 섹션 + 테마 플래그는 다음과 같아야합니다.

#twrp

TW_THEME : = portrait_hdpi

이 섹션에 포함 할 추가 빌드 플래그 (XDA 포럼 크레딧) :

  • RECOVERY_SDCARD_ON_DATA : = true (저장 용으로이 폴더가있는 기기 (대부분의 Honeycomb 및 Galaxy Nexus와 같은 ICS와 함께 원래 배송 된 기기)에서 / data / media를 올바르게 처리 할 수 ​​있도록합니다.하지만 이러한 유형의 기기에는이 플래그가 필요하지 않습니다. 이 플래그를 정의하지 말고 fstab에 / sdcard, / internal_sd, / internal_sdcard 또는 / emmc에 대한 참조도 포함하지 마세요. 그러면 기기가 에뮬레이트 된 스토리지를 사용하고 있다고 자동으로 가정합니다.)
  • 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는 버전 3.2.0 이상에서만 v2 fstab을 지원합니다. 이전 버전의 TWRP에서는 이전 형식의 fstab을 사용해야합니다. 다음은 Galaxy S4 용 TWRP fstab의 예입니다.

특정 빌드 트리와의 호환성을 최대화하려면 twrp.fstab을 만들고 PRODUCT_COPY_FILES를 사용하여> etc> twrp.fstab에 배치 할 수 있습니다.

TWRP가 시작되고 ramdisk에서 twrp.fstab을 찾으면 이름을> etc> recovery.fstab.bak로 변경합니다. 기본적으로 장치의 fstab을 호환성을 확장하는 TWRP fstab으로 대체합니다.

예제 코드 :

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

TWRP의 fstab에는 fstab에 나열된 각 파티션에 대한 일부 '플래그'가 포함될 수 있습니다.

이 플래그가 추가됩니다 끝까지 공백 / 공백 / 탭으로 구분 된 fstab의 파티션 목록 플래그는 해당 파티션에만 영향을 미치며 다른 파티션에는 영향을주지 않습니다. 플래그는 세미콜론으로 구분됩니다. 다음은 몇 가지 예제 코드입니다.

이제 조금씩 살펴 보겠습니다. 여기에있는 플래그는 'Micro SDcard'라는 표시 이름을 제공합니다. wipeingui 플래그는이 파티션을 Advanced Wipe 메뉴에서 삭제할 수 있도록합니다. 제거 가능 플래그는이 파티션이 항상 존재하는 것은 아니므로 마운트 오류가 표시되지 않도록합니다.

플래그의 전체 목록 (TeamWin에 대한 크레딧) :

  • 이동할 수 있는 — 파티션이 존재하지 않아 부팅 중에 마운트 오류가 표시되지 않을 수 있음을 나타냅니다.
  • 저장 — 파티션을 저장소로 사용하여 백업, 복원, 압축 설치 등을위한 저장소로 사용할 수 있음을 나타냅니다.
  • settingsstorage — 하나의 파티션 만 설정 저장소로 설정해야합니다.이 파티션은 TWRP의 설정 파일을 저장하는 위치로 사용됩니다.
  • 닦을 수 — 백엔드 시스템에서 파티션을 지울 수 있지만 사용자가 지울 수 있도록 GUI에 나열되지 않을 수 있음을 나타냅니다.
  • userrmrf — 일반 포맷 유형의 삭제를 무시하고 rm -rf 명령을 사용하여 파티션 만 삭제하도록 허용합니다.
  • backup = — 뒤에 등호 기호가 있어야합니다. 따라서 backup = 1 또는 backup = 0, 1은 파티션이 백업 / 복원 목록에 나열 될 수 있음을 나타내고 0은이 파티션이 백업 목록에 표시되지 않도록합니다.
  • 와이 핑 — 사용자가 고급 지우기 메뉴에서 지우기를 위해 파티션을 선택할 수 있도록 GUI에 파티션을 표시합니다.
  • 공장 초기화 중 — 공장 초기화 중에 파티션이 지워집니다.
  • 무시하다 — blkid는 TWRP에서 사용중인 파일 시스템을 확인하는 데 사용됩니다.이 플래그를 사용하면 TWRP가 blkid의 결과를 건너 뛰거나 무시하고 fstab에만 지정된 파일 시스템을 사용합니다.
  • 보유 레이아웃 버전 — TWRP가 / data / media를 사용하지만 여전히 별도의 / sdcard 파티션이있는 Sony Xperia S와 같은 기기의 / data에있는 .layoutversion 파일을 유지합니다.
  • 심볼릭 링크 = — 파티션을 마운트 할 때 TWRP가 추가 마운트 명령을 실행하도록합니다. 일반적으로 / data / media와 함께 / sdcard를 생성하는 데 사용됩니다.
  • 디스플레이 = — GUI에 나열 할 파티션의 표시 이름을 설정합니다.
  • 스토리지 이름 = — GUI 스토리지 목록에 나열 할 파티션의 스토리지 이름을 설정합니다.
  • 백업 이름 = — GUI 백업 / 복원 목록에 나열 할 파티션의 백업 이름을 설정합니다.
    length = — 일반적으로 Android의 전체 기기 암호화가있는 경우 복호화 키를 저장하기 위해 / data 파티션 끝에 빈 공간을 예약하는 데 사용됩니다. 설정하지 않으면 기기를 암호화하지 못할 수 있습니다.
  • canencryptbackup = — 활성화 / 비활성화하려면 1 또는 0, 사용자가 암호화를 선택한 경우 TWRP가이 파티션의 백업을 암호화합니다 (이미지가 아닌 tar 백업에만 적용됨).
  • userdataencryptbackup = — 활성화 / 비활성화하려면 1 또는 0, TWRP가이 파티션의 사용자 데이터 부분 만 암호화하도록합니다. / data / app과 같은 특정 하위 풀은 시간을 절약하기 위해 암호화되지 않습니다.
  • 하위 파티션 = — 뒤에 등호와 하위 파티션이 속한 파티션의 경로가 와야합니다. 하위 파티션은 주 파티션의 '일부'로 취급되므로 예를 들어 TWRP는 자동으로 / datadata를 / data의 하위 파티션으로 만듭니다. 이는 / datadata가 GUI 목록에 표시되지 않지만 / datadata는 해당 작업이 / data에서 수행 될 때마다 삭제, 백업, 복원, 마운트 및 마운트 해제된다는 것을 의미합니다.

하위 파티션 사용의 좋은 예는 LG Optimus G의 3x efs 파티션입니다.

이렇게하면 3 개의 파티션이 모두 TWRP GUI에서 단일 'EFS'항목으로 묶여서 3 개 모두를 단일 항목으로 함께 백업 및 복원 할 수 있습니다.

V2 Fstab을 사용하는 TWRP 3.2.0 이상에서는 빌드 플래그를 추가 할 필요가 없습니다. . V2 Fstab 지원은 자동입니다. V2 Fstab은 또한 다중 파티션이있는 USB OTG 및 마이크로 SD 카드에 유용 할 수있는 와일드 카드 (* 기호)를 지원합니다. V1 Fstab 형식을 계속 사용할 수도 있으며 동일한 Fstab에서 V1 및 V2 유형을 모두 사용할 수 있습니다.

예를 들어, 다음은 USB OTG 용 와일드 카드가있는 V1 Fstab 라인입니다.

다음은 동일한 결과를 달성하는 동일한 장치에 대한 V2 Fstab 라인입니다.

또한 V1 Fstab 형식을 사용하는 etc twrp.flags를 포함 할 수 있으며, V2 Fstab에 TWRP 플래그, V2 Fstab에 포함되지 않은 추가 파티션 또는 V2 Fstab의 설정을 재정의하는 데 사용할 수 있습니다.

예를 들어 Huawei 장치는 etc recovery.fstab에이 V2 fstab을 포함 할 수 있습니다.

다음 플래그가 포함될 수도 있습니다.

따라서 여기에서 TWRP.Flags의 처음 두 줄은 부팅 및 복구 파티션을 추가합니다. 존재하지 않았다 V2 Fstab에서. 그런 다음 TWRP.flags의 / cust 행은 최종 사용자가 (cust) 파티션을 백업 할 수 있도록 TWRP에 지시하고 표시 이름을 지정합니다.

/ misc 파티션은 twrp.flags에 있으며 / oeminfo 파티션은 TWRP에게 백업을 허용하고 표시 이름을 제공하도록 지시합니다.

많은 Huawei 장치가 암호화되어 있지만 특수한 Huawei 바이너리를 사용하므로 / data 라인이 필요합니다. 따라서 Huawei 바이너리를 사용하여 복구 모드에서 장치를 자동으로 해독합니다. 따라서 여기에서 / data 행은 TWRP에게 일반적으로 '적절한'마운트에 사용되는 / dev / block / bootdevice / by-name / userdata가 아닌 / dev / block / dm -0을 사용하도록 지시합니다.

마지막으로 / system_image가 있으므로 TWRP는 백업 및 복원 메뉴에 시스템 이미지를 만드는 옵션을 포함합니다.

공식 TeamWin github에는 공식 TWRP 포트가있는 장치에 대한 최신 예제 장치 트리도 포함되어야합니다. TeamWin github를 찾을 수 있습니다. 여기 .

Omni 또는 CM이 동기화되고 TWRP 플래그를 설정 한 후 소스 ./build/envsetup.sh를 빌드해야합니다.

그리고 기기를 '점심'하고 싶을 것이므로 '점심 omni_hammerhead.eng'과 같은 작업을 할 수 있습니다.

성공적인 점심 식사 후 대부분의 장치는 다음 명령을 사용합니다.

–j #의 #을 코어 수 +1로 바꿔야합니다. 따라서 듀얼 코어가있는 경우 –j3, 쿼드 코어는 –j5가됩니다. #을 코어 수 +1로 대체하므로 듀얼 코어가있는 경우 -j3이고 쿼드 코어는 -j5가됩니다.

또한 일반적인 삼성 장치에는 다음이 필요합니다.

대부분의 삼성 기기에는 복구 기능이 포함되어 있기 때문입니다. 부트에 추가 램 디스크로 (대부분의 다른 장치에서 사용하는) 별도의 복구 파티션 대신.

이제 장치 용으로 컴파일 된 TWRP가 있어야하며 에뮬레이터 환경에서 작동하기를 바랍니다. 먼저 에뮬레이터 환경에서 TWRP 포트를 먼저 테스트해야하므로 장치가 지루할 위험이 없습니다.
이 장치 구성 파일 세트를 다운로드하십시오.

이러한 기기 파일을 사용하여 복구 이미지를 컴파일합니다. Android SDK에서 도구-> AVD 관리를 클릭합니다. 새로 만들기를 클릭합니다. 다음과 같이 설정하십시오.

그런 다음 확인을 클릭하십시오.

AVD와 복구 이미지가 있으면 android-sdk / tools 폴더로 이동하여 에뮬레이터에서 TWRP를 부팅하고 다음 명령어를 실행할 수 있습니다.

ADB는 바로 작동하지 않습니다. TWRP가 부팅을 마치고 약 10 ~ 15 초 후에 ADB가 온라인 상태가됩니다. init.rc를 통해 ADB를 시작하므로 사용자가 만들 수있는 일종의 코드 오류로 인해 TWRP가 부팅에 실패하더라도 ADB는 계속 작동합니다. 즐겨!

TWRP 및 A / B 기기 (TeamWin에 대한 크레딧) :

TWRP 관점에서 A / B 기기는 일반 기기와 크게 다르지 않지만 개발자는 이러한 기기에서 작업하는 것을 부끄러워하는 것 같습니다. 이 주제에 대해 약간의 설명을하려고하는데 이것이 TWRP를 A / B 기기로 포팅하는 가이드가되기를 바랍니다.

먼저 A / B 기기가 무엇이고 어떻게 다른지 알아 보겠습니다. A / B 기기에는 기기에있는 여러 파티션의 중복이 있습니다. A / B 기기에는 2x 시스템 파티션, 2x 부팅 파티션, 2x 공급 업체 파티션, 2x 모뎀 / 펌웨어 파티션 등이 있습니다. 한 번에 하나의 슬롯 만 사용됩니다. 초기 부팅 중에 부트 로더의 첫 번째 단계는 BCB 또는 부트 로더 제어 블록이라고하는 소량의 데이터를 읽고 A 파티션 또는 B 파티션을 부팅할지 결정합니다. OTA 업데이트를 사용할 수 있으면 활성 슬롯의 데이터가 비활성 슬롯에서 복사되고 패치 / 업데이트됩니다. 예를 들어 현재 슬롯 A에있는 경우 기기는 업데이트를 다운로드하고 슬롯 A에서 기존 시스템 파티션을 복사 한 다음 새 업데이트로 슬롯 B에 패치 / 업데이트합니다. 복사 및 업데이트가 완료되면 BCB 업데이트되고 기기가 슬롯 B를 사용하여 재부팅됩니다. 다음에 업데이트를 사용할 수있게되면 슬롯 B의 시스템 파티션이 슬롯 A에 복사되고 업데이트되고 BCB가 업데이트되고 슬롯 A로 재부팅됩니다. 기기의 파티션을 볼 때 다음과 같은 내용이 표시됩니다.

위 목록에 이중 부팅, 시스템 및 공급 업체 파티션이 있지만 사용자 데이터 파티션은 하나뿐입니다.

기술적으로 내가 알고있는 요구 사항은 없지만 지금까지 배송 된 모든 A / B 기기에는 별도의 복구 파티션이 없습니다. 대신 부팅 이미지에는 램 디스크의 복구가 포함됩니다. 중요한 것은 이제 부팅 이미지에도 복구가 포함되어 있다는 것을 아는 것입니다. 완전성을 위해 시스템 파티션은 전체 루트 파일 시스템입니다. 부팅 중에 커널이 복구를 위해 부팅하라는 메시지가 표시되면 부팅 파티션에서 ramdisk를 추출합니다. 커널이 부트 로더에서 복구를 위해 부팅하도록 지시하지 않으면 시스템 파티션이 전체 루트 파일 시스템이므로 커널이 적절한 시스템 파티션 (A 또는 B)을 마운트합니다. 즉, 이러한 기기의 시스템 파티션은 / system 대신 /에 마운트되고 시스템 파티션에는 일반적으로 부팅 이미지 램 디스크 및 / system 하위 폴더에 있었을 모든 파일이 포함됩니다.

TWRP 관점에서 A / B 기기에 대해해야 할 일이 3 가지 있습니다. 먼저 설정해야합니다.

암호:

마지막으로 TWRP에 들어가면 bootctl hal-info가 오류없이 올바르게 응답하는지 확인하고 싶을 것입니다. 일반적으로 bootctl 바이너리가 제대로 작동하려면 독점 라이브러리 또는 몇 가지 서비스가 필요합니다. bootctl이 제대로 작동하지 않으면 TWRP 내에서 슬롯을 올바르게 전환 할 수 없습니다.

설정 이외에

암호:

AB_OTA_UPDATER : = 참

다음을 설정할 수도 있습니다.

암호:

BOARD_USES_RECOVERY_AS_BOOT : = true

BOARD_BUILD_SYSTEM_ROOT_IMAGE : = true

설정하면

암호:

BOARD_USES_RECOVERY_AS_BOOT : = true

그러면 make recoveryimage가 더 이상 작동하지 않고 대신 bootimage를 만들어야합니다. TWRP 전용 빌드 트리에는 이러한 플래그를 설정하지 않는 것이 좋습니다. 이러한 플래그는 A / B 기기 용 전체 ROM을 빌드하는 개발자에게 필요할 수 있습니다.

A / B 기기에 TWRP 설치 / 플래싱 :

알려진 모든 A / B 기기에는 별도의 복구 파티션이 없으므로 결국 TWRP를 부팅 파티션으로 플래시해야합니다. Pixel 1 및 2에서는 빠른 부팅 부팅을 사용하여 TWRP를 플래시하지 않고 일시적으로 TWRP를 부팅합니다. 그런 다음 사용자가 두 슬롯 모두에 TWRP를 플래시 할 수 있도록 zip을 제공합니다. 웹 사이트에서 이러한 zip 중 하나를 다운로드하고 필요에 따라 기기를 지원하기 위해 zip을 업데이트 할 수 있습니다. 결국 사용자가 ZIP을 사용하지 않고도 이러한 기기에서 복구를 플래시 할 수 있도록 도구를 TWRP에 추가 할 예정입니다.

최근에는 Razer 휴대 전화를 작업했습니다. Razer 휴대 전화는 안타깝게도 빠른 부팅 부팅을 지원하지 않습니다. 대신 사용자는 다음을 사용하여 현재 활성화 된 부팅 슬롯을 확인해야합니다.

암호:

TWRP에 들어가기 위해. TWRP에 들어가면 재부팅 페이지로 이동하여 원래 활성 슬롯으로 다시 변경하고 백업을 만든 다음 TWRP를 설치할 수 있습니다. 비활성 슬롯을 사용하면 사용자가 TWRP를 설치하기 전에 수정되지 않은 양호한 기기 백업을받을 수 있습니다.

추가 참고 사항 :

TWRP를 받고 싶다면 귀하의 장치에 대해 공식적으로 지원됨 TWRP 앱과 함께 자동으로 설치 될 수 있도록 동일한 장치의 다른 소유자가 공식 TWRP 지원을받을 수 있도록이 작업을 수행하고 싶습니다. 좋은 일입니다. 다음 정보를 다음 주소로 보내야합니다. TeamWin :

  1. 소스에서 TWRP를 컴파일하기위한 장치 구성 파일 당신의 장치 - recovery.img를 손으로 다시 포장하지 마십시오. , 그들은 소스에서 컴파일해야합니다.
  2. TeamWin이 TWRP 사본을 빌드 한 후 유효성 검사를 위해 전송합니다. 일단 유효성을 검사하면 TeamWin이 장치 용 작동 이미지를 빌드하고 공식 TWRP 앱에 추가합니다.
13 분 읽기