גירסת GKI

דף זה מתאר את ערכת ניהול הגירסאות עבור תמונות ליבה כלליות (GKI). לתמונת ליבה כללית (GKI) יש מזהה ייחודי הנקרא שחרור הליבה. מהדורת הליבה מורכבת מגרסת ממשק מודול הליבה (KMI) ומתת-הרמה. מהדורת הליבה היא ספציפית לתמונה המשוחררת, בעוד שגרסת ה-KMI מייצגת את הממשק שממנו בנויה מהדורה. גרסת KMI יכולה לתמוך במספר מהדורות ליבה. מהדורת ליבה קשורה רק לגרסת KMI אחת. במקרה הבלתי סביר שבו יש לשנות את ממשק מודול הליבה, הדור ה-KMI עובר על מנת לשקף את השינוי בגרסת ה-KMI.

סיכום תנאים

הטבלה הבאה מסכמת מונחים חשובים המשמשים בדף זה ובעדכוני GKI.

שֵׁם סֵמֶל דוגמא תיאור
שחרור ליבה סיומת wxy-zzz-k 5.4.42-android12-0-foo מזהה ייחודי עבור מהדורת GKI. זהו הערך המוחזר על ידי uname .
גרסת KMI wx-zzz-k 5.4-android12-0 מתאר את ממשק מודולי הליבה (KMI) בין GKI לבין מודולי ליבה הניתנים לטעינה דינמית (DLKM).
תת-רמה y 42 מתאר את סדר השחרור של גרסאות ליבה באותה גרסת KMI.

הטבלה הבאה מפרטת מונחים קשורים אחרים כהפניה.

שֵׁם סֵמֶל דוגמא תיאור
wxy wxy 5.4.42

לפרטים, ראה Linux Kernel Makefiles (חפש "KERNELRELEASE").

wxy משמש ישירות בכל מסמך זה. זה מכונה בדרך כלל גם מספר הגרסה התלת חלקים . המונח המשמש ב-VINTF, גרסת הקרנל , עלול לגרום לבלבול עם מונחים אחרים, במיוחד w .

משתנה זה מכונה kernel_version_tuple ב- libkver .

אין להפחית את הסכום הזה על ידי עדכונים כלשהם, כולל OTA או mainline.

סניף גרעין zzz-wx אנדרואיד12-5.4 מונח זה משמש בסוגי ענפי ליבה נפוצים .
גִרְסָה w 5 מונח זה אינו בשימוש במסמך זה. משתנה זה מכונה גרסה ב- libkver .
רמת תיקון איקס 4 מונח זה אינו בשימוש במסמך זה. משתנה זה מכונה patch_level ב- libkver .
שחרור אנדרואיד zzz אנדרואיד12

זהו מספר ההפצה של אנדרואיד (קינוח) שהקרנל משויך אליו.

כאשר משווים את השדה AndroidRelease , החלק המספרי מופק מהמחרוזת לשם השוואה.

אין להקטין את מספר ההפצה של Android על ידי עדכונים כלשהם, כולל OTA או mainline.

דור KMI ק 0

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

מספר דור ה-KMI מתחיל ב-0.

עיצוב גרסאות

שחרור ליבה

הַגדָרָה

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

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

למידע נוסף, ראה קביעת שחרור ליבה מהתקן .

להלן דוגמה לשחרור ליבה.

5.4.42-android12-0-00544-ged21d463f856

תיאור

מהדורת הליבה היא המזהה הייחודי של מהדורת GKI. אם לשני קבצים בינאריים של GKI יש את אותה גרסת ליבה, הם חייבים להיות זהים מבחינת בתים.

מהדורת ליבה מורכבת מגרסת KMI, תת-רמה וסיומת. למטרות מסמך זה, מתעלמים מהסיומת לאחר יצירת KMI.

גרסת KMI

הַגדָרָה

גרסת KMI מוגדרת כדלקמן:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

שימו לב שרמת המשנה y אינה חלק מגרסת ה-KMI. עבור הדוגמה במהדורת Kernel , גרסת KMI היא:

5.4-android12-0

תיאור

גרסת KMI מתארת ​​את ממשק מודולי הליבה (KMI) בין GKI לבין מודולי ליבה הניתנים לטעינה דינמית (DLKM).

אם לשתי גרסאות ליבה יש את אותה גרסת KMI, הן מיישמות את אותו ממשק מודול ליבה. ה-DLKMs התואמים לאחד תואמים גם לשני.

אין להפחית את גרסת ה-KMI על ידי עדכוני OTA.

תת-רמה

רמת המשנה, y , מתארת ​​את סדר השחרור של גרסאות הליבה בתוך אותה גרסת KMI.

עבור שתי מהדורות ליבה בעלות אותה גרסת KMI אך יש להן רמת משנה Y1 ו-Y2 בהתאמה:

  • אם Y1 קטן או שווה ל-Y2, מכשיר שמריץ את Y1 יכול לקבל עדכון ל-Y2.
  • אם Y1 גדול מ-Y2, לא ניתן לעדכן מכשיר שבו פועל Y1 ל-Y2.

כלומר, אם גרסת ה-KMI לא משתנה, אין להפחית את רמת המשנה בשום עדכון OTA.

קביעת שחרור ליבה ממכשיר

ניתן למצוא את מהדורת הליבה המלאה על ידי הפעלת uname -r , או uname(2) עם קטע הקוד הבא:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

פלט לדוגמה הוא:

5.4.42-android12-0-00544-ged21d463f856

לצורך מסמך זה, מתעלמים מכל דבר לאחר יצירת KMI בעת חילוץ מידע ליבה. באופן רשמי יותר, הפלט של uname -r מנותח עם הביטוי הרגולרי הבא (בהנחה ש-zzz מתחיל תמיד ב-"android"):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

המידע שהתעלם ממנו יכול לכלול מידע כגון מספר ה-build של ci.android.com , מספר התיקונים על גבי ליבת הבסיס, ו-hash SHA של ה-git commit.

libkver

הספרייה, libkver, מספקת ממשק C++ לניתוח מהדורת הליבה או מחרוזת גרסת KMI. לרשימה של ממשקי API ש-libkver חושף, ראה packages/modules/Gki/libkver/include/kver .

בדיקות VINTF

עבור אנדרואיד 11 ומטה, חלק המהדורה של אנדרואיד בגרסת KMI מצוין באופן ידני במניפסט המכשיר על ידי יצרני המכשירים. לפרטים, ראה כללי התאמת ליבת VINTF .

מאנדרואיד S, ניתן לחלץ את חלק מהדורת האנדרואיד בגרסת KMI מהקרנל ולהחדיר למניפסט המכשיר בזמן הבנייה.

מכיוון שדרישות תצורת הליבה בדרך כלל אינן משתנות, אין צורך לקודד k בתוך מטריצת התאימות. עם זאת, במקרה הבלתי סביר שבו יש צורך לשנות את דרישת תצורת הליבה, ודא את הדברים הבאים:

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

גרסת תמונת אתחול במטא נתונים של OTA

גם אם תמונת האתחול מתעדכנת באמצעות עדכון OTA, היא חייבת להיות עטופה בפורמט OTA payload, payload.bin . מטען OTA מקודד version גרסה עבור כל מחיצה. כאשר update_engine מטפל במטען OTA, הוא משווה שדה זה כדי להבטיח שהמחיצה לא משודרגת לאחור.

כדי למנוע בלבול, שדה version עבור מחיצת האתחול במטא-נתונים של OTA נקרא boot image version .

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

לפני עדכון OTA, לקוח OTA בודק את גרסת תמונת האתחול באותו אופן כמו כל מחיצה אחרת.