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

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

הסתעפויות ליבה (kernel) של Pixel שנתמכות ב-GKI
מכשיר נתיב בינארי בעץ AOSP הסתעפויות מאגר ליבת GKI
Pixel 8a (אקיטה) 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 (פליקס) 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) מכשיר/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 android13-5.10
Pixel 6 (אוריל)
Pixel 6 Pro (עורב)
device/google/ra שליד-kernel android-gs-rawavee-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 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.** דוגמה לתחנת פלאש

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

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

מריצים את הפקודות הבאות כדי להוריד את קוד המקור של הליבה. עיינו בטבלה של שילובי ליבה ופלטפורמה נתמכים של Pixel 6 Pro ל-Android ב-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 במאגר הליבה כך שיתאים לגרסת ה-build של פלטפורמת 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 (אוריל)
    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 הוחלף במערכת ליבה (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 משתמשים בליבה (kernel) המוכנה מראש של GKI כדי לזרז את תהליך ה-build. אם רוצים לשנות את הליבה, צריך להגדיר את משתנה הסביבה BUILD_AOSP_KERNEL=1 כדי לבנות את הליבה מהמקורות המקומיים.

פרטים נוספים על מערכת הליבה של גרסת ה-build ועל התאמה אישית של ה-build מופיעים במאמר Kleaf – פיתוח ליבה של Android באמצעות Bazel.

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

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

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

מכשיר מחיצות ליבה
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) (בראמבל)
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