از اندروید ۵.۰، عملکرد صحیح پشته شبکه اندروید روی هستههای لینوکس نیازمند تعدادی کامیت است که نسبتاً اخیراً آپاستریم شدهاند یا هنوز آپاستریم نشدهاند. تأیید دستی عملکرد مورد نیاز هسته یا ردیابی کامیتهای از دست رفته آسان نیست، بنابراین تیم اندروید تستهایی را که برای اطمینان از عملکرد مورد انتظار هسته استفاده میکند، به اشتراک میگذارد.
دلایل اجرای آزمایشها
این آزمایشها به سه دلیل اصلی وجود دارند:
- نسخه دقیق هسته لینوکس مورد استفاده در یک دستگاه معمولاً مختص به همان دستگاه است و بدون اجرای آزمایشها، تشخیص اینکه آیا هر هسته به درستی کار میکند یا خیر، دشوار است.
- انتقال رو به جلو و انتقال رو به عقب وصلههای هسته به نسخههای مختلف هسته یا درختهای دستگاه مختلف ممکن است مشکلات ظریفی را ایجاد کند که بدون اجرای آزمایشها، تشخیص آنها غیرممکن است.
- ویژگیهای جدید شبکه ممکن است نیاز به قابلیتهای جدید هسته یا رفع اشکالات هسته داشته باشند.
اگر آزمایشها با موفقیت پشته شبکه دستگاه انجام نشود، عملکرد آن نادرست خواهد بود و باعث ایجاد اشکالات اتصال قابل مشاهده توسط کاربر (مانند قطع شدن اتصال به شبکههای وایفای) میشود. دستگاه احتمالاً در آزمایشهای مجموعه تست سازگاری اندروید (CTS) نیز با شکست مواجه خواهد شد.
از تستها استفاده کنید
این تستها از لینوکس کاربر-حالت برای بوت کردن هسته به عنوان یک فرآیند روی یک دستگاه میزبان لینوکس استفاده میکنند. برای نسخههای مناسب سیستم عامل، به بخش «ایجاد یک محیط ساخت» مراجعه کنید. چارچوب تست واحد، هسته را با یک تصویر دیسک مناسب بوت میکند و تستها را از سیستم فایل میزبان اجرا میکند. تستها به زبان پایتون نوشته شدهاند و از رابطهای TAP برای آزمایش رفتار هسته و API سوکت استفاده میکنند.
هسته را برای ARCH=um کامپایل کنید
برای اجرای تستها، هسته باید برای ARCH=um SUBARCH=x86_64 کامپایل شود. این یک معماری پشتیبانی شده هم در بالادست و هم در درختهای هسته رایج اندروید (مانند android-4.4 ) است. اما گاهی اوقات هستههای دستگاه در این حالت کامپایل نمیشوند زیرا درختهای دستگاه حاوی کد مخصوص دستگاه یا کد مخصوص سختافزار در فایلهای رایج (به عنوان مثال sys/exit.c ) هستند.
در بسیاری از موارد، کافی است مطمئن شوید که کد مخصوص سختافزار پشت یک #ifdef قرار دارد. معمولاً این باید یک #ifdef روی یک گزینه پیکربندی باشد که ویژگی خاص مربوط به کد را کنترل میکند. اگر چنین گزینه پیکربندی وجود ندارد، کد مخصوص سختافزار را درون بلوکهای #ifndef CONFIG_UML قرار دهید.
بهطورکلی، رفع این مشکل باید بر عهدهی ارائهدهندهی درخت هسته (مانند فروشندهی چیپست یا SoC) باشد. ما در حال همکاری با تولیدکنندگان اصلی تجهیزات (OEM) و فروشندگان هستیم تا اطمینان حاصل کنیم که هستههای فعلی و آینده بدون نیاز به هیچ تغییری برای ARCH=um SUBARCH=x86_64 کامپایل میشوند.
تستها را اجرا کنید
تستها در kernel/tests/net/test قرار دارند. توصیه میشود تستها از AOSP main اجرا شوند زیرا بهروزترین هستند؛ در برخی موارد، ویژگیهای هسته که برای عملکرد صحیح در یک نسخه خاص اندروید ضروری هستند، هنوز پوشش تست کاملی در آن نسخه ندارند. برای اطلاعات در مورد نحوه اجرای تستها، به فایل README تست شبکه هسته مراجعه کنید. اساساً، از بالای درخت هسته خود، دستور زیر را اجرا کنید:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
آزمونها را با موفقیت پشت سر بگذارید
فایلهای منبع پایتون برای تست شبکه هسته حاوی کامنتهایی هستند که کامیتهای هسته را مشخص میکنند و برای قبولی در تستها لازم هستند. تستها باید در درختهای هسته مشترک - همه شاخههای هسته مشترک android-4.4 و بالاتر - در پروژه kernel/common در AOSP قبول شوند. بنابراین، قبولی در تستها روی یک هسته صرفاً به ادغام مداوم از شاخه هسته مشترک مربوطه بستگی دارد.
مشارکتها
گزارش مشکلات
هرگونه مشکل در آزمایشهای شبکه هسته را در ردیاب مشکلات اندروید با برچسب Component-Networking گزارش دهید.
ثبت کامیتها و افزودن تستها
مشکلات را همانطور که در بالا توضیح داده شد گزارش دهید و در صورت امکان، تغییری را برای رفع مشکل آپلود کنید، اگر:
- تستها روی درختهای هسته رایج قبول نمیشوند
- شما یک کامیت ضروری پیدا میکنید که در توضیحات منبع ذکر نشده است،
- قبولی در تستها روی هستههای بالادستی نیازمند تغییرات اساسی است
- شما معتقدید که تستها بیش از حد مشخص شدهاند، یا تست در هستههای آینده با شکست مواجه میشود
- میخواهید تستهای بیشتری اضافه کنید یا پوشش بیشتری به تستهای موجود اضافه کنید.