שאלות נפוצות על ליבה של Android

במסמך הזה מפורטות תשובות לשאלות נפוצות על ליבת Android, שנקראת גם ליבת Generic Kernel Image ‏ (GKI). אם אתם לא מכירים את GKI ואת המינוח של ליבת GKI, תוכלו לעיין בסקירה הכללית של ליבת המערכת.

האם אפשר לשנות רשימות של סמלי Kernel Module Interface ‏ (KMI) בליבת מערכת יציבה?

שינויים שלא משפיעים על KMI קיים יכולים להתווסף לליבות קפואות. השינויים האלה כוללים פונקציות חדשות לייצוא ורשומות חדשות ברשימת הסמלים. פרטים נוספים מופיעים במאמר בנושא ניהול רשימות של סמלים.

האם אפשר לשנות מבנים שמשמשים מודולים של ספקים בליבת מערכת יציבה?

אי אפשר לשנות מבנים שמהווים חלק מממשק KMI בקרנלים עם KMI קפוא. לפני הקפאת ה-KMI, אפשר לשנות את המבנים האלה.

האם אפשר לשנות את הליבה כל עוד לא פוגעים בתאימות הבינארית או בתאימות המקור?

אפשר לבצע שינויים שלא משפיעים על KMI כמו שמתואר בתיקונים ספציפיים ל-Android.

איך GKI מטפל בהגדרת ליבת המערכת?

מידע על הגדרת ליבת המערכת זמין במאמר בנושא שינויים ב-gki_defconfig.

איך מטפלים בתיקוני באגים במעלה הזרם להחלפות של מודולי GKI קיימים?

אם יוצרים מודול ספק שמבוסס על דרייבר ב-Android Common Kernel (ACK), האחריות לוודא שתיקוני באגים מ-upstream ומ-ACK מועברים למודול היא שלכם. בדרך כלל, הכי טוב להשתמש בקרנל GKI ובמודולים של GKI ללא שינוי, כדי ש-Google תספק את העדכונים האלה באופן עקבי.

האם יש בדיקות ספציפיות ל-GKI?

יש בדיקות של Vendor Test Suite (VTS) שמאמתות את ההתקנה של גרסת GKI מאושרת, וגם אוכפות את הדרישות של GKI לכל מהדורה. לדוגמה, יש בדיקות VTS ב-Android 12 לכותרת האתחול v3 ולאימות הקיום של מחיצות נדרשות במכשיר שמופעל בו ליבת 5.10.

איך יוצרים את קובץ המקטע defconfig של הפרויקט בשביל גרסאות build של מכשירים?

מכשירים רבים שתואמים ל-GKI משתמשים בקטע הגדרה כדי לתאר את אפשרויות ההגדרה שנדרשות, בנוסף ל-gki_defconfig, כדי ליצור את מודולי הספק. דוגמאות שכלולות בבסיס הקוד של ACK הן Cuttlefish ו-DB845c. אין דרך להימנע מבדיקה ידנית של אפשרויות ההגדרה כדי לבצע אופטימיזציה של הפריט, אבל scripts/diffconfig ממקורות הליבה שימושי להשוואת התוצאות של gki_defconfig ושל gki_defconfig+device.fragment.

האם יש פתרון עקיף לבעיה שבה הפקודה modprobe מתייחסת לסימנים '-' ו-'_' כאל סימנים זהים?

בדף ההסבר של modprobe מופיע התיאור הבא: "‫modprobe מוסיף או מסיר מודול מליבת לינוקס בצורה חכמה: חשוב לציין שלנוחותכם, אין הבדל בין _ לבין - בשמות של מודולים (מתבצעת המרה אוטומטית של קו תחתון)". צוות GKI פועל בהתאם למוסכמה הסטנדרטית של upstream, ולכן כלי ספקים או מוסכמות למתן שמות למודולים צריכים להתחשב בכך.

איך מפעילים את debugfs לשימוש פנימי?

פרטים על הפעלת debugfs מופיעים במאמר בנושא תכונות פולשניות לניפוי באגים במורד הזרם.

איך אפשר לפתור בעיות של אי-התאמה בין ממשקי ABI בליבת GKI עם הפעלה של הגדרת מודול ספציפית?

אי התאמה בין ממשקי ABI בליבת GKI לבין הגדרת המודול מייצגת תלות בהגדרת מודול מרומזת, שבה הפעלת מודול גורמת ליצירת הגדרת קובץ בינארי בתמונת הליבה שמתקבלת. כדי לקבל מידע על המשך הפעולה, אפשר לפנות לצוות של ליבת Android ‏(kernel-team@android.com). אחרי שקובעים את רשימת הסמלים, יוצרים באג בIssue Tracker ומעלים שינוי לרשימת הסמלים.