اختبار VTS باستخدام ذاكرة الوصول العشوائي (RAM) لتصحيح الأخطاء

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

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

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

حزمة اختبارية الاختبار باستخدام إنشاء قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء هل `adb root` متاح؟ تغيير تنويعة التصميم من Android 9 إلى 10
CTS نظام الشركة المصنّعة الأصلية للجهاز المستخدم لا لا لا جديد
CTS-on-GSI صورة نظام عامة (GSI) المستخدم لا لا

userdebug -> user GSI

موقَّع عليها للإصدار

STS نظام الشركة المصنّعة الأصلية للجهاز userdebug لا نعم جديد في Q
VTS صورة نظام عامة (GSI) المستخدم نعم نعم

userdebug -> user GSI

موقَّع عليها للإصدار

نظرة عامة

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

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

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

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

المتطلبات الأساسية لاستخدام قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء

يتم توفير قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء من قِبل الشركة المصنّعة الأصلية للجهاز التي تُجري اختبارات التوافق. يجب ألا يكون موقَّعًا للإصدار، ولا يمكن استخدامه إلا إذا كان الجهاز غير مُقفَل.

لن يتم إنشاء قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء أو استخدامه لترقية الأجهزة التي تتضمّن ما يلي:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE true
  • skip_initramfs في سطر أوامر النواة

صورة النظام العامة (GSI) في Android 12

لا يلزم اتّباع أي تعليمات إضافية لاستخدام قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء مع صورة النظام العامة (GSI) في Android 12.

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

صورة النظام العامة (GSI) في Android 11

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

بدلاً من ذلك، يمكن استخدام أداة repack_bootimg لإعادة إنشاء boot-debug.img أو vendor_boot-debug.img باستخدام sepolicy المعدَّل لصورة النظام العامة (GSI).

إعادة تجميع قرص ذاكرة الوصول العشوائي لتصحيح الأخطاء

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

وتكون الخطوات على النحو التالي:

  1. نزِّل otatools.zip من https://ci.android.com. ننصحك بالتنزيل من عناصر الإصدار في aosp_cf_arm64_only_phone-userdebug على فرع aosp-android-latest-release.

  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 الذي تستخدمه. على سبيل المثال، إذا كنت تستخدم صورة نظام عامة (GSI) من arm64 من RJR1.211020.001 (7840830)، نزِّل من https://ci.android.com/builds/submitted/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 في سطر أوامر النواة. بخلاف ذلك، يكون المسار userdebug_plat_sepolicy.cil.

نفِّذ الأمر التالي للتحقّق مما إذا كان هناك androidboot.force_normal_boot في سطر أوامر النواة:

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

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

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

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

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