اختبارات وحدة شبكات Kernel

منذ Android 5.0، يتطلب التشغيل الصحيح لمكدس شبكة Android على نواة Linux عددًا من الالتزامات التي تم رفعها مؤخرًا نسبيًا أو لم يتم رفعها بعد. ليس من السهل التحقق يدويًا من وظائف kernel المطلوبة أو تتبع الالتزامات المفقودة، لذلك يقوم فريق Android بمشاركة الاختبارات التي يستخدمها لضمان عمل kernel كما هو متوقع.

لماذا إجراء الاختبارات؟

توجد هذه الاختبارات لثلاثة أسباب رئيسية:

  1. عادةً ما يكون الإصدار الدقيق لنواة Linux المستخدم على الجهاز خاصًا بالجهاز، ومن الصعب معرفة ما إذا كانت أي نواة ستعمل بشكل صحيح دون إجراء الاختبارات.
  2. قد يؤدي النقل الأمامي والخلفي لتصحيحات kernel إلى إصدارات kernel مختلفة أو أشجار أجهزة مختلفة إلى ظهور مشكلات دقيقة قد يكون من المستحيل اكتشافها دون إجراء الاختبارات.
  3. قد تتطلب ميزات الشبكة الجديدة وظائف kernel جديدة أو إصلاحات لأخطاء kernel.

إذا لم تنجح الاختبارات، فستعمل حزمة شبكة الجهاز بشكل غير صحيح، مما يتسبب في حدوث أخطاء في الاتصال مرئية للمستخدم (مثل السقوط من شبكات Wi-Fi). من المحتمل أيضًا أن يفشل الجهاز في اختبارات توافق Android Compatibility Test Suite (CTS).

باستخدام الاختبارات

تستخدم الاختبارات User-Mode Linux لتشغيل النواة كعملية على جهاز Linux المضيف. راجع إنشاء بيئة بناء لإصدارات نظام التشغيل المناسبة. يقوم إطار عمل اختبار الوحدة بتمهيد النواة بصورة قرص مناسبة وإجراء الاختبارات من نظام الملفات المضيف. تتم كتابة الاختبارات بلغة Python وتستخدم واجهات TAP لممارسة سلوك kernel وواجهة برمجة تطبيقات المقبس.

تجميع النواة لـ ARCH=um

لكي يتم تشغيل الاختبارات، يجب أن تقوم النواة بالتحويل إلى ARCH=um SUBARCH=x86_64 . هذه بنية مدعومة سواء في المنبع أو في أشجار نواة Android الشائعة (مثل android-4.4 ). لكن في بعض الأحيان لا يتم تجميع نواة الجهاز في هذا الوضع لأن أشجار الأجهزة تحتوي على تعليمات برمجية خاصة بالجهاز أو خاصة بالجهاز في ملفات شائعة (على سبيل المثال sys/exit.c ).

في كثير من الحالات، يكفي التأكد من أن التعليمات البرمجية الخاصة بالأجهزة موجودة خلف ملف #ifdef . عادةً ما يجب أن يكون هذا #ifdef في خيار التكوين الذي يتحكم في الميزة المحددة ذات الصلة بالكود. إذا لم يكن هناك خيار التكوين هذا، فضع التعليمات البرمجية الخاصة بالأجهزة داخل كتل #ifndef CONFIG_UML .

بشكل عام، إصلاح هذه المشكلة يجب أن يكون مسؤولية موفر شجرة النواة (مثل مجموعة الشرائح أو بائع SoC). نحن نعمل مع مصنعي المعدات الأصلية والبائعين للتأكد من أن النوى الحالية والمستقبلية سيتم تجميعها لـ ARCH=um SUBARCH=x86_64 دون الحاجة إلى أي تغييرات.

تشغيل الاختبارات

الاختبارات موجودة في kernel/tests/net/test . يوصى بإجراء الاختبارات من AOSP main لأنها الأحدث؛ في بعض الحالات، لا تتمتع ميزات kernel الضرورية للتشغيل السليم في إصدار Android معين بتغطية اختبارية كاملة في الإصدار المحدد. للحصول على معلومات حول كيفية إجراء الاختبارات، راجع ملف README الخاص باختبار شبكة kernel . بشكل أساسي، من أعلى شجرة النواة لديك، قم بتشغيل:

ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh

اجتياز الاختبارات

تحتوي ملفات Python المصدرية لاختبار شبكة kernel على تعليقات تحدد التزامات kernel المعروفة بأنها مطلوبة لاجتياز الاختبارات. يجب أن تمر الاختبارات في أشجار النواة الشائعة - جميع فروع النواة الشائعة android-4.4 والإصدارات الأحدث - في مشروع kernel/common في AOSP. لذلك، فإن اجتياز الاختبارات على النواة هو ببساطة مسألة الدمج المستمر من فرع النواة المشترك المقابل.

المساهمة

قضايا الإبلاغ

يرجى الإبلاغ عن أي مشكلات تتعلق باختبارات شبكة kernel في أداة تعقب مشكلات Android باستخدام علامة Component-Networking .

توثيق الالتزامات وإضافة الاختبارات

يرجى الإبلاغ عن المشكلات كما هو موضح أعلاه، وإذا أمكن، قم بتحميل تغيير لإصلاح المشكلة، إذا:

  • الاختبارات لا تمر على أشجار النواة المشتركة
  • تجد التزاما ضروريا لم يرد ذكره في تعليقات المصدر،
  • يتطلب الحصول على الاختبارات لتمرير النوى الأولية إجراء تغييرات كبيرة
  • أنت تعتقد أن الاختبارات محددة بشكل مبالغ فيه، أو أن الاختبار يفشل في النوى المستقبلية
  • ترغب في إضافة المزيد من الاختبارات أو المزيد من التغطية للاختبارات الموجودة.