Cách tự làm cổng TWRP cho Android

, bạn có thể thử làm việc với một cây nhỏ hơn, chẳng hạn như Tệp kê khai tối thiểu TWRP . Tuy nhiên, có thể có những trường hợp bạn sẽ cần nhiều repos hơn mức mà tệp kê khai này cho phép.



Lưu ý chính trước khi biên dịch: Nếu bạn thêm hoặc thay đổi bất kỳ cờ nào, bạn cần phải làm sạch (hoặc làm cho áo choàng) trước khi biên dịch lại, nếu không các thay đổi cờ của bạn sẽ không được bao gồm!

Sau khi bạn có mã nguồn TWRP, chúng tôi cần thay đổi một số cờ xây dựng cho thiết bị cụ thể của bạn. Tìm BoardConfig.mk cho thiết bị của bạn - thường cái này sẽ được tìm thấy trong thiết bị / nhà sản xuất / tên mã (ví dụ: thiết bị / lge / hammerhead / BoardConfig.mk)



Cấu hình bo mạch cần bao gồm các cài đặt kiến ​​trúc và nền tảng - những cài đặt này thường đã được bao gồm nếu bạn đang sử dụng cấu hình thiết bị của người khác. Nhưng nếu bạn đã tạo của riêng mình, bạn sẽ cần thêm chúng. Điều này là do không có chúng, quá trình khởi động khôi phục có thể không hoạt động và nó sẽ chỉ nhấp nháy logo TeamWin trên màn hình của bạn liên tục.



Cờ nên được đặt ở cuối BoardConfig.mk, dưới tiêu đề #twrp



Đối với tất cả thiết bị, bạn cần hướng dẫn TWRP sử dụng chủ đề nào. Cờ TW_THEME được sử dụng thay cho cờ DEVICE_RESOLUTION cũ hơn, có nghĩa là TWRP hiện sử dụng tính năng mở rộng quy mô để kéo dài bất kỳ chủ đề nào.

Các tùy chọn của bạn là: chân dung_hdpi, chân dung_mdpi, phong cảnh_hdpi, phong cảnh_mdpi và watch_mdpi. Đối với chế độ dọc, rất có thể bạn sẽ muốn chủ đề hdpi là 720 × 1280 trở lên, nhưng đối với các thiết bị ngang thì sử dụng 1280 × 720 trở lên.

Vì vậy, phần cờ xây dựng + cờ chủ đề của bạn sẽ trông như thế này:



#twrp

TW_THEME: = chân dung_hdpi

Một số cờ xây dựng bổ sung mà bạn muốn đưa vào phần này (tín dụng cho diễn đàn XDA):

  • RECOVERY_SDCARD_ON_DATA: = true (điều này cho phép xử lý thích hợp / data / media trên các thiết bị có thư mục này để lưu trữ (hầu hết Honeycomb và các thiết bị ban đầu được vận chuyển với ICS như Galaxy Nexus) Tuy nhiên, cờ này không bắt buộc đối với các loại thiết bị này. Nếu bạn không xác định cờ này và cũng không bao gồm bất kỳ tham chiếu nào đến / sdcard, / internal_sd, / internal_sdcard hoặc / emmc trong fstab của bạn, khi đó chúng tôi sẽ tự động giả định rằng thiết bị đang sử dụng bộ nhớ giả lập.)
  • BOARD_HAS_NO_REAL_SDCARD: = true - vô hiệu hóa những thứ như phân vùng thẻ SD và có thể tiết kiệm cho bạn một số dung lượng nếu TWRP không phù hợp với lớp khôi phục của bạn
  • TW_NO_BATT_PERCENT: = true - tắt hiển thị phần trăm pin cho các thiết bị không hỗ trợ đúng cách
  • TW_CUSTOM_POWER_BUTTON: = 107 - ánh xạ tùy chỉnh nút nguồn cho màn hình khóa
  • TW_NO_REBOOT_BOOTLOADER: = true - xóa nút khởi động lại bộ nạp khởi động khỏi menu khởi động lại
  • TW_NO_REBOOT_RECOVERY: = true - xóa nút khôi phục khởi động lại khỏi menu khởi động lại
  • RECOVERY_TOUCHSCREEN_SWAP_XY: = true - hoán đổi ánh xạ các điểm tiếp xúc giữa trục X và Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = true - lật các giá trị trên màn hình cảm ứng trục y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = true - lật các giá trị trên màn hình cảm ứng trục x
  • TWRP_EVENT_LOGGING: = true - cho phép ghi nhật ký sự kiện cảm ứng để giúp gỡ lỗi các sự cố màn hình cảm ứng (đừng để chế độ này cho bản phát hành - nó sẽ lấp đầy tệp nhật ký của bạn rất nhanh)
  • BOARD_HAS_FLIPPED_SCREEN: = true - lật ngược màn hình đối với các màn hình được lắp ngược

