از اندروید 5.0، عملکرد صحیح پشته شبکه اندروید بر روی هسته های لینوکس به تعدادی commit نیاز دارد که نسبتاً اخیراً بالادستی شده اند یا هنوز آن را بالادست نکرده اند. بررسی دستی عملکرد هسته مورد نیاز یا ردیابی تعهدات از دست رفته کار آسانی نیست، بنابراین تیم Android آزمایشهایی را که استفاده میکند به اشتراک میگذارد تا اطمینان حاصل شود که هسته طبق انتظار رفتار میکند.
دلایل اجرای آزمون ها
این آزمایش ها به سه دلیل اصلی وجود دارد:
- نسخه دقیق هسته لینوکس مورد استفاده در یک دستگاه معمولاً مختص دستگاه است و تشخیص اینکه آیا هیچ هسته ای بدون اجرای آزمایش ها به درستی کار می کند یا خیر دشوار است.
- انتقال به جلو و پسپورت وصلههای هسته به نسخههای مختلف هسته یا درختان دستگاههای مختلف ممکن است مسائل ظریفی را ایجاد کند که تشخیص آنها بدون اجرای آزمایشها غیرممکن است.
- ویژگیهای جدید شبکه ممکن است به عملکرد جدید هسته یا رفع اشکال هسته نیاز داشته باشد.
اگر آزمایشها با موفقیت انجام نشوند، پشته شبکه دستگاه بهدرستی رفتار میکند و باعث ایجاد اشکالات قابل مشاهده در اتصال (مانند از بین رفتن شبکههای Wi-Fi) میشود. این دستگاه احتمالاً در تستهای مجموعه تست سازگاری اندروید (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 انجام شود. بنابراین، گذراندن تستها بر روی یک هسته به سادگی یک موضوع ادغام مداوم از شاخه هسته مشترک مربوطه است.
مشارکت ها
مشکلات را گزارش کنید
هرگونه مشکل مربوط به آزمایشات شبکه هسته را در ردیاب مشکل Android با برچسب Component-Networking گزارش دهید.
اسناد متعهد و اضافه کردن آزمایشات
مشکلات را همانطور که در بالا توضیح داده شد گزارش دهید و در صورت امکان تغییری را برای رفع مشکل آپلود کنید، اگر:
- آزمایش ها روی درختان هسته معمولی عبور نمی کنند
- شما یک تعهد ضروری پیدا می کنید که در نظرات منبع ذکر نشده است،
- انجام آزمایشها بر روی هستههای بالادستی به تغییرات عمده نیاز دارد
- شما معتقدید که تست ها بیش از حد مشخص شده اند، یا تست در هسته های آینده ناموفق است
- میخواهید تستهای بیشتری یا پوشش بیشتری به تستهای موجود اضافه کنید.