باستخدام DebugFS في Android 12

يجب أن يتم شحن الأجهزة التي تعمل بنظام التشغيل Android 12 باستخدام إصدارات kernel أعلى من الإصدار 5.4 مع kernel GKI. لكي يتمكن الشركاء من الوصول إلى DebugFS في إصدارات userdebug أثناء تطويرهم على نواة GKI، يتم تمكين تكوين kernel CONFIG_DEBUG_FS في defconfig GKI. لا تقم مطلقًا بتثبيت DebugFS في إصدارات المستخدم للأجهزة التي تعمل بنظام التشغيل Android 12.

تتمتع إصدارات Userdebug بتغطية اختبارية أفضل من إصدارات المستخدم ويتم اختبارها بشكل مكثف طوال دورة التطوير. تعمل الخطة التالية على تقليل الفرق بين نوعي البناء فيما يتعلق بالوصول إلى DebugFS ، وتوفر هذه الفوائد:

  • يمنع إنشاء userdebug من الاعتماد عن طريق الخطأ على DebugFS للحصول على وظائف جديدة
  • يضمن معرفة أي وظيفة موجودة معطلة بسبب نقص DebugFS في وقت مبكر من دورة التطوير

يتم تصنيف عمليات الوصول إلى Debugfs في إصدارات userdebug على النحو التالي:

  1. عمليات تهيئة ملف DebugFS أثناء تشغيل الجهاز، مثل الوصول للكتابة إلى ملف في DebugFS لتشغيل جمع بيانات تصحيح الأخطاء.
  2. إنشاء Bugreport: يقرأ HAL dumpstate ملفات DebugFS عندما يتم استدعاء DumpstateBoard() بواسطة dumpstate . تصبح هذه المعلومات جزءًا من تقرير الأخطاء.
  3. الاختبار والتحقق الخاص بالجهاز.

يصف الجدول التالي كيفية دعم كل فئة من هذه الفئات الثلاث في Android 12. لاحظ أن ما يلي ينطبق فقط على إصدارات userdebug حيث لا يمكن تثبيت DebugFS في إصدارات المستخدم.

حالة الاستخدام إصدار Android 12 لتصحيح أخطاء المستخدم
تهيئة ملفات DebugFS لمرة واحدة، أثناء بدء التشغيل . يحدث هذا الوصول مرة واحدة فقط أثناء وقت التمهيد. يقوم Dumpstate HAL بتنفيذ هذا أثناء تهيئة HAL. لتمكين نفس الشيء، يقوم init بتحميل DebugFS في إصدارات userdebug قبل تهيئة HAL. يقوم Init باستدعاء umount() على DebugFS عندما يكتمل تشغيل الجهاز.
إنشاء Bugreport : يقرأ HAL dumpstate ملفات DebugFS ، التي تصبح جزءًا من تقرير الأخطاء. تم ذلك بواسطة dumpstate HAL داخل DumpstateBoard() عند استدعائه بواسطة dumpstate ( DumpstateDevice.cpp ). تضمن أداة dumpstate (جزء من إطار عمل Android) تثبيت DebugFS أثناء الاستدعاء.
الاختبار والتحقق الخاص بالجهاز Adb الجذر والقشرة. قم بتحميل DebugFS من غلاف adb مع الوصول إلى الجذر 1 .

1 لتركيب DebugFS من adb shell مع الوصول إلى الجذر، استخدم هذا الأمر:

adb shell mount -t debugfs debugfs /sys/kernel/debug .

إجراءات الشريك المطلوبة

يجب على الشركاء تفعيل ما يلي بناءً على هذه التغييرات في الأجهزة التي تعمل بنظام التشغيل Android 12:

  • إجراء جميع عمليات تهيئة وقت التمهيد لعقد DebugFS أثناء تهيئة HAL لحالة التفريغ. للحصول على مثال حول كيفية القيام بذلك، راجع DNM: مثال لتهيئة وقت التمهيد لملفات DebugFS .
  • لا تسمح بالوصول إلى DebugFS أثناء وقت التشغيل. تنطبق الاستثناءات التالية:
    • إنشاء Bugreport (يأتي من HAL لمستودع النفايات)
    • الاختبار والتحقق من الصحة (يمكن الوصول إليه عن طريق adb root و shell - تأكد من تثبيت DebugFS أولاً)

يمكن للمطورين تعيين خاصية تصحيح الأخطاء المستمرة persist.dbg.keep_debugfs_mounted لإبقاء DebugFs مثبتًا عبر عمليات إعادة التشغيل على إصدارات userdebug وeng.

تضمن اختبارات توافق GTS عدم تثبيت نظام ملفات DebugFS في إصدارات المستخدم. تضمن عبارات Sepolicy neverallow أنه في الأجهزة التي تعمل بنظام التشغيل Android 12 أو أعلى، لا يتم منح العمليات غير المصرح بها إمكانية الوصول إلى DebugFs .