Bạn có thể tìm thấy các cờ bản dựng bổ sung bằng cách lướt qua các tệp Android.mk trong nguồn khôi phục, nhưng chúng thường không được sử dụng nên không có ích gì khi ghi lại chúng.

Sử dụng Recovery.Fstab

TWRP 2.5 trở lên có hỗ trợ các tính năng recovery.fstab mới - đặc biệt là khả năng mở rộng các chức năng sao lưu / khôi phục của TWRP. Bạn không cần thêm cờ fstab, vì hầu hết các phân vùng sẽ tự động được xử lý.

TWRP chỉ hỗ trợ v2 fstabs trong phiên bản 3.2.0 trở lên - trong các phiên bản TWRP cũ hơn, bạn sẽ cần sử dụng định dạng cũ của fstab. Dưới đây là một ví dụ về TWRP fstab cho Galaxy S4:

Để tối đa hóa khả năng tương thích với cây xây dựng cụ thể của bạn, bạn có thể tạo twrp.fstab và sử dụng PRODUCT_COPY_FILES để đặt trong> etc> twrp.fstab.

Khi TWRP khởi chạy và tìm thấy twrp.fstab trong đĩa ram, nó sẽ đổi tên nó thành> etc> recovery.fstab.bak - về cơ bản nó sẽ thay thế fstab từ thiết bị của bạn bằng TWRP fstab, giúp mở rộng khả năng tương thích.

Mã ví dụ:

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

Fstab trong TWRP có thể chứa một số “cờ” cho mỗi phân vùng được liệt kê trong fstab.

Các cờ này được thêm vào đến cuối cùng danh sách phân vùng trong fstab, được phân tách bằng khoảng trắng / khoảng trắng / tab. Cờ sẽ chỉ ảnh hưởng đến phân vùng đó, nhưng không ảnh hưởng đến phân vùng khác. Các cờ được phân tách bằng dấu chấm phẩy. Đây là một số mã ví dụ:

Vì vậy, chúng ta hãy kiểm tra điều này từng chút một. Cờ ở đây sẽ cung cấp tên hiển thị là “Thẻ Micro SD”. Cờ lau sẽ làm cho phân vùng này có sẵn để xóa trong menu Xóa nâng cao. Cờ di động chỉ ra rằng phân vùng này không phải lúc nào cũng có, điều này sẽ ngăn không cho hiển thị lỗi gắn.

