פיתוח ליבות (kernel) של Pixel

מדריך זה מספק הוראות מפורטות להורדה, הידור בליבה (kernel) מותאמת אישית של Pixel לפיתוח. הודות ל-GKI, עכשיו אפשר לעדכן את הליבה בנפרד מגרסת ה-build של פלטפורמת Android. השלבים האלה רלוונטי רק למכשירים מדגם Pixel 6 ואילך. הסיבה לכך היא ש-Pixel 5 במכשירים קודמים נדרש עדכון מודולים של הליבה במחיצה vendor, שתלויות ב-build של פלטפורמת Android במכשירים האלה. ה-GKI הטבלה של הסתעפויות ליבה נתמכות של Pixel כוללת את הסתעפות המניפסט של מאגר הליבה לכל מכשיר Pixel שנתמך ב-GKI. פרטים נוספים הקטע Legacy Pixel Kernels של Pixel 5 הסתעפויות במניפסט של הליבה.

הסתעפויות ליבה (kernel) של Pixel שנתמכות ב-GKI
מכשירים נתיב בינארי בעץ AOSP הסתעפויות מאגר ליבת GKI
Pixel 9 Pro Fold (שביט) device/google/comet-kernel android-gs-comet-6.1-android14-qpr3-d1 android14-6.1

Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo) | device/google/caimito-kernel | android-gs-caimito-6.1-android14-qpr3-d1 | android14-6.1 Pixel 8a (akita) | device/google/akita-kernel | android-gs-akita-5.15-android14-qpr3 | android14-5.15 Pixel 8 (shiba)
Pixel 8 Pro (האסקי) | device/google/shusky-kernel | android-gs-shusky-5.15-android14-qpr3 | android14-5.15 Pixel Fold (felix) | device/google/felix-kernel | android-gs-felix-5.10-android14-qpr3 | android13-5.10 Pixel Tablet (tangorpro) | device/google/tangorpro-kernel | android-gs-tangorpro-5.10-android14-qpr3 | android13-5.10 Pixel 7a (lynx) | device/google/lynx-kernel | android-gs-lynx-5.10-android14-qpr3 | android13-5.10 Pixel 7 (פנתר)
Pixel 7 Pro (צ'יטה) | device/google/pantah-kernel | android-gs-pantah-5.10-android14-qpr3 | android13-5.10 Pixel 6a (bluejay) | device/google/bluejay-kernel | android-gs-bluejay-5.10-android14-qpr3 | android13-5.10 Pixel 6 (oriole)
Pixel 6 Pro (עורב) | device/google/raviole-kernel | android-gs-raviole-5.10-android14-qpr3 | android13-5.10

בנוסף לליבה (kernel) שנתמכת על ידי היצרן, מכשירי Pixel 6 ו-Pixel 6 Pro נתמכת למטרות פיתוח של GKI רק בליבה (kernel) של Android Common. ההסתעפויות שכלולות בפלטפורמה והליבה (kernel) הנתמכות של Android 6 או 6 Pro הטבלה 'שילובים'. בגלל הבדלים ב-UAPI של הספק בין מנהלי התקנים של פלטפורמת Android ומנהלי התקנים של ליבה (kernel) של Pixel, הטבלה מספקת אילו שילובי build נתמכים.

שילובים נתמכים של פלטפורמת Android וליבה של Pixel 6/6 Pro
הסתעפות מניפסט ליבה של Pixel סניף GKI Build של פלטפורמת Android תמיכה בaosp-main?
gs-android-gs-raviole-mainline android-mainline (v6.8) AP1A.240505.004 (11583682) כן
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) כן
gs-android13-gs-rawavee-5.15 android13-5.15 TQ1A.230205.002 (9471150) לא

הכנת מכשיר Pixel

תרשים הזרימה הבא מתאר את התהליך של עדכון הליבה ב-Pixel מכשירים מדגם 6 ואילך:

**איור 1.** תרשים זרימה של עדכון ליבה

ביצוע Flash של המכשיר באמצעות flash.android.com

  1. מעבר אל Flash.android.com
  2. בוחרים את גרסת ה-build של Android על סמך הליבה והפלטפורמה הנתמכים של Android. שילובים שונים.
  3. צריך לבחור אחת מהאפשרויות האלה:
    • איפוס נתוני המכשיר
    • אילוץ הפעלה של כל המחיצות ב-Flash
    • השבתת האימות
  4. לוחצים על הלחצן Install build כדי להבהב את המכשיר.

**איור 2.** דוגמה לתחנת פלאש

מורידים ומרכיבים את הליבה

סנכרון מאגר הליבה

מריצים את הפקודות הבאות כדי להוריד את קוד המקור של הליבה. עיינו ב ליבה ופלטפורמה נתמכות של Android Pro 6/6 Pro טבלת השילובים למכשירי Pixel KERNEL_MANIFEST_BRANCH.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

עדכון של Ramdisk של הספק

מעדכנים את הקובץ vendor_ramdisk-DEVICE.img באמצעות מאגר ליבה (kernel) תואמת ל-build של פלטפורמת Android שמובנית במכשיר. יש כמה אפשרויות שאפשר לעקוב אחריהן.

אפשרות 1) מחלצים את תמונת הרדיסק של הספק מתמונת היצרן של Pixel.
  1. אפשר להוריד את תמונת היצרן הנתמכת למכשיר הזה מהכתובת https://developers.google.com/android/images.

  2. מחלצים את vendor_boot.img:

    • הפקודות הבאות משתמשות ב-Pixel 6 Pro AP1A.240505.004 לדוגמה. מחליפים את השם של קובץ ה-ZIP עם שם הקובץ של תמונת היצרן שהורדתם.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.zip vendor_boot.img
    
  3. פורקים את vendor_boot.img כדי לקבל את ה-ramdisk של הספק.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. מעתיקים את הקובץ vendor-ramdisk-by-name/ramdisk_ שחולץ למאגר הליבה של Pixel.

    מכשירים DEVICE_RAMDISK_PATH
    Pixel 6 (אוריל)
    Pixel 6 Pro (עורב)
    prestructureds/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
    Pixel 6a (bluejay) פרטי/מכשירים/google/bluejay/vendor_ramdisk-bluejay.img
      cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
          KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
    
אפשרות 2) מעתיקים את vendor_ramdisk ממאגר פלטפורמת Android שפותח באופן מקומי.
מכשירים DEVICE_RAMDISK_PATH
Pixel 6 (אוריל)
Pixel 6 Pro (עורב)
prestructureds/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
Pixel 6a (bluejay) פרטי/מכשירים/google/bluejay/vendor_ramdisk-bluejay.img
cp ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

הידור של הליבה (Kleaf)

ב-Android 13, הסקריפט build.sh הוחלף במערכת build חדשה של ליבה (kernel) שנקרא Kleaf. במכשירים עם android13-5.15 ואילך, את הליבה צריך לבנות באמצעות Kleaf.

בטלפונים מדגם Pixel 6 ו-Pixel 6 Pro עם ליבה (kernel) של android14 ואילך, צריך להריץ את Kleaf build הפקודה:

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

בטלפונים מדגמי Pixel 6 ו-Pixel 6 Pro עם ליבות של android13-5.15, צריך להריץ את Kleaf build הפקודה:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

עבור כל שאר הליבות (kernel) של Pixel, מריצים את הסקריפט build_DEVICE.sh שנמצא ב-KERNEL_REPO_ROOT. עבור לדוגמה, לבנות את הליבה של Pixel 6 בהסתעפות android-gs-raviole-5.10-android14, מריצים את הפקודה:

build_slider.sh

כברירת מחדל, הסקריפטים build_DEVICE.sh משתמשים ליבת GKI מוגדרת מראש כדי להאיץ את תהליך ה-build. אם רוצים לשנות את הליבה של הליבה, ואז להגדיר את משתנה הסביבה BUILD_AOSP_KERNEL=1 כדי ליצור את הליבה מהמקורות המקומיים.

לפרטים נוספים על מערכת הליבה של גרסת ה-build ואיך להתאים אישית את ה-build, קראו את המאמר Kleaf - בניית ליבות של Android בעזרת Bazel.

יצירת Flash של תמונות הליבה

הערה: אם לא השבתת את האימות, צריך לעשות אותו לפני ההבהוב של הליבה (kernel) המותאמת אישית. זוהי הפקודה:
fastboot oem disable-verification
אזהרה: אם מפעילים ליבה (kernel) מותאמת אישית מעל build של פלטפורמה, ייתכן שיהיה צורך לאפס את נתוני המכשיר אם שדרוג לאחור ברמת התיקון (SPL) שמשויך לליבה החדשה. התהליך הזה מוחק את כל המידע האישי שלך. חשוב לגבות את הנתונים לפני איפוס הנתונים.
fastboot -w

כדי להריץ את תמונות הליבה ב-Flash, מריצים את הפקודה fastboot flash על כל ליבה המחיצה שצוינה עבור המכשיר שלך. עבור מחיצות דינמיות, צריך להפעיל מחדש למצב fastbootd לפני הבהוב.

מכשירים מחיצות ליבה
6 Pixel (אוריל)
Pixel 6 Pro (עורב)
Pixel 6a (bluejay)
אתחול
dtbo
vendor_boot
vendor_dlkm (חלוקה דינמית)
Pixel 8 (שיבה)
Pixel 8 Pro (האסקי)
Pixel Fold (פליקס)
Pixel טאבלט (tangorpro)
Pixel 7a (lynx)
Pixel 7 (פנתר)
Pixel 7 Pro (צ'יטה)
אתחול
dtbo
vendor_kernel_boot
ספק_dlkm (מחיצה דינמית)
system_dlkm (חלוקה דינמית)

אלה הפקודות ההבהובות של Pixel 6 ב-android-mainline:

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

אפשר למצוא את תמונות הליבה ב-DIST_DIR.

הסתעפות ליבה DIST_DIR
גרסה 5.10 out/mixed/dist
גרסה 5.15 ואילך out/DEVICE/dist
הערה: אם יש לכם מתאם טורי וברצונך להפעיל את האפשרות הסידורית ביומנים, הפקודה היא:
fastboot oem uart enable
fastboot oem uart config 3000000
דוגמה לפקודה להתחברות מהמארח:
screen -fn /dev/ttyUSB* 3000000

שחזור תמונות היצרן

כדי לשחזר את המכשיר לתמונות המקוריות, אפשר להשתמש Flash.android.com.

ליבות (kernel) של Pixel מדור קודם

לידיעתך, הסתעפויות הליבה (kernel) של Pixel מדור קודם בטבלה מופיעים בהסתעפויות מאגר הליבה של מכשירים מדגם Pixel 5 ודגמים קודמים. המכשירים האלה לא נתמכים ב-GKI.

הסתעפויות ליבה (kernel) של Pixel מדור קודם
מכשירים נתיב בינארי בעץ AOSP הסתעפויות מאגר
Pixel 5a (barbet)
Pixel 4a (5G) (בראמבל)
Pixel 5 (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (דג שמש) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (להבה)
Pixel 4 XL (קורל)
device/google/coral-kernel android-msm-coral-4.14-android13
Pixel 3a (sargo)
Pixel 3a XL (bonito)
device/google/bonito-kernel android-msm-bonito-4.9-android12L
Pixel 3 (קו כחול)
Pixel 3 XL (צלב)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (טייוואן)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (דג מפרשים)
Pixel XL (מרלין)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2