منذ 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).
والخطوات هي كما يلي:
قم بتنزيل
otatools.zip
من https://ci.android.com . نوصي بالتنزيل من عناصر البناء الخاصة بـaosp_arm64-userdebug
علىaosp-main
.قم بإعداد بيئة التنفيذ لـ
repack_bootimg
:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
قم بتنزيل
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 .قم بتحديث جهاز
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
أضف تذييل AVB
إذا تم تكوين الصورة التي تم تمريرها إلى --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