Danh sách đầy đủ các cờ (tín dụng cho TeamWin) :

  • có thể tháo rời - chỉ ra rằng phân vùng có thể không hiện diện, ngăn không cho hiển thị lỗi gắn trong khi khởi động
  • lưu trữ - chỉ ra rằng phân vùng có thể được sử dụng làm nơi lưu trữ, làm cho phân vùng có sẵn làm nơi lưu trữ để sao lưu, khôi phục, cài đặt zip, v.v.
  • cài đặt lưu trữ - chỉ nên đặt một phân vùng làm nơi lưu trữ cài đặt, phân vùng này được sử dụng làm vị trí lưu trữ tệp cài đặt của TWRP
  • canbewiped - cho biết rằng phân vùng có thể bị xóa bởi hệ thống back-end, nhưng có thể không được liệt kê trong GUI để người dùng xóa
  • userrmrf - ghi đè kiểu xóa định dạng thông thường và chỉ cho phép xóa phân vùng bằng lệnh rm -rf
  • backup = - phải được thành công bởi dấu bằng, vì vậy backup = 1 hoặc backup = 0, 1 cho biết rằng phân vùng có thể được liệt kê trong danh sách sao lưu / khôi phục trong khi 0 đảm bảo rằng phân vùng này sẽ không hiển thị trong danh sách sao lưu.
  • lauui - làm cho phân vùng hiển thị trong GUI để cho phép người dùng chọn nó để xóa trong menu xóa nâng cao
  • tập hợp lau chùi - phân vùng sẽ bị xóa trong quá trình khôi phục cài đặt gốc
  • bỏ qua - blkid được sử dụng để xác định hệ thống tệp nào đang được TWRP sử dụng, cờ này sẽ khiến TWRP bỏ qua / bỏ qua kết quả của blkid và chỉ sử dụng hệ thống tệp được chỉ định trong fstab
  • sự chuyển đổi giữ lại - khiến TWRP giữ lại tệp .layoutversion trong / data trên các thiết bị như Sony Xperia S, loại sử dụng / data / media nhưng vẫn có phân vùng / sdcard riêng biệt
  • liên kết tượng trưng = - khiến TWRP chạy lệnh mount bổ sung khi gắn phân vùng, thường được sử dụng với / data / media để tạo / sdcard
  • trưng bày = - đặt tên hiển thị cho phân vùng để liệt kê trong GUI
  • tên lưu trữ = - đặt tên lưu trữ cho phân vùng để liệt kê trong danh sách lưu trữ GUI
  • tên dự phòng = - đặt tên sao lưu cho phân vùng để liệt kê trong danh sách sao lưu / khôi phục GUI
    length = - thường được sử dụng để dành không gian trống ở cuối phân vùng / data để lưu trữ khóa giải mã khi có mã hóa thiết bị đầy đủ của Android, không cài đặt điều này có thể dẫn đến không thể mã hóa thiết bị
  • canencryptbackup = - 1 hoặc 0 để bật / tắt, làm cho TWRP mã hóa bản sao lưu của phân vùng này nếu người dùng chọn mã hóa (chỉ áp dụng cho các bản sao lưu tar, không phải hình ảnh)
  • userdataencryptbackup = - 1 hoặc 0 để bật / tắt, làm cho TWRP chỉ mã hóa phần dữ liệu người dùng của phân vùng này, một số nhóm con như / data / app sẽ không được mã hóa để tiết kiệm thời gian
  • tiêu chí phụ = - phải được nối tiếp bởi dấu bằng và đường dẫn của phân vùng mà nó là một phân vùng con. Một phân vùng con được coi là 'một phần' của phân vùng chính, ví dụ: TWRP tự động tạo / datadata thành một phân vùng con của / data. Điều này có nghĩa là / datadata sẽ không hiển thị trong danh sách GUI, nhưng / datadata sẽ bị xóa, sao lưu, khôi phục, gắn kết và ngắt kết nối bất cứ khi nào các thao tác đó được thực hiện trên / data.

Một ví dụ điển hình về việc sử dụng tiêu đề con là phân vùng 3x efs trên LG Optimus G:

Điều này gộp tất cả 3 phân vùng vào một mục nhập “EFS” duy nhất trong TWRP GUI cho phép cả ba phân vùng được sao lưu và khôi phục cùng nhau trong một mục nhập duy nhất.

Với TWRP 3.2.0 trở lên sử dụng V2 Fstab, bạn không cần thêm bất kỳ cờ xây dựng nào . Hỗ trợ V2 Fstab là tự động. V2 Fstab cũng hỗ trợ các ký tự đại diện (ký hiệu *) có thể hữu ích cho USB OTG và thẻ micro-SD có nhiều phân vùng. Bạn cũng có thể tiếp tục sử dụng định dạng V1 Fstab và hoàn toàn có thể sử dụng cả hai loại V1 và V2 trong cùng một Fstab.

