Kiểm thử VTS bằng ramdisk gỡ lỗi

Kể từ Android 10, Hình ảnh hệ thống chung (GSI) dùng để chạy hoạt động kiểm thử tuân thủ CTS-on-GSI/VTS đã thay đổi từ loại bản dựng userdebug sang loại bản dựng người dùng để được ký phát hành. Đây là vấn đề đối với hoạt động kiểm thử VTS vì VTS yêu cầu adb root chạy, nhưng adb root không có trên thiết bị bản dựng người dùng.

Ổ đĩa RAM gỡ lỗi (hoặc hình ảnh khởi động gỡ lỗi) được giới thiệu để bật adb root trên thiết bị bản dựng người dùng có trình tải khởi động chưa khoá. Điều này giúp đơn giản hoá quy trình kiểm thử bằng cách sử dụng cùng một GSI system.img bản dựng người dùng cho CTS-on-GSI và VTS-on-GSI. Đối với chế độ thiết lập STS, bạn vẫn phải sử dụng một system.img OEM gỡ lỗi người dùng khác.

Bảng sau đây cho thấy những thay đổi về hình ảnh và loại bản dựng để kiểm thử khả năng tuân thủ trong Android 10.

Bộ thử nghiệm Kiểm thử bằng Tạo Gỡ lỗi ramdisk adb root? Thay đổi biến thể bản dựng từ Android 9 sang 10
CTS Hệ thống của OEM người dùng Không Không Không có thay đổi
CTS-on-GSI GSI người dùng Không Không

userdebug -> GSI người dùng

bản phát hành đã ký

STS Hệ thống của OEM userdebug Không Tính năng mới trong Android Q
VTS GSI người dùng

userdebug -> GSI người dùng

bản phát hành đã ký

Tổng quan

Các tệp hình ảnh bổ sung này được tạo trong thư mục bản dựng (${ANDROID_PRODUCT_OUT}):

  • boot-debug.img
  • vendor_boot-debug.img

Khi boot-debug.img được lưu vào phân vùng boot của thiết bị, phiên bản userdebug của tệp sepolicy hệ thống và một tệp thuộc tính bổ sung, adb_debug.prop, sẽ được tải. Điều này cho phép adb root với bản dựng người dùng system.img (của GSI hoặc OEM).

Đối với Hình ảnh nhân chung (GKI) bằng cách sử dụng các thiết bị có phân vùng vendor_boot, bạn không được flash boot-debug.img, vì phân vùng boot phải được flash bằng hình ảnh GKI đã được chứng nhận. Thay vào đó, vendor_boot-debug.img sẽ được chuyển vào phân vùng vendor_boot để tạo điều kiện thuận lợi cho ramdisk gỡ lỗi.

Điều kiện tiên quyết để sử dụng ramdisk gỡ lỗi

Ramdisk gỡ lỗi do OEM chạy các bài kiểm thử tuân thủ cung cấp. Khoá này không được ký phát hành và chỉ có thể dùng nếu thiết bị đã mở khoá.

Ramdisk gỡ lỗi sẽ không được tạo hoặc dùng để nâng cấp thiết bị có:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE true
  • skip_initramfs trong dòng lệnh của hạt nhân

GSI Android 12

Bạn không cần có thêm hướng dẫn để sử dụng ramdisk gỡ lỗi với GSI Android 12.

Kể từ ngày 29/9/2021, bạn không cần phải cập nhật ramdisk gỡ lỗi bằng công cụ repack_bootimg nữa. Bản dựng GSI Android 12 sau SGR1.210929.001 (7777720) sẽ kết hợp tệp userdebug_plat_sepolicy.cil mới nhất trong system.img và bỏ qua userdebug_plat_sepolicy.cil khỏi ramdisk gỡ lỗi. Hãy xem CL để biết thông tin chi tiết.

GSI Android 11

Khi boot-debug.img hoặc vendor_boot-debug.img được dùng, sepolicy hệ thống sẽ được tải từ tệp userdebug_plat_sepolicy.cil trong ramdisk gỡ lỗi của boot-debug.img hoặc vendor_boot-debug.img. Để khởi động hình ảnh GSI, vui lòng luôn kết hợp các thay đổi mới nhất về sepolicy từ nhánh android11-gsi để tạo lại boot-debug.img hoặc vendor_boot-debug.img.

Ngoài ra, bạn có thể dùng công cụ repack_bootimg để tạo lại boot-debug.img hoặc vendor_boot-debug.img bằng sepolicy GSI mới cập nhật.

Đóng gói lại ổ đĩa ngẫu nhiên gỡ lỗi

Thay vì kết hợp các thay đổi về sepolicy để tạo lại boot-debug.img, các đối tác có thể dùng repack_bootimg để cập nhật tệp sepolicy GSI thành boot-debug.img (hoặc vendor_boot-debug.img nếu thiết bị dùng GKI).

Sau đây là các bước thực hiện:

  1. Tải otatools.zip xuống từ https://ci.android.com. Bạn nên tải xuống từ các cấu phần phần mềm của bản dựng aosp_cf_arm64_only_phone-userdebug trên nhánh aosp-android-latest-release.

  2. Thiết lập môi trường thực thi cho repack_bootimg:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
  3. Tải userdebug_plat_sepolicy.cil hoặc boot-with-debug-ramdisk-${KERNEL_VERSION}.img xuống từ bản dựng GSI mà bạn đang dùng. Ví dụ: nếu bạn đang sử dụng GSI arm64 từ RJR1.211020.001 (7840830), hãy tải xuống từ https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.

  4. Cập nhật boot-debug.img hoặc vendor_boot-debug.img trên thiết bị bằng userdebug_plat_sepolicy.cil:

    repack_bootimg --local --dst_bootimg boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --local --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

    Với boot-with-debug-ramdisk-${KERNEL_VERSION}.img:

    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

    Bạn có thể điều chỉnh các đối số của --ramdisk_add theo cấu hình thiết bị. Hãy xem phần tiếp theo để biết giải thích chi tiết.

Đường dẫn của sepolicy userdebug

Lệnh repack_bootimg ở trên sẽ sao chép tệp userdebug_plat_sepolicy.cil từ ramdisk của --src_bootimg sang ramdisk của --dst_bootimg. Tuy nhiên, đường dẫn trong một ramdisk gỡ lỗi có thể khác nhau ở các phiên bản Android khác nhau. Trong Android 10 và 11, đường dẫn là first_stage_ramdisk/userdebug_plat_sepolicy.cil đối với các thiết bị có androidboot.force_normal_boot=1 trong dòng lệnh của nhân. Nếu không, đường dẫn sẽ là userdebug_plat_sepolicy.cil.

Chạy lệnh sau để kiểm tra xem có androidboot.force_normal_boot trong dòng lệnh của nhân hay không:

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

Kể từ Android 12, đường dẫn trong ramdisk gỡ lỗi luôn là userdebug_plat_sepolicy.cil, bất kể có androidboot.force_normal_boot=1 trong dòng lệnh của nhân hay không. Bảng sau đây cho thấy các đường dẫn trong ramdisk gỡ lỗi ở các phiên bản Android khác nhau.

Hình ảnh gỡ lỗi Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img Không áp dụng first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
boot-debug.img dành riêng cho thiết bị Phụ thuộc vào force_normal_boot Phụ thuộc vào force_normal_boot userdebug_plat_sepolicy.cil
vendor_boot-debug.img dành riêng cho thiết bị Không áp dụng Phụ thuộc vào force_normal_boot userdebug_plat_sepolicy.cil

Bạn có thể chỉ định --ramdisk_add để sao chép tệp từ và đến các đường dẫn khác nhau bằng danh sách các cặp src_path:dst_path. Ví dụ: lệnh sau đây sao chép tệp first_stage_ramdisk/userdebug_plat_sepolicy.cil từ boot-with-debug-ramdisk-5.4.img Android 11 sang first_stage_ramdisk/userdebug_plat_sepolicy.cil trong vendor_boot-debug.img Android 11.

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

Nếu không có androidboot.force_normal_boot=1 trong dòng lệnh của nhân, thì bạn nên điều chỉnh lệnh như bên dưới để thay đổi đường dẫn đích thành userdebug_plat_sepolicy.cil.

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil

Nếu hình ảnh được truyền đến --dst_bootimg được định cấu hình dưới dạng một phân vùng được liên kết AVB, thì bạn cần thêm một chân trang AVB sau khi chạy lệnh repack_bootimg.

Ví dụ: trước khi chạy repack_bootimg, hãy chạy lệnh sau để kiểm tra xem vendor_boot-debug.img có chân trang AVB được liên kết hay không.

avbtool info_image --image vendor_boot-debug.img

Nếu ban đầu có một chân trang AVB được liên kết, thì bạn cần thêm một chân trang AVB sau khi chạy lệnh repack_bootimg. Việc sử dụng khoá kiểm thử bất kỳ để ký vendor_boot-debug.img đều có tác dụng vì ramdisk gỡ lỗi chỉ có thể được dùng khi thiết bị được mở khoá, cho phép các hình ảnh được ký bằng khoá không phát hành trên phân vùng boot hoặc vendor_boot.

avbtool add_hash_footer --partition_name vendor_boot \
    --partition_size 100663296 \
    --algorithm SHA256_RSA4096 \
    --key otatools/external/avb/test/data/testkey_rsa4096.pem \
    --image vendor_boot-debug.img