Hỗ trợ Android 10 phân vùng động, phân vùng không gian người dùng có thể tạo, thay đổi kích thước và huỷ bỏ phân vùng trong các bản cập nhật qua mạng không dây (OTA).
Trang này mô tả cách ứng dụng OTA đổi kích thước phân vùng động trong quá trình cập nhật thiết bị A/B đã ra mắt mà không hỗ trợ phân vùng động và cách các ứng dụng OTA nâng cấp lên Android 10.
Thông tin khái quát
Trong quá trình cập nhật một thiết bị A/B để hỗ trợ phân vùng động,
Bảng phân vùng GUID (GPT) trên thiết bị được giữ nguyên, vì vậy không có
Phân vùng super
trên thiết bị. Siêu dữ liệu được lưu trữ tại
system_a
và system_b
, nhưng điều này có thể là
được tuỳ chỉnh bằng cách thay đổi BOARD_SUPER_PARTITION_METADATA_DEVICE
.
Mỗi thiết bị khối có 2 khe siêu dữ liệu. Chỉ một
vị trí siêu dữ liệu trong mỗi thiết bị khối được sử dụng. Ví dụ: Siêu dữ liệu 0 ở
system_a
và Siêu dữ liệu 1 tại system_b
tương ứng với các phân vùng tại khe A và B. Tại
thời gian chạy, không quan trọng là vị trí nào đang được cập nhật.
Trong trang này, các vùng siêu dữ liệu được gọi là Metadata S (Siêu dữ liệu)
(nguồn) và siêu dữ liệu T (mục tiêu). Tương tự, phân vùng được tham chiếu
thành system_s
, vendor_t
, v.v.
Để biết thêm thông tin về cấu hình hệ thống xây dựng, hãy xem Nâng cấp thiết bị.
Để biết thêm thông tin về cách các phân vùng phụ thuộc vào bản cập nhật nhóm, hãy xem Lên máy bay các thay đổi về cấu hình cho thiết bị mới.
Ví dụ về siêu dữ liệu trên một thiết bị:
- Thiết bị khối vật lý
system_a
- Siêu dữ liệu 0
- Nhóm
foo_a
- Phân vùng logic (động)
system_a
- Phân vùng logic (động)
product_services_a
- Các phân vùng khác do Foo cập nhật
- Phân vùng logic (động)
- Nhóm
bar_a
- Phân vùng logic (động)
vendor_a
- Phân vùng logic (động)
product_a
- Các phân vùng khác do Bar cập nhật
- Phân vùng logic (động)
- Nhóm
- Siêu dữ liệu 1 (không được sử dụng)
- Siêu dữ liệu 0
- Thiết bị khối vật lý
system_b
- Siêu dữ liệu 0 (không được sử dụng)
- Siêu dữ liệu 1
- Nhóm foo_b
- Phân vùng logic (động)
system_b
- Phân vùng logic (động)
product_services_b
- Các phân vùng khác do Foo cập nhật
- Phân vùng logic (động)
- Nhóm bar_b
- Phân vùng logic (động)
vendor_b
- Phân vùng logic (động)
product_b
- Các phân vùng khác do Bar cập nhật
- Phân vùng logic (động)
- Nhóm foo_b
Bạn có thể sử dụng công cụ lpdump
trong
system/extras/partition_tools
để kết xuất siêu dữ liệu
thiết bị của bạn. Ví dụ:
lpdump --slot 0 /dev/block/by-name/system_a
lpdump --slot 1 /dev/block/by-name/system_b
Retrofit bản cập nhật
Trên các thiết bị chạy Android 9 trở xuống, ứng dụng OTA trên thiết bị không hỗ trợ liên kết phân vùng động trước khi cập nhật. Một tạo một nhóm bản vá bổ sung để có thể áp dụng ánh xạ trực tiếp vào các phân vùng thực tế hiện có.
Trình tạo OTA sẽ tạo tệp super.img
cuối cùng
chứa nội dung của tất cả các phân vùng động, sau đó chia tách hình ảnh
thành nhiều hình ảnh phù hợp với kích thước của thiết bị khối thực
tương ứng với hệ thống, nhà cung cấp, v.v. Những hình ảnh này được đặt tên
super_system.img
, super_vendor.img
, v.v.
Ứng dụng OTA áp dụng những hình ảnh này vào các phân vùng thực tế, thay vì
so với việc áp dụng hình ảnh cho phân vùng logic (động).
Do ứng dụng OTA không biết cách ánh xạ các phân vùng động, tất cả các bước sau khi cài đặt sẽ tự động bị tắt cho các phân vùng này khi gói cập nhật được tạo. Xem Định cấu hình sau khi cài đặt để biết thêm chi tiết.
Quy trình cập nhật giống như trên Android 9.
Trước khi cập nhật:
ro.boot.dynamic_partitions= ro.boot.dynamic_partitions_retrofit=
Sau khi cập nhật:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Các bản cập nhật trong tương lai sau khi cải tiến
Sau khi được cập nhật, ứng dụng OTA sẽ được cập nhật để tương thích với phân vùng động. Số lượng của các phân vùng nguồn không bao giờ mở rộng trên các phân vùng thực tế mục tiêu.
Cập nhật quy trình bằng gói cập nhật thông thường
- Khởi động siêu dữ liệu phân vùng
super
.-
Tạo siêu dữ liệu M mới từ Metadata S (siêu dữ liệu nguồn).
Ví dụ: nếu Metadata S sử dụng [
system_s
,vendor_s
,product_s
] ở dạng khối thì siêu dữ liệu M mới sử dụng [system_t
,vendor_t
,product_t
] ở dạng khối thiết bị. Tất cả các nhóm và phân vùng đều bị loại bỏ trong M. -
Thêm nhóm mục tiêu và phân vùng theo
Trường
dynamic_partition_metadata
trong bản cập nhật tệp kê khai. Bạn có thể xem kích thước của mỗi phân vùng trongnew_partition_info
. - Ghi M vào Metadata T.
- Ánh xạ các phân vùng đã thêm trên trình liên kết thiết bị dưới dạng có thể ghi.
-
Tạo siêu dữ liệu M mới từ Metadata S (siêu dữ liệu nguồn).
Ví dụ: nếu Metadata S sử dụng [
- Áp dụng bản cập nhật trên các thiết bị chặn.
- Nếu cần, hãy liên kết các phân vùng nguồn trên trình liên kết thiết bị ở dạng chỉ đọc. Điều này là cần thiết để cài đặt không qua cửa hàng ứng dụng vì các phân vùng nguồn không được liên kết trước khi cập nhật.
- Áp dụng bản cập nhật đầy đủ hoặc bản cập nhật delta cho tất cả các thiết bị chặn tại vùng mục tiêu.
- Gắn kết các phân vùng để chạy tập lệnh sau cài đặt, sau đó ngắt kết nối các phân vùng.
- Huỷ liên kết các phân vùng mục tiêu.
Cập nhật quy trình bằng gói cập nhật Retrofit
Nếu gói cập nhật Retrofit được áp dụng trên một thiết bị đã
bật phân vùng động, ứng dụng OTA sẽ áp dụng phần phân tách
super.img
tệp trực tiếp trên các thiết bị chặn. Bản cập nhật
quy trình này cũng tương tự như
bản cập nhật cải tiến. Xem
Bổ sung tính năng cho bản cập nhật
để biết thông tin chi tiết.
Ví dụ: giả sử như sau:
- Vị trí A là vị trí đang hoạt động.
-
system_a
chứa siêu dữ liệu đang hoạt động tại vị trí 0. -
system_a
,vendor_a
vàproduct_a
được dùng làm thiết bị khối.
Khi ứng dụng OTA nhận được một gói cập nhật Retrofit, gói này sẽ được áp dụng
super_system.img
trên system_b
thực,
super_vendor.img
trên vendor_b
thực tế và
super_product.img
vào product_b
thực.
Thiết bị khối vật lý system_b
chứa đúng
siêu dữ liệu để liên kết system_b
logic,
vendor_b
và product_b
tại thời điểm khởi động.
Tạo gói cập nhật
OTA gia tăng
Khi tạo OTA gia tăng cho thiết bị trang bị thêm, các bản cập nhật
phụ thuộc vào việc bản dựng cơ sở có xác định
PRODUCT_USE_DYNAMIC_PARTITIONS
và
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
.
-
Nếu bản dựng cơ sở không xác định biến, đây là
đang sửa đổi bản cập nhật. Gói cập nhật chứa phần phân tách
super.img
và vô hiệu hoá bước sau khi cài đặt. - Nếu bản dựng cơ sở có xác định các biến, thì giống như việc thông thường với phân vùng động. Gói cập nhật chứa hình ảnh cho phân vùng logic (động). Chiến lược phát hành đĩa đơn bước sau cài đặt.
OTA đầy đủ
Hai gói OTA đầy đủ được tạo cho các thiết bị Retrofit.
-
$(PRODUCT)-ota-retrofit-$(TAG).zip
luôn chứa phân táchsuper.img
và tắt bước sau khi cài đặt để sửa đổi bản cập nhật.-
Hàm này được tạo với một đối số bổ sung
--retrofit_dynamic_partitions
vào Tập lệnhota_from_target_files
. - Chỉ số này có thể áp dụng cho mọi bản dựng.
-
Hàm này được tạo với một đối số bổ sung
-
$(PRODUCT)-ota-$(TAG).zip
chứa hình ảnh logic cho các bản cập nhật trong tương lai.- Chỉ áp dụng quy tắc này cho các bản dựng có phân vùng động bật. Hãy xem thông tin chi tiết bên dưới để biết cách thực thi chính sách này.
Từ chối bản cập nhật không phải Retrofit trên bản dựng cũ
Chỉ áp dụng gói OTA đầy đủ thông thường cho các bản dựng có đã bật phân vùng động. Nếu máy chủ OTA được định cấu hình không chính xác và đẩy các gói này sang thiết bị chạy Android 9 hoặc thấp hơn, thiết bị không khởi động được. Ứng dụng OTA trên Android 9 và không thể phân biệt giữa gói OTA trang bị thêm và gói gói OTA đầy đủ thông thường, để ứng dụng khách sẽ không từ chối toàn bộ gói.
Để ngăn thiết bị chấp nhận gói OTA đầy đủ, bạn có thể bạn cần thực hiện một bước sau khi cài đặt để kiểm tra thiết bị hiện có . Ví dụ:
device/device_name/dynamic_partitions/check_dynamic_partitions
#!/system/bin/sh DP_PROPERTY_NAME="ro.boot.dynamic_partitions" DP_RETROFIT_PROPERTY_NAME="ro.boot.dynamic_partitions_retrofit" DP_PROPERTY=$(getprop ${DP_PROPERTY_NAME}) DP_RETROFIT_PROPERTY=$(getprop ${DP_RETROFIT_PROPERTY_NAME}) if [ "${DP_PROPERTY}" != "true" ] || [ "${DP_RETROFIT_PROPERTY}" != "true" ] ; then echo "Error: applied non-retrofit update on build without dynamic" \ "partitions." echo "${DP_PROPERTY_NAME}=${DP_PROPERTY}" echo "${DP_RETROFIT_PROPERTY_NAME}=${DP_RETROFIT_PROPERTY}" exit 1 fi
device/device_name/dynamic_partitions/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= check_dynamic_partitions LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := check_dynamic_partitions LOCAL_PRODUCT_MODULE := true include $(BUILD_PREBUILT)
device/device_name/device.mk
PRODUCT_PACKAGES += check_dynamic_partitions # OPTIONAL=false so that the error in check_dynamic_partitions will be # propagated to OTA client. AB_OTA_POSTINSTALL_CONFIG += \ RUN_POSTINSTALL_product=true \ POSTINSTALL_PATH_product=bin/check_dynamic_partitions \ FILESYSTEM_TYPE_product=ext4 \ POSTINSTALL_OPTIONAL_product=false \
Khi gói OTA thông thường được áp dụng trên một thiết bị không có linh động
đã bật phân vùng, ứng dụng OTA sẽ chạy
check_dynamic_partitions
làm bước sau khi cài đặt và
từ chối cập nhật.