Ví dụ: đây là dòng V1 Fstab có ký tự đại diện dành cho USB OTG:

Đây là dòng V2 Fstab cho cùng một thiết bị đạt được kết quả tương tự:

Ngoài ra, bạn có thể bao gồm vv twrp.flags sử dụng định dạng V1 Fstab và chúng có thể được sử dụng để bổ sung V2 Fstab với cờ TWRP, phân vùng bổ sung không có trong V2 Fstab hoặc ghi đè cài đặt trong V2 Fstab.

Ví dụ: một thiết bị Huawei có thể có fstab V2 này trong etc recovery.fstab:

Nó cũng có thể có các cờ sau:

Vì vậy, ở đây, hai dòng đầu tiên trong TWRP.Flags sẽ thêm phân vùng Khởi động và Khôi phục, không có mặt trong V2 Fstab. Sau đó, dòng / cust trong TWRP.flags sẽ hướng dẫn TWRP cho phép người dùng cuối sao lưu phân vùng (cust) và đặt tên hiển thị cho nó.

Phân vùng / misc có trong twrp.flags và phân vùng / oeminfo hướng dẫn TWRP cũng cho phép sao lưu và đặt tên hiển thị cho nó.

Chúng tôi cần dòng / data vì nhiều thiết bị Huawei được mã hóa, nhưng sử dụng các mã nhị phân đặc biệt của Huawei - do đó, chúng tôi sử dụng các mã nhị phân Huawei để tự động giải mã thiết bị trong Chế độ khôi phục. Vì vậy, ở đây dòng / data sẽ hướng dẫn TWRP sử dụng / dev / block / dm -0, chứ không phải / dev / block / bootdevice / by-name / userdata, thường được sử dụng để gắn 'thích hợp'.

Cuối cùng là / system_image, do đó TWRP sẽ bao gồm một tùy chọn để tạo hình ảnh hệ thống trong menu Sao lưu và Khôi phục.

Github TeamWin chính thức cũng phải chứa các cây thiết bị mẫu mới nhất cho các thiết bị có cổng TWRP chính thức. Có thể tìm thấy github TeamWin ĐÂY .

Sau khi Omni hoặc CM đã được đồng bộ hóa và bạn đã thiết lập cờ TWRP của mình, bạn nên tạo một nguồn ./build/envsetup.sh

Và bạn sẽ muốn 'ăn trưa' thiết bị, vì vậy, bạn có thể làm điều gì đó như 'ăn trưa omni_hammerhead.eng'.

Sau bữa trưa thành công, hầu hết các thiết bị sẽ sử dụng lệnh này:

Bạn cần thay thế # trong –j # bằng số lõi +1. Vì vậy, nếu bạn có lõi kép thì đó là –j3, điểm bốn sẽ là –j5, v.v. Thay thế số # bằng số lõi +1, vì vậy nếu bạn có lõi kép thì đó là -j3 và lõi tứ trở thành -j5, v.v.

Ngoài ra, các thiết bị Samsung điển hình sẽ yêu cầu điều này:

Điều này là do hầu hết các thiết bị Samsung bao gồm khôi phục như một đĩa ram bổ sung trong khởi động, thay vì trên một phân vùng khôi phục riêng biệt (mà hầu hết các thiết bị khác sử dụng).

Bây giờ, bạn đã biên dịch TWRP cho thiết bị của mình và hy vọng nó hoạt động trong môi trường giả lập. Trước tiên, bạn phải luôn kiểm tra cổng TWRP của mình trong môi trường giả lập, vì vậy bạn không gặp rủi ro khi làm hỏng thiết bị của mình.
Tải xuống bộ tệp cấu hình thiết bị này.

Biên dịch hình ảnh khôi phục bằng các tệp thiết bị đó. Trong SDK Android, nhấp vào Công cụ -> Quản lý AVD. Nhấp vào Mới. Thiết lập nó như sau:

