منذ الإصدار 10 من Android، تم تغيير نوع
صورة النظام العامة (GSI) المستخدَمة لإجراء اختبارات الامتثال لـ
CTS-on-GSI/VTS من userdebug إلى user build لكي يتم توقيع الإصدار. يشكّل ذلك
مشكلة لاختبار VTS لأنّه يتطلّب استخدام
adb root
لتشغيله، ولكن
adb root
غير متاح على جهاز المستخدم.
تم تقديم ملف ramdisk لتصحيح الأخطاء (أو صورة التشغيل لتصحيح الأخطاء) لتفعيل adb root
على
جهاز تم إنشاؤه من قِبل المستخدم وتم فتح قفل برنامج الإقلاع فيه. ويؤدي ذلك إلى تبسيط عملية الاختبار
باستخدام ملف الإصدار GSI system.img
نفسه للاختبار الوظيفي على GSI و
الاختبار الوظيفي على GSI. لإعداد STS، يبقى استخدام system.img
آخر من المصنّعين الأصليّين للأجهزة (OEM) باستخدام userdebug
مطلوبًا.
يعرض الجدول التالي التغييرات في نوع الصورة والإصدار لاختبار الامتثال في Android 10.
مجموعة الاختبار | الاختبار باستخدام | إنشاء | تصحيح أخطاء ذاكرة الوصول العشوائي | هل يمكن استخدام adb root؟ | تغيير في تنويعة التصميم من الإصدار 9 من Android إلى الإصدار 10 |
---|---|---|---|---|---|
مجموعة أدوات اختبار التوافق (CTS) | نظام المصنّع الأصلي للجهاز | المستخدم | N | N | لم يتغيّر موقفي |
CTS-on-GSI | GSI | المستخدم | N | N | userdebug -> user GSI الإصدار موقَّع |
STS | نظام المصنّع الأصلي للجهاز | userdebug | N | Y | الميزات الجديدة في تطبيق Q |
VTS | GSI | المستخدم | Y | Y | userdebug -> user GSI الإصدار موقَّع |
نظرة عامة
يتم إنشاء ملفات الصور الإضافية هذه ضمن مجلد الإنشاء
(${ANDROID_PRODUCT_OUT}
):
boot-debug.img
vendor_boot-debug.img
عند إعادة تحميل boot-debug.img
على قسم boot
في الجهاز، يتم تحميل ملف sepolicy الخاص بالنظام في وضع debugging وملف خصائص إضافي، وهو adb_debug.prop
. يتيح ذلك لـ adb root
استخدام الإصدار المخصّص للمستخدمين
system.img
(إما من GSI أو من المصنّع الأصلي للجهاز).
بالنسبة إلى
صورة Kernel Generic (GKI)
باستخدام الأجهزة التي تحتوي على قسم vendor_boot
، يجب عدم
فلاشة القسم boot-debug.img
، لأنّه يجب فلاش القسم boot
باستخدام صورة GKI معتمَدة.
بدلاً من ذلك، يجب إعادة تحميل vendor_boot-debug.img
على قسم vendor_boot
لتسهيل تصحيح أخطاء ملف ramdisk.
المتطلبات الأساسية لاستخدام ذاكرة وصول عشوائي (RAM) لتصحيح الأخطاء
يقدّم المصنّع الأصلي للجهاز ملف ramdisk لتصحيح الأخطاء، وهو يُجري اختبارات الامتثال. يجب ألا يكون ملف الإصدار موقَّعًا، ولا يمكن استخدامه إلا إذا كان الجهاز غير مقفل.
لن يتم إنشاء ملف ramdisk لتصحيح الأخطاء أو استخدامه لترقية الأجهزة التي تتضمّن ما يلي:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
صحيحskip_initramfs
في سطر أوامر kernel
الإصدار العام من نظام التشغيل Android 12
ما مِن تعليمات إضافية مطلوبة لاستخدام ملف ramdisk لتصحيح الأخطاء مع ملف Android 12 GSI.
اعتبارًا من 29 أيلول (سبتمبر) 2021، لم تعُد أقراص RAMdisk لفحص الأخطاء تتطلّب التحديث باستخدام أداة
repack_bootimg
. يُدمج إصدار SGR1.210929.001 (7777720)
من الإصدار 12 من ملف GSI
userdebug_plat_sepolicy.cil
المحدَّث في system.img
ويتجاهل
userdebug_plat_sepolicy.cil
من ملف ramdisk الخاص بتصحيح الأخطاء. يُرجى الاطّلاع على
اللوائح التنظيمية للاطّلاع على
التفاصيل.
الإصدار العام من Android 11
عند استخدام boot-debug.img
أو vendor_boot-debug.img
، يتم تحميل ملف system
sepolicy من ملف userdebug_plat_sepolicy.cil
في ملف debugging
ramdisk الخاص بـ 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 المعدَّلة.
إعادة تجميع ذاكرة وصول عشوائي (RAM) لميزة تصحيح الأخطاء
بدلاً من دمج تغييرات سياسة الأمان لإعادة إنشاء boot-debug.img
، يمكن للشركاء
استخدام repack_bootimg
لتعديل ملف سياسة الأمان في 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 otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
نزِّل
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.عليك تحديث الجهاز
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
من ملف ramdisk في --src_bootimg
إلى ملف ramdisk في --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، يكون المسار ضمن ملف debugging
ramdisk هو userdebug_plat_sepolicy.cil
دائمًا، بغض النظر عن توفُّر
androidboot.force_normal_boot=1
في سطر أوامر kernel. يعرض الجدول التالي
المسارات ضمن ذاكرة وصول عشوائي (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
في سطر أوامر 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
لأنّه لا يمكن استخدام ملف ramdisk الخاص بتصحيح الأخطاء إلا عند فتح قفل
الجهاز، ما يسمح بتحميل صور موقَّعة باستخدام مفتاح غير مخصّص للإصدار على قسم 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