اختبار VTS مع debug ramdisk

منذ Android 10، تم تغيير صورة النظام العامة (GSI) المستخدمة لتشغيل اختبار الامتثال لـ CTS-on-GSI/VTS من userdebug إلى نوع إصدار المستخدم حتى يتم توقيع الإصدار. هذه مشكلة بالنسبة لاختبار VTS لأن VTS يتطلب adb root للتشغيل، ولكن adb root غير متوفر على جهاز بناء المستخدم.

تم تقديم قرص تصحيح الأخطاء (أو صورة تمهيد تصحيح الأخطاء) لتمكين adb root على جهاز بناء المستخدم الذي تم إلغاء قفل أداة تحميل التشغيل الخاصة به. يعمل هذا على تبسيط تدفق الاختبار باستخدام نفس المستخدم لبناء GSI system.img لـ CTS-on-GSI وVTS-on-GSI. لإعداد STS، لا يزال استخدام userdebug OEM system.img آخر مطلوبًا.

يعرض الجدول التالي تغييرات الصورة ونوع التصميم لاختبار التوافق في Android 10.

حزمة اختبار اختبار مع يبني تصحيح قرص الذاكرة بنك التنمية الآسيوي الجذر؟ Android 9 -> 10 تغيير متغير البناء
CTS نظام تصنيع المعدات الأصلية مستخدم ن ن لا تغيير
CTS على GSI جي إس آي مستخدم ن ن

userdebug -> المستخدم GSI

تم التوقيع على الافراج

اس تي اس نظام تصنيع المعدات الأصلية com.userdebug ن ي الجديد في س
VTS جي إس آي مستخدم ي ي

userdebug -> المستخدم GSI

تم التوقيع على الافراج

ملخص

يتم إنشاء ملفات الصور الإضافية هذه ضمن مجلد البناء ( ${ANDROID_PRODUCT_OUT} ):

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

عندما يتم وميض boot-debug.img على قسم boot بالجهاز، يتم تحميل إصدار userdebug لملف sepolicy النظام وملف خاصية إضافي، adb_debug.prop . يسمح هذا adb root من خلال إنشاء المستخدم system.img (إما GSI أو OEM).

بالنسبة لصورة Kernel العامة (GKI) التي تستخدم الأجهزة التي تحتوي على قسم vendor_boot ، يجب عدم وميض boot-debug.img ، حيث يجب وميض قسم boot بصورة GKI معتمدة. بدلاً من ذلك، يجب أن يتم وميض vendor_boot-debug.img على قسم vendor_boot لتسهيل تصحيح أخطاء قرص الذاكرة العشوائي.

المتطلبات الأساسية لاستخدام قرص تصحيح الأخطاء

يتم توفير قرص تصحيح الأخطاء بواسطة الشركة المصنعة للمعدات الأصلية (OEM) التي تجري اختبارات التوافق. ويجب ألا يكون الإصدار موقعًا، ولا يمكن استخدامه إلا إذا كان الجهاز مفتوحًا.

لن يتم إنشاء قرص تصحيح الأخطاء أو استخدامه لترقية الأجهزة باستخدام:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE صحيح
  • skip_initramfs في سطر أوامر kernel

أندرويد 12 جي إس آي

لا توجد تعليمات إضافية مطلوبة لاستخدام تصحيح الأخطاء مع Android 12 GSI.

بدءًا من 29/09/2021، لم تعد أقراص تصحيح الأخطاء تتطلب التحديث باستخدام أداة repack_bootimg . يتضمن إصدار Android 12 GSI بعد SGR1.210929.001 (7777720) ملف userdebug_plat_sepolicy.cil المحدث في نظامه system.img ويتجاهل userdebug_plat_sepolicy.cil من قرص تصحيح الأخطاء. راجع CLs للحصول على التفاصيل.

أندرويد 11 جي إس آي

عند استخدام boot-debug.img أو vendor_boot-debug.img ، يتم تحميل سياسة النظام من ملف userdebug_plat_sepolicy.cil في قرص تصحيح الأخطاء الخاص بـ boot-debug.img أو vendor_boot-debug.img . من أجل تشغيل صور GSI، يرجى دائمًا دمج تغييرات سياسة الأمان الحديثة من فرع android11-gsi لإعادة بناء boot-debug.img أو vendor_boot-debug.img .

وبدلاً من ذلك، يمكن استخدام أداة repack_bootimg لإعادة إنشاء boot-debug.img أو vendor_boot-debug.img باستخدام سياسة GSI المحدثة.

أعد حزم قرص تصحيح الأخطاء

بدلاً من دمج تغييرات سياسة الخصوصية لإعادة إنشاء boot-debug.img ، يمكن للشركاء استخدام repack_bootimg لتحديث ملف سياسة حماية GSI إلى boot-debug.img (أو vendor_boot-debug.img إذا كان الجهاز يستخدم GKI).

والخطوات هي كما يلي:

  1. قم بتنزيل otatools.zip من https://ci.android.com . نوصي بالتنزيل من عناصر البناء الخاصة بـ aosp_arm64-userdebug على aosp-main .

  2. قم بإعداد بيئة التنفيذ لـ repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. قم بتنزيل userdebug_plat_sepolicy.cil أو boot-with-debug-ramdisk-${KERNEL_VERSION}.img من إصدار GSI الذي تستخدمه. على سبيل المثال، إذا كنت تستخدم Arm64 GSI من RJR1.211020.001 (7840830) ، فقم بالتنزيل من https://ci.android.com/builds/subitter/ 7840830 /aosp_arm64-user/latest .

  4. قم بتحديث جهاز boot-debug.img أو vendor_boot-debug.img باستخدام 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
    

    باستخدام 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
    

    يمكن تعديل وسيطات --ramdisk_add وفقًا لتكوينات الجهاز. انظر القسم التالي للحصول على شرح مفصل.

مسار سياسة sepolicy userdebug

يقوم repack_bootimg أعلاه بنسخ الملف userdebug_plat_sepolicy.cil من قرص الذاكرة --src_bootimg إلى قرص الذاكرة --dst_bootimg . ومع ذلك، قد يختلف المسار داخل قرص تصحيح الأخطاء باختلاف إصدارات Android. في Android 10 و11، المسار هو first_stage_ramdisk/userdebug_plat_sepolicy.cil للأجهزة التي تحتوي على androidboot.force_normal_boot=1 في سطر أوامر kernel. وإلا فإن المسار هو userdebug_plat_sepolicy.cil .

قم بتشغيل الأمر التالي للتحقق مما إذا كان هناك androidboot.force_normal_boot في سطر أوامر kernel:

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

بدءًا من Android 12، يكون المسار داخل قرص التصحيح دائمًا هو userdebug_plat_sepolicy.cil ، بغض النظر عن وجود androidboot.force_normal_boot=1 في سطر أوامر kernel. يوضح الجدول التالي المسارات داخل قرص تصحيح الأخطاء في إصدارات Android المختلفة.

صورة التصحيح أندرويد 10 أندرويد 11 أندرويد 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img لا يوجد first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
التمهيد debug.img الخاص بالجهاز يعتمد على force_normal_boot يعتمد على force_normal_boot userdebug_plat_sepolicy.cil
بائع خاص بالجهاز_boot-debug.img لا يوجد يعتمد على force_normal_boot userdebug_plat_sepolicy.cil

يمكنك تحديد --ramdisk_add لنسخ الملفات من وإلى مسارات مختلفة باستخدام قائمة أزواج src_path:dst_path . على سبيل المثال، يقوم الأمر التالي بنسخ الملف first_stage_ramdisk/userdebug_plat_sepolicy.cil من Android 11 boot-with-debug-ramdisk-5.4.img إلى first_stage_ramdisk/userdebug_plat_sepolicy.cil داخل Android 11 vendor_boot-debug.img .

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

إذا لم يكن هناك androidboot.force_normal_boot=1 في سطر أوامر kernel، فيجب تعديل الأمر على النحو التالي لتغيير مسار الوجهة إلى 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

إذا تم تكوين الصورة التي تم تمريرها إلى --dst_bootimg كقسم متسلسل لـ AVB ، فيجب إضافة تذييل AVB بعد تشغيل الأمر repack_bootimg .

على سبيل المثال، قبل تشغيل repack_bootimg ، قم بتشغيل الأمر التالي للتحقق مما إذا كان vendor_boot-debug.img يحتوي على تذييل AVB متسلسل.

avbtool info_image --image vendor_boot-debug.img

إذا كان يحتوي في الأصل على تذييل AVB متسلسل، فيجب إضافة تذييل AVB بعد تشغيل الأمر repack_bootimg . يعمل استخدام أي مفتاح اختبار للتوقيع على vendor_boot-debug.img لأنه لا يمكن استخدام قرص تصحيح الأخطاء إلا عندما يكون الجهاز غير مؤمّن، مما يسمح بالصور الموقعة بدون مفتاح الإصدار على قسم boot أو قسم 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