Sau đó bấm OK.

Khi bạn có AVD và hình ảnh khôi phục của mình, bạn có thể khởi động TWRP trong trình giả lập bằng cách duyệt đến thư mục android-sdk / tools của bạn và chạy lệnh này:

Lưu ý rằng ADB không hoạt động ngay lập tức. Khoảng 10 đến 15 giây sau khi TWRP khởi động xong, ADB sẽ trực tuyến. Chúng tôi khởi động ADB qua init.rc vì vậy ngay cả khi TWRP không khởi động được do một số loại lỗi mã mà bạn có thể đã thực hiện, ADB vẫn sẽ hoạt động. Thưởng thức!

Thiết bị TWRP và A / B (tín dụng cho TeamWin):

Từ quan điểm TWRP, các thiết bị A / B không khác nhiều so với các thiết bị thông thường, nhưng các nhà phát triển có vẻ ngại làm việc trên các thiết bị này. Tôi sẽ cố gắng làm sáng tỏ chủ đề này và hy vọng đây sẽ là hướng dẫn để chuyển TWRP sang thiết bị A / B.

Trước tiên, hãy hiểu thiết bị A / B là gì và thiết bị này khác nhau như thế nào. Thiết bị A / B có bản sao của nhiều phân vùng trên thiết bị. Một thiết bị A / B có 2 phân vùng đồng bộ, 2 lần phân vùng khởi động, 2 lần phân vùng nhà cung cấp, 2 lần phân vùng modem / phần sụn, v.v. Mỗi lần chỉ sử dụng một khe cắm. Trong khi khởi động sớm, giai đoạn đầu tiên của bộ nạp khởi động đọc một số lượng nhỏ dữ liệu được gọi là BCB hoặc Khối điều khiển bộ nạp khởi động và quyết định khởi động phân vùng A hay phân vùng B. Khi có bản cập nhật OTA, dữ liệu từ vị trí đang hoạt động sẽ được sao chép từ vị trí không hoạt động và được vá / cập nhật. Ví dụ: nếu bạn hiện đang ở khe A, thiết bị của bạn sẽ tải xuống bản cập nhật và sao chép phân vùng hệ thống hiện có từ khe A và vá / cập nhật nó với các bản cập nhật mới vào khe B. Khi quá trình sao chép và cập nhật hoàn tất, BCB được cập nhật và thiết bị khởi động lại bằng khe B. Lần tới khi có bản cập nhật, phân vùng hệ thống trong khe B sẽ được sao chép vào khe A và được cập nhật, BCB sẽ được cập nhật và chúng tôi khởi động lại vào khe A. Khi xem các phân vùng trên thiết bị, bạn sẽ thấy một cái gì đó như thế này:

Lưu ý rằng khởi động kép, hệ thống và phân vùng nhà cung cấp trong danh sách trên, nhưng chỉ có một phân vùng dữ liệu người dùng.

Mặc dù về mặt kỹ thuật không có yêu cầu nào mà tôi biết, nhưng tất cả các thiết bị A / B được xuất xưởng cho đến nay đều không có phân vùng khôi phục riêng biệt. Thay vào đó, hình ảnh khởi động chứa khôi phục trong đĩa ram của nó. Điều quan trọng là biết rằng hình ảnh khởi động bây giờ cũng chứa phục hồi. Để hoàn chỉnh, phân vùng hệ thống là một hệ thống tệp gốc đầy đủ. Trong khi khởi động, nếu hạt nhân được yêu cầu khởi động để phục hồi, nó sẽ giải nén đĩa ram trong phân vùng khởi động. Nếu kernel không được bootloader yêu cầu khởi động để phục hồi, thì kernel sẽ gắn phân vùng hệ thống thích hợp (A hoặc B) vì phân vùng hệ thống là hệ thống tệp gốc đầy đủ. Điều này có nghĩa là phân vùng hệ thống trên các thiết bị này được gắn vào / thay vì / hệ thống và phân vùng hệ thống chứa tất cả các tệp thường nằm trong đĩa ram hình ảnh khởi động và một thư mục con / hệ thống.

Từ quan điểm TWRP, có 3 điều bạn phải làm đối với thiết bị A / B. Trước tiên, bạn cần đặt

Mã:

Cuối cùng, khi bạn vào TWRP, bạn có thể sẽ muốn đảm bảo rằng thông tin hal-bootctl phản hồi chính xác mà không có lỗi. Thông thường, nhị phân bootctl yêu cầu một thư viện độc quyền hoặc thậm chí một vài dịch vụ để hoạt động chính xác. Nếu bootctl không hoạt động chính xác, thì bạn cũng sẽ không thể chuyển đổi các khe cắm trong TWRP một cách chính xác.

Ngoài thiết lập

Mã:

AB_OTA_UPDATER: = true

bạn cũng có thể muốn đặt:

Mã:

BOARD_USES_RECOVERY_AS_BOOT: = true

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = true

Nếu bạn đặt

Mã:

BOARD_USES_RECOVERY_AS_BOOT: = true

sau đó làm cho hình ảnh khôi phục sẽ không còn hoạt động và thay vào đó bạn sẽ phải thực hiện kích thích. Tôi không khuyên bạn nên đặt một trong hai cờ này cho cây xây dựng chỉ TWRP. Các cờ này có thể sẽ được yêu cầu cho các nhà phát triển xây dựng ROM đầy đủ cho các thiết bị A / B.

Cài đặt / nhấp nháy TWRP trên thiết bị A / B:

Vì tất cả các thiết bị A / B đã biết không có phân vùng khôi phục riêng biệt, cuối cùng bạn sẽ phải flash TWRP vào phân vùng khởi động. Trên Pixel 1 và 2, chúng tôi sử dụng fastboot boot để khởi động tạm thời TWRP mà không cần flash TWRP. Sau đó, chúng tôi sẽ cung cấp một mã zip để cho phép người dùng flash TWRP vào cả hai khe. Bạn có thể tải xuống một trong những tệp nén này từ trang web của chúng tôi và cập nhật tệp nén khi cần thiết để hỗ trợ thiết bị của bạn. Cuối cùng, chúng tôi sẽ thêm các công cụ vào TWRP để cho phép người dùng flash khôi phục trên các thiết bị này mà không cần sử dụng khóa kéo.

Gần đây, tôi đã làm việc trên Razer Phone. Razer Phone rất tiếc không hỗ trợ khởi động fastboot. Thay vào đó, người dùng phải xác định vị trí khởi động hiện đang hoạt động của họ bằng cách sử dụng

Mã:

để tham gia TWRP. Khi ở trong TWRP, sau đó họ có thể truy cập trang khởi động lại và thay đổi trở lại vị trí hoạt động ban đầu, tạo bản sao lưu, sau đó cài đặt TWRP. Sử dụng khe cắm không hoạt động cho phép người dùng có được một bản sao lưu tốt, chưa sửa đổi thiết bị của họ trước khi cài đặt TWRP.

Ghi chú bổ sung:

Nếu bạn muốn nhận TWRP được hỗ trợ chính thức cho thiết bị của bạn để nó có thể được cài đặt tự động với ứng dụng TWRP và bạn thực sự muốn làm điều này để các chủ sở hữu khác của cùng một thiết bị có thể được hưởng hỗ trợ TWRP chính thức và đó là điều tốt để làm, bạn sẽ cần gửi thông tin sau tới TeamWin:

  1. Tệp cấu hình thiết bị để biên dịch TWRP từ nguồn cho thiết bị của bạn - không đóng gói lại recovery.img bằng tay , họ cần phải biên dịch nó từ nguồn.
  2. Sau khi TeamWin tạo một bản sao TWRP, họ sẽ gửi cho bạn để xác thực - sau khi bạn xác thực nó, TeamWin sẽ xây dựng một hình ảnh hoạt động cho thiết bị của bạn và thêm nó vào ứng dụng TWRP chính thức.
13 phút đọc