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 quy trình kiểm thử tuân thủ CTS-on-GSI/VTS đã thay đổi từ loại bản dựng userdebug thành userbuild để đượ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ị xây dựng của người dùng.

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

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

Bộ kiểm thử Kiểm thử bằng Tạo Gỡ lỗi ramdisk adb gốc không? Thay đổi biến thể bản dựng Android 9 –> 10
CTS Hệ thống của OEM người dùng Không Không Không có thay đổi
CTS trên GSI GSI (Hình ảnh hệ thống chung) người dùng Không Không

gỡ lỗi người dùng -> GSI của người dùng

ký phát hành

STS Hệ thống của nhà sản xuất thiết bị gốc (OEM) userdebug Không Mới trong Q
VTS GSI người dùng

gỡ lỗi người dùng -> GSI của 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 cài đặt ROM 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).

Để Hình ảnh hạt nhân chung (GKI) sử dụng các thiết bị có phân vùng vendor_boot, boot-debug.img không được được cài đặt nhanh, vì phân vùng boot phải được cài đặt ROM bằng hình ảnh GKI được chứng nhận. Thay vào đó, bạn nên cài đặt ROM vendor_boot-debug.img vào phân vùng vendor_boot để hỗ trợ gỡ lỗi ramdisk.

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

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

Ổ đĩa RAM gỡ lỗi sẽ không được tạo hoặc sử dụng để nâng cấp các thiết bị có:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE đúng
  • skip_initramfs trong dòng lệnh kernel

GSI Android 12

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

Kể từ ngày 29/9/2021, gỡ lỗi ổ đĩa RAM không còn yêu cầu cập nhật bằng Công cụ repack_bootimg. GSI Android 12 bản dựng sau SGR1.210929.001 (7777720) kết hợp các tính năng mới nhất Tệp userdebug_plat_sepolicy.cil trong system.img của nó và bỏ qua userdebug_plat_sepolicy.cil khỏi ổ đĩa RAM 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 sử dụng, hệ thống sepolicy được tải từ tệp userdebug_plat_sepolicy.cil trong phần gỡ lỗi ổ đĩa ram của boot-debug.img hoặc vendor_boot-debug.img. Để khởi động GSI hãy luôn kết hợp các thay đổi mới nhất về chính sách từ android11-gsi để tạo lại boot-debug.img hoặc vendor_boot-debug.img.

Ngoài ra, bạn có thể sử dụng công cụ repack_bootimg để tạo lại boot-debug.img hoặc vendor_boot-debug.img có chính sách cấu hình GSI đã cập nhật.

Đóng gói lại ổ đĩa RAM gỡ lỗi

Thay vì kết hợp các thay đổi sepolicy để xây dựng lại boot-debug.img, các đối tác có thể sử dụng repack_bootimg để cập nhật tệp chính sách GSI của Hệ thống thông tin chung (GSI) vào boot-debug.img (hoặc vendor_boot-debug.img nếu thiết bị sử dụng GKI).

Sau đây là các bước:

  1. Tải otatools.zip xuống từ https://ci.android.com. Bạn nên tải xuống từ cấu phần phần mềm bản dựng của aosp_arm64-userdebug vào aosp-main.

  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 sử dụng. Ví dụ: nếu bạn đang sử dụng GSI arm64 của RJR1.211020.001 (7840830), sau đó 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 của 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

    Các đối số của --ramdisk_add có thể được điều chỉnh theo thiết bị . Hãy xem phần tiếp theo để biết nội dung giải thích chi tiết.

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

repack_bootimg ở trên sao chép tệp userdebug_plat_sepolicy.cil từ ổ đĩa RAM --src_bootimg vào ổ đĩa RAM --dst_bootimg. Tuy nhiên, đường dẫn trong ổ đĩa ram gỡ lỗi có thể khác nhau tuỳ theo phiên bản Android. Ngang bằng Android 10 và 11, đường dẫn là first_stage_ramdisk/userdebug_plat_sepolicy.cil cho các thiết bị có androidboot.force_normal_boot=1 trong dòng lệnh của nhân. Nếu không, giá trị đường dẫn là userdebug_plat_sepolicy.cil.

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

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

Kể từ Android 12, đường dẫn trong một ổ đĩa RAM gỡ lỗi luôn là userdebug_plat_sepolicy.cil, bất kể androidboot.force_normal_boot=1 có tồn tại trong dòng lệnh hạt nhân hay không. Nội dung sau đây bảng hiển thị đường dẫn trong một ổ đĩa ram 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 khởi động bằng-gỡ lỗi-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 các tệp từ và sang các đường dẫn khác bằng một danh sách src_path:dst_path cặp. Ví dụ: các lệnh sau đây sao chép gửi first_stage_ramdisk/userdebug_plat_sepolicy.cil từ boot-with-debug-ramdisk-5.4.img trên Android 11 sang first_stage_ramdisk/userdebug_plat_sepolicy.cil trong vendor_boot-debug.img của 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 kernel, thì lệnh sẽ được điều chỉ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 truyền đến --dst_bootimg được định cấu hình là một Theo chuỗi AVB bạn cần thêm chân trang AVB sau khi chạy 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 theo chuỗi hay không.

avbtool info_image --image vendor_boot-debug.img

Nếu ban đầu có chân trang AVB theo chuỗi thì bạn cần thêm chân trang AVB sau khi chạy lệnh repack_bootimg. Việc sử dụng bất kỳ khoá kiểm thử nào để ký vendor_boot-debug.img đều hoạt động vì bạn chỉ có thể sử dụng ramdisk gỡ lỗi khi thiết bị được mở khoá, cho phép 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