החל מ-Android 5.0, פעילות תקינה של סטאק הרשת של Android ב-Linux בליבות (kernel) נדרשות מספר שמירות שעברו העלאה בסטרימינג יחסית לאחרונה או עדיין לא הגיעו ל-upstream. לא קל לאמת ידנית שנדרשת פונקציונליות של ליבה (kernel) או לעקוב אחר שמירות החסרות, ולכן צוות Android משתף את הבדיקות שבהן הוא משתמש כדי להבטיח שהליבה פועלת כצפוי.
למה כדאי להריץ את הבדיקות
הבדיקות האלה קיימות בשלוש שיטות עיקריות סיבות:
- הגרסה המדויקת של הליבה של Linux שבה משתמשים במכשיר היא בדרך כלל ספציפיים למכשיר, וקשה לדעת אם יש ליבה (kernel) פועל כראוי מבלי להריץ את הבדיקות.
- העברה קדימה ו- לבצע העברה חוזרת של תיקוני הליבה לגרסאות ליבה (kernel) שונות או עץ המכשיר עלול ליצור בעיות קלות שלא ניתן לזהות ללא להריץ את הבדיקות.
- תכונות רישות חדשות עשויות לדרוש פונקציונליות ליבה חדשה או באג ליבה חדש לתיקונים.
אם הבדיקות לא עוברות את הבדיקות בהצלחה, ערימת הרשת של המכשיר מתנהג באופן שגוי וגורם לבאגי קישוריות גלויים למשתמש (כמו נפילה רשתות Wi-Fi). סביר להניח שהמכשיר גם ייכשל בבדיקת התאימות ל-Android בדיקות סוויטה (CTS).
שימוש בבדיקות
הבדיקות משתמשות ב-User-Mode Linux כדי להפעיל את ליבה (kernel) כתהליך במחשב מארח של Linux. צפייה יצירת סביבת פיתוח בשביל גרסאות מתאימות של מערכת הפעלה. המסגרת של בדיקת היחידה יפעיל את הליבה עם קובץ אימג' מתאים של הדיסק ומריץ את הבדיקות מה במערכת הקבצים של המארח. הבדיקות כתובות ב-Python ומשתמשים בממשקי TAP כדי התנהגות ליבה (kernel) ו-socket API.
הרכבת הליבה של ARCH=um
כדי שהבדיקות ירוצו,
הליבה צריכה להדר בשביל ARCH=um SUBARCH=x86_64
. זהו
שנתמכת בארכיטקטורה במעלה הזרם וגם בעצי הליבה הנפוצים של Android
(למשל android-4.4
). אבל לפעמים המכשיר
ליבות לא עוברות הידור במצב הזה כי עצי המכשיר מכילים
קוד ספציפי למכשיר או קוד ספציפי לחומרה בקבצים נפוצים (לדוגמה
sys/exit.c
).
במקרים רבים, מספיק לוודא
קוד ספציפי לחומרה נמצא מאחורי #ifdef
. בדרך כלל הפעולה הזו אמורה
להיות #ifdef
באפשרות הגדרה ששולטת
שרלוונטית לקוד. אם אין אפשרות הגדרה כזו, צריך להציב
קוד ספציפי לחומרה בתוך #ifndef CONFIG_UML
בלוקים.
לחשבון
באופן כללי, תיקון הבעיה הזו צריך להיות באחריות ספק עץ הליבה (kernel)
(למשל, ספק שבבים או ה-SoC). אנחנו עובדים עם יצרני ציוד מקורי ועם ספקים כדי להבטיח
שהליבות הנוכחיות והעתידיות עוברות הידור (kernel) של ARCH=um
SUBARCH=x86_64
בלי שיהיה צורך לבצע שינויים.
הרצת הבדיקות
הבדיקות מתבצעות ב-kernel/tests/net/test
.
מומלץ להריץ את הבדיקות מה-AOSP הראשי, כי
הם העדכניים ביותר; במקרים מסוימים, תכונות ליבה (kernel) שדרושות
פעולה תקינה בגרסה נתונה של Android עדיין לא כוללת כיסוי בדיקות מלא
בגרסה הנתונה. מידע על הרצת הבדיקות זמין בkernel
קובץ README של בדיקת רשת. ככלל, מהחלק העליון של עץ הליבה, מריצים את הפקודה:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
משלימים את הבדיקות
בדיקת Python ברשת הליבה
קובצי מקור מכילים תגובות שמציינות שמירות ליבה (kernel) שידועות
שנדרשים כדי לעבור את הבדיקות. הבדיקות אמורות לעבור בהצלחה את עצי הליבה המשותפת - כולן
הסתעפויות ליבה נפוצות android-4.4
ומעלה -
kernel/common
פרויקט ב-AOSP. לכן, העברת בדיקות על ליבה פשוטה
למזג כל הזמן מהסתעפות הליבה המשותפת התואמת.
תרומות
דיווח על בעיות
ניתן לדווח על כל בעיה בבדיקות הרשת הליבה בAndroid מעקב אחר בעיות באמצעות Component-Networking התיוג.
שמירת מסמכים והוספת בדיקות
מדווחים על בעיות כפי שמתואר למעלה, ואם אפשר, מעלים שינוי כדי לתקן את הבעיה, אם:
- הבדיקות לא עוברות את עצי הליבה הנפוצים
- שלך למצוא התחייבות נחוצה שלא מוזכרת בתגובות המקור,
- העברת הבדיקות להעברת ליבה (kernel) ב-upstream מחייבת שינויים משמעותיים
- לדעתך הבדיקות שצוינו יתר על המידה, או שהן ייכשלו בעתיד ליבות
- אתם רוצים להוסיף עוד בדיקות או כיסוי קיים למערכת בדיקות.