Cập nhật hệ thống không phải A / B

Trên các thiết bị Android cũ hơn không có phân vùng A/B, không gian flash thường chứa các phân vùng sau:

khởi động
Chứa nhân Linux và hệ thống tập tin gốc tối thiểu (được tải vào đĩa RAM). Nó gắn kết hệ thống và các phân vùng khác và bắt đầu thời gian chạy trên phân vùng hệ thống.
hệ thống
Chứa các ứng dụng và thư viện hệ thống có sẵn mã nguồn trên Dự án mã nguồn mở Android (AOSP). Trong quá trình hoạt động bình thường, phân vùng này được gắn ở chế độ chỉ đọc; nội dung của nó chỉ thay đổi trong quá trình cập nhật OTA.
người bán
Chứa các ứng dụng và thư viện hệ thống không có sẵn mã nguồn trên Dự án mã nguồn mở Android (AOSP). Trong quá trình hoạt động bình thường, phân vùng này được gắn ở chế độ chỉ đọc; nội dung của nó chỉ thay đổi trong quá trình cập nhật OTA.
dữ liệu người dùng
Lưu trữ dữ liệu được lưu bởi các ứng dụng do người dùng cài đặt, v.v. Phân vùng này thường không được xử lý bởi quá trình cập nhật OTA.
bộ nhớ đệm
Khu vực lưu giữ tạm thời được sử dụng bởi một số ứng dụng (truy cập vào phân vùng này yêu cầu quyền ứng dụng đặc biệt) và để lưu trữ các gói cập nhật OTA đã tải xuống. Các chương trình khác sử dụng không gian này với mong muốn các tập tin có thể biến mất bất cứ lúc nào. Một số cài đặt gói OTA có thể khiến phân vùng này bị xóa hoàn toàn. Bộ đệm cũng chứa nhật ký cập nhật từ bản cập nhật OTA.
sự hồi phục
Chứa hệ thống Linux hoàn chỉnh thứ hai, bao gồm hạt nhân và tệp nhị phân khôi phục đặc biệt đọc gói và sử dụng nội dung của gói đó để cập nhật các phân vùng khác.
linh tinh
Phân vùng nhỏ được khôi phục sử dụng để lưu trữ một số thông tin về những gì nó đang thực hiện trong trường hợp thiết bị được khởi động lại trong khi gói OTA đang được áp dụng.

Cuộc sống của một bản cập nhật OTA

Một bản cập nhật OTA điển hình bao gồm các bước sau:

  1. Thiết bị thực hiện kiểm tra thường xuyên với máy chủ OTA và được thông báo về tính khả dụng của bản cập nhật, bao gồm URL của gói cập nhật và chuỗi mô tả để hiển thị cho người dùng.
  2. Cập nhật nội dung tải xuống vào bộ đệm hoặc phân vùng dữ liệu và chữ ký mật mã của nó được xác minh dựa trên các chứng chỉ trong /system/etc/security/otacerts.zip . Người dùng được nhắc cài đặt bản cập nhật.
  3. Thiết bị khởi động lại vào chế độ khôi phục, trong đó hạt nhân và hệ thống trong phân vùng khôi phục được khởi động thay vì hạt nhân trong phân vùng khởi động.
  4. Phục hồi nhị phân được bắt đầu bởi init. Nó tìm thấy các đối số dòng lệnh trong /cache/recovery/command trỏ nó đến gói đã tải xuống.
  5. Recovery xác minh chữ ký mật mã của gói dựa trên các khóa chung trong /res/keys (một phần của đĩa RAM có trong phân vùng khôi phục).
  6. Dữ liệu được lấy từ gói và được sử dụng để cập nhật các phân vùng khởi động, hệ thống và/hoặc nhà cung cấp khi cần thiết. Một trong những tệp mới còn lại trên phân vùng hệ thống chứa nội dung của phân vùng khôi phục mới.
  7. Thiết bị khởi động lại bình thường.
    1. Phân vùng khởi động mới cập nhật được tải, nó gắn kết và bắt đầu thực thi các tệp nhị phân trong phân vùng hệ thống mới cập nhật.
    2. Là một phần của quá trình khởi động bình thường, hệ thống sẽ kiểm tra nội dung của phân vùng khôi phục dựa trên nội dung mong muốn (trước đây được lưu trữ dưới dạng tệp trong /system ). Chúng khác nhau nên phân vùng khôi phục sẽ được khôi phục với nội dung mong muốn. (Trong những lần khởi động tiếp theo, phân vùng khôi phục đã chứa nội dung mới nên không cần phải khởi động lại.)

Quá trình cập nhật hệ thống đã hoàn tất! Nhật ký cập nhật có thể được tìm thấy trong /cache/recovery/last_log. # .

Cập nhật gói

Gói cập nhật là tệp .zip chứa tệp nhị phân thực thi META-INF/com/google/android/update-binary . Sau khi xác minh chữ ký trên gói, recovery sẽ trích xuất tệp nhị phân này sang /tmp và chạy tệp nhị phân, chuyển các đối số sau:

  • Cập nhật số phiên bản API nhị phân . Nếu các đối số được truyền cho bản cập nhật nhị phân thay đổi thì con số này sẽ tăng lên.
  • Mô tả tập tin của ống lệnh . Chương trình cập nhật có thể sử dụng đường ống này để gửi lệnh trở lại tệp nhị phân khôi phục, chủ yếu là để thay đổi giao diện người dùng, chẳng hạn như cho biết tiến trình cho người dùng.
  • Tên tệp của gói cập nhật tệp .zip .

Gói cập nhật có thể sử dụng bất kỳ tệp nhị phân được liên kết tĩnh nào làm tệp nhị phân cập nhật. Các công cụ xây dựng gói OTA sử dụng chương trình cập nhật ( bootable/recovery/updater ), cung cấp ngôn ngữ kịch bản đơn giản có thể thực hiện nhiều tác vụ cài đặt. Bạn có thể thay thế bất kỳ tệp nhị phân nào khác đang chạy trên thiết bị.

Để biết chi tiết về tệp nhị phân của trình cập nhật, cú pháp chỉnh sửa và các hàm dựng sẵn, hãy xem Bên trong các gói OTA .

Di chuyển từ các bản phát hành trước

Khi di chuyển từ bản phát hành Android 2.3/3.0/4.0, thay đổi lớn là việc chuyển đổi tất cả chức năng dành riêng cho thiết bị từ một tập hợp các hàm C có tên được xác định trước sang đối tượng C++. Bảng sau liệt kê các hàm cũ và các phương thức mới phục vụ mục đích gần như tương đương:

hàm C Phương pháp C++
device_recovery_start() Thiết bị::RecoveryStart()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(cũng là RecoveryUI::IsKeyPressed())
device_handle_key() Thiết bị::HandleMenuKey()
device_perform_action() Thiết bị::InvokeMenuItem()
device_wipe_data() Thiết bị::WipeData()
thiết bị_ui_init() ScreenRecoveryUI::Init()

Việc chuyển đổi các hàm cũ sang các phương thức mới phải đơn giản một cách hợp lý. Đừng quên thêm hàm make_device() mới để tạo và trả về một phiên bản của lớp con Thiết bị mới của bạn.