منذ الإصدار 10 من نظام التشغيل Android، تم تغيير
صورة النظام العامة (GSI) المستخدَمة لتشغيل
اختبار التوافق CTS-on-GSI/VTS
من نوع الإصدار userdebug إلى نوع الإصدار user، وذلك لكي يتم توقيع الإصدار. وهذه مشكلة في اختبار VTS لأنّه يتطلّب تشغيل adb root، ولكن adb root غير متاح على جهاز إصدار المستخدم.
تم طرح ملف ramdisk لتصحيح الأخطاء (أو صورة التشغيل لتصحيح الأخطاء) لتفعيل adb root على جهاز يتضمّن إصدارًا مخصصًا للمستخدمين وبرنامج إقلاع غير مقفل. يؤدي ذلك إلى تبسيط عملية الاختبار من خلال استخدام إصدار المستخدم نفسه من صورة نظام GSI system.img لكل من اختبار التوافق CTS على صورة نظام GSI واختبار VTS على صورة نظام GSI. بالنسبة إلى إعداد STS، لا يزال من الضروري استخدام إصدار آخر من OEM system.img المخصّص لتصحيح الأخطاء.
يوضِّح الجدول التالي التغييرات التي طرأت على نوعَي الصور والإصدارات لاختبار التوافق في نظام التشغيل Android 10.
| مجموعة الاختبارات | الاختبار باستخدام | إنشاء | تصحيح أخطاء ramdisk | adb root؟ | تغيير تنويعة الإصدار من Android 9 إلى Android 10 |
|---|---|---|---|---|---|
| CTS | نظام المصنّع الأصلي للجهاز | المستخدم | N | N | لم يتغيّر موقفي |
| CTS-on-GSI | GSI | المستخدم | N | N | userdebug -> صورة نظام عامة (GSI) للمستخدم release signed |
| STS | نظام المصنّع الأصلي للجهاز | userdebug | N | Y | الجديد في Q |
| VTS | GSI | المستخدم | Y | Y | userdebug -> صورة نظام عامة (GSI) للمستخدم release signed |
نظرة عامة
يتم إنشاء ملفات الصور الإضافية هذه ضمن مجلد الإنشاء
(${ANDROID_PRODUCT_OUT}):
boot-debug.imgvendor_boot-debug.img
عندما يتم تثبيت boot-debug.img على قسم boot في الجهاز، يتم تحميل إصدار userdebug من ملف sepolicy الخاص بالنظام وملف خصائص إضافي، وهو adb_debug.prop. يتيح ذلك adb root مع إصدار المستخدم
system.img (إما GSI أو إصدار الشركة المصنّعة للجهاز الأصلي).
بالنسبة إلى الأجهزة التي تستخدم صورة نواة عامة (GKI) والتي تحتوي على قسم vendor_boot، يجب عدم تثبيت boot-debug.img، لأنّه يجب تثبيت قسم boot باستخدام صورة GKI معتمَدة.
بدلاً من ذلك، يجب نقل vendor_boot-debug.img إلى قسم vendor_boot
لتسهيل استخدام مساحة التخزين المؤقت للذاكرة العشوائية المخصّصة لتصحيح الأخطاء.
المتطلبات الأساسية لاستخدام قرص RAM لتصحيح الأخطاء
يوفّر الشركة المصنّعة للأجهزة الأصلية (OEM) قرص RAM للتصحيح والأخطاء الذي يتم تشغيل اختبارات التوافق عليه. يجب ألا يكون الإصدار موقّعًا، ولا يمكن استخدامه إلا إذا كان الجهاز غير مقفل.
لن يتم إنشاء ramdisk لتصحيح الأخطاء أو استخدامه لترقية الأجهزة التي تتضمّن ما يلي:
BOARD_BUILD_SYSTEM_ROOT_IMAGEtrue-
skip_initramfsفي سطر أوامر النواة
Android 12 GSI
لا يلزم توفير تعليمات إضافية لاستخدام قرص ذاكرة الوصول العشوائي المخصّص لتصحيح الأخطاء مع صورة النظام العامة (GSI) لنظام التشغيل Android 12.
اعتبارًا من 29/09/2021، لم يعُد من الضروري تعديل أقراص RAM المخصّصة لتصحيح الأخطاء باستخدام الأداة
repack_bootimg. يتضمّن إصدار Android 12 GSI بعد SGR1.210929.001 (7777720) ملف userdebug_plat_sepolicy.cil محدّثًا في system.img ويتجاهل userdebug_plat_sepolicy.cil من قرص RAM لتصحيح الأخطاء. يمكنك الاطّلاع على
قوائم التغيير للحصول على
التفاصيل.
حزمة GSI لنظام التشغيل Android 11
عند استخدام boot-debug.img أو vendor_boot-debug.img، يتم تحميل سياسة الأمان SELinux من ملف userdebug_plat_sepolicy.cil في ramdisk لتصحيح الأخطاء في 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 باستخدام سياسة الأمان المحدّثة لواجهة GSI.
إعادة حزم ramdisk لتصحيح الأخطاء
بدلاً من دمج تغييرات sepolicy لإعادة إنشاء boot-debug.img، يمكن للشركاء استخدام repack_bootimg لتعديل ملف sepolicy الخاص بصورة النظام العامة (GSI) إلى boot-debug.img (أو vendor_boot-debug.img إذا كان الجهاز يستخدم GKI).
في ما يلي الخطوات التي يجب اتّباعها:
نزِّل
otatools.zipمن https://ci.android.com. ننصحك بتنزيلها من عناصر الإصدارaosp_cf_arm64_only_phone-userdebugعلى فرعaosp-android-latest-release.إعداد بيئة التنفيذ لـ
repack_bootimg:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpنزِّل
userdebug_plat_sepolicy.cilأوboot-with-debug-ramdisk-${KERNEL_VERSION}.imgمن إصدار GSI الذي تستخدمه. على سبيل المثال، إذا كنت تستخدم صورة نظام عام arm64 منRJR1.211020.001 (7840830)، يمكنك تنزيلها من https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest.تعديل الجهاز
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 GKIrepack_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 GKIrepack_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 من
ramdisk الخاص بالجهاز --src_bootimg إلى ramdisk الخاص بالجهاز --dst_bootimg. ومع ذلك، قد يختلف المسار داخل قرص RAM للتصحيح والأخطاء في إصدارات 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 rootadb shell cat /proc/cmdline | grep force_normal_boot
بدءًا من Android 12، يكون المسار ضِمن قرص RAM مخصّص لتصحيح الأخطاء دائمًا userdebug_plat_sepolicy.cil، بغض النظر عن توفّر androidboot.force_normal_boot=1 في سطر أوامر النواة. يوضّح الجدول التالي المسارات داخل قرص RAM للتصحيح في إصدارات 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إضافة تذييل AVB
إذا تم ضبط الصورة التي تم تمريرها إلى --dst_bootimg كقسم AVB-chained، يجب إضافة تذييل 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 لأنّه لا يمكن استخدام قرص RAM للتصحيح إلا عندما يكون الجهاز مفتوحًا، ما يسمح باستخدام صور موقّعة بمفتاح غير مخصّص للإصدار على القسم 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