בדיקות יחידת רשת ליבה

מאז אנדרואיד 5.0, פעולה תקינה של מחסנית הרשת של אנדרואיד על ליבות לינוקס דורשת מספר התחייבויות שהועלו לאחרונה יחסית או שעדיין לא הגיעו להזרם. לא קל לאמת באופן ידני את פונקציונליות הליבה הנדרשת או לעקוב אחר המחויבות החסרות, ולכן צוות אנדרואיד משתף את הבדיקות שבהן הוא משתמש כדי לוודא שהליבה מתנהגת כמצופה.

למה להפעיל את הבדיקות?

בדיקות אלו קיימות משלוש סיבות עיקריות:

  1. הגרסה המדויקת של ליבת לינוקס המשמשת במכשיר היא בדרך כלל ספציפית למכשיר, וקשה לדעת אם קרנל כלשהו יעבוד כראוי מבלי להפעיל את הבדיקות.
  2. העברה קדימה והעברה אחורה של תיקוני הליבה לגרסאות ליבה שונות או לעצי מכשיר שונים עשויה להציג בעיות עדינות שאי אפשר לזהות מבלי להפעיל את הבדיקות.
  3. תכונות רשת חדשות עשויות לדרוש פונקציונליות חדשה של הליבה או תיקוני באגים בקרנל.

אם הבדיקות לא יעברו, ערימת הרשת של המכשיר תתנהג בצורה שגויה, ויגרום לבאגי קישוריות גלויים למשתמש (כגון נפילה מרשתות Wi-Fi). ככל הנראה המכשיר ייכשל גם במבחני Android Compatibility Test Suite (CTS).

שימוש במבחנים

הבדיקות משתמשות ב- User-Mode Linux כדי לאתחל את הליבה כתהליך במחשב מארח לינוקס. ראה הקמת סביבת בנייה עבור גרסאות מתאימות של מערכת ההפעלה. מסגרת בדיקת היחידה מאתחלת את הליבה עם תמונת דיסק מתאימה ומריצה את הבדיקות ממערכת הקבצים המארחת. המבחנים נכתבים ב-Python ומשתמשים בממשקי TAP כדי לממש את התנהגות ליבה ואת ה-API של socket.

קומפילציה של הליבה עבור ARCH=um

כדי שהבדיקות יפעלו, על הקרנל לבצע קומפילציה עבור ARCH=um SUBARCH=x86_64 . זוהי ארכיטקטורה נתמכת הן במעלה הזרם והן בעצי הקרנל הנפוצים של אנדרואיד (כגון android-4.4 ). אבל לפעמים גרעיני התקנים לא מבצעים קומפילציה במצב זה מכיוון שעצי התקנים מכילים קוד ספציפי למכשיר או חומרה ספציפי בקבצים נפוצים (לדוגמה sys/exit.c ).

במקרים רבים, זה מספיק כדי להבטיח שקוד ספציפי לחומרה נמצא מאחורי #ifdef . בדרך כלל זה צריך להיות #ifdef על אפשרות תצורה השולטת בתכונה הספציפית הרלוונטית לקוד. אם אין אפשרות תצורה כזו, הכנס קוד ספציפי לחומרה בתוך #ifndef CONFIG_UML בלוקים.

באופן כללי, תיקון זה צריך להיות באחריות ספק עץ הליבה (כגון ערכת השבבים או ספק ה-SoC). אנו עובדים עם יצרני ציוד מקורי וספקים כדי להבטיח שהקרנלים הנוכחיים והעתידיים יקומפלו עבור 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

עובר את המבחנים

בדיקת רשת הליבה קובצי המקור של Python מכילים הערות המציינות התחייבויות ליבה שידוע כי נדרשות כדי לעבור את הבדיקות. הבדיקות אמורות לעבור בעצי הקרנל הנפוצים - כל ענפי הקרנל הנפוצים android-4.4 ומעלה - בפרוייקט kernel/common ב-AOSP. לכן, העברת הבדיקות על ליבה היא פשוט עניין של מיזוג מתמשך מענף הקרנל המשותף המקביל.

תורם

בעיות דיווח

אנא דווח על כל בעיה בבדיקות רשת הליבה במעקב הבעיות של Android עם התווית Component-Networking .

תיעוד התחייבויות והוספת מבחנים

אנא דווח על בעיות כמתואר לעיל, ובמידת האפשר העלה שינוי לתיקון הבעיה, אם:

  • הבדיקות אינן עוברות על עצי הגרעין הנפוצים
  • אתה מוצא מחויבות הכרחית שאינה מוזכרת בהערות המקור,
  • לגרום לבדיקות לעבור על גרעינים במעלה הזרם דורש שינויים גדולים
  • אתה מאמין שהבדיקות מוגדרות יתר על המידה, או שהבדיקה נכשלת על גרעינים עתידיים
  • תרצה להוסיף עוד בדיקות או כיסוי נוסף לבדיקות קיימות.