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

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

ההסתעפויות של הליבה של Pixel שנתמכות ב-GKI
מכשירים נתיב בינארי בעץ AOSP הענפים של המאגר ליבת GKI
Pixel 9 Pro Fold‏ (comet) 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‏ (husky)
מכשיר/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‏ (panther)
Pixel 7 Pro‏ (cheetah)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 android13-5.10
Pixel 6a (bluejay) מכשיר/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 android13-5.10
Pixel 6‏ (oriole)
Pixel 6 Pro‏ (raven)
device/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 android13-5.10

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

שילובים נתמכים של ליבה ופלטפורמת Android ב-Pixel 6/6 Pro
הסתעפות מניפסט ליבה של Pixel GKI Branch 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-raviole-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 כדי לבצע את ה-flash של המכשיר.

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

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

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

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

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

עדכון של ה-ramdisk של הספק

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

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

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

    • כדוגמה, הפקודות הבאות משתמשות ב-AP1A.240505.004 של Pixel 6 Pro. מחליפים את שם קובץ ה-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‏ (oriole)
    Pixel 6 Pro‏ (raven)
    prebuilts/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‏ (oriole)
Pixel 6 Pro‏ (raven)
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
Pixel 6a‏ (bluejay) private/devices/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 הוחלף במערכת ליבה (kernel) חדשה שנקראת Kleaf. במכשירים עם android13-5.15 ואילך, צריך ליצור את הליבה באמצעות Kleaf.

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

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. ברוב המקרים, השדה DEVICE צריך להיות שם הקוד שתואם לשם הקוד שמצוין בעמודה Binary path in AOSP tree בטבלה GKI supported Pixel kernel branches. זה יכול להיות שם הקוד של מכשיר אחד, כמו 'akita' (Pixel 8a), או שם קוד שמייצג קבוצה של מכשירים קשורים שחולקים ליבה (kernel) כמו 'caimito', כלומר Pixel 9 (tokay), Pixel 9 Pro (caiman) ו-Pixel 9 Pro XL (komodo). ל-android14 ולגרסאות קודמות, יש להשתמש ב-build_slider.sh ל-Pixel 6 וב-Pixel 6 Pro וב-build_cloudripper.sh ל-Pixel 7 ול-Pixel 7 Pro.

לדוגמה, כדי ליצור את הליבה של Pixel 6 בהסתעפות android-gs-raviole-5.10-android14, מריצים את הפקודה:

build_slider.sh

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

פרטים נוספים על מערכת ה-build של הליבה ועל אופן ההתאמה האישית של ה-build מופיעים במאמר Kleaf – Building Android Kernels with Bazel.

איך מבצעים פלאש של קובצי האימג' של הליבה

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

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

מכשירים מחיצות ליבה
Pixel 6 (אוריולה)
Pixel 6 Pro (עורב)
Pixel 6a (bluejay)
אתחול
dtbo
vendor_boot
vendor_dlkm (מחיצה דינמית)
Pixel 8 (shiba)
Pixel 8 Pro (האסקי)
Pixel Fold (felix)
Pixel טאבלט (tangorpro)
Pixel 7a (lynx)
Pixel 7 (פנתר)
Pixel 7 Pro (צ'יטה)
אתחול
dtbo
vendor_kernel_boot
vendor_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 מדור קודם

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

הסתעפויות ליבה (kernel) של Pixel מדור קודם
מכשירים נתיב בינארי בעץ AOSP הענפים של המאגר
Pixel 5a‏ (barbet)
Pixel 4a‏ (5G)‏ (bramble)
Pixel 5‏ (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a‏ (sunfish) 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‏ (taimen)
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