اختبار VTS باستخدام رمز RAMD لتصحيح الأخطاء

منذ أن نظام التشغيل 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، لا يزال استخدام المصنّع الأصلي للجهاز system.img الآخر لتصحيح أخطاء المستخدم مطلوبة.

يعرض الجدول التالي التغييرات في نوع النسخة والصور لاختبار الامتثال في الإصدار 10 من نظام التشغيل Android

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

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

تم التوقيع على الإصدار

STS نظام المصنّع الأصلي للجهاز تصحيح أخطاء المستخدم N Y الجديد في Q
الإحالة الناجحة (VTS) نظام تحديد المواقع العالمي (GSI) المستخدم Y Y

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 أو المصنّع الأصلي للجهاز)

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

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

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

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

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

نظام التشغيل Android 12 GSI

ما مِن تعليمات إضافية مطلوبة لاستخدام قرص RAM الخاص بك لتصحيح الأخطاء مع نظام التشغيل 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 من ذاكرة الوصول العشوائي لتصحيح الأخطاء. يمكنك الاطّلاع على متغيّرات التصميم التراكمية لـ التفاصيل.

نظام التشغيل Android 11 GSI

وعند استخدام boot-debug.img أو vendor_boot-debug.img، يبدأ النظام يتم تحميل sepolicy من ملف 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 مع سياسة sepolicy المُعدَّلة لـ GSI.

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

بدلاً من تطبيق تغييرات sepolicy لإعادة إنشاء 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/submitted/7840830/aosp_arm64-user/updated.

  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 تصحيح أخطاء المستخدم

ينسخ 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، المسار ضمن عملية تصحيح الأخطاء قيمة ramdisk دائمًا هي userdebug_plat_sepolicy.cil، بغض النظر عن وجود androidboot.force_normal_boot=1 في سطر أوامر النواة. ما يلي: يعرض المسارات داخل ذاكرة RAMD لتصحيح الأخطاء في إصدارات مختلفة من 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
Seller_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 في 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