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

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

ההסתעפויות של הליבה של Pixel שנתמכות ב-GKI
מכשירים נתיב בינארי בעץ AOSP הענפים של המאגר ליבה של GKI
Pixel 9 Pro Fold‏ (comet) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Pixel 9‏ (tokay)
Pixel 9 Pro‏ (caiman)
Pixel 9 Pro XL‏ (komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Pixel 8a‏ (akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Pixel 8‏ (shiba)
Pixel 8 Pro‏ (husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Pixel Fold‏ (felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Pixel Tablet‏ (tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Pixel 7a‏ (lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Pixel 7‏ (panther)
Pixel 7 Pro‏ (cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Pixel 6a‏ (bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Pixel 6‏ (oriole)
Pixel 6 Pro‏ (raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

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

שילובים נתמכים של ליבה ופלטפורמת Android ב-Pixel 6/6 Pro
Pixel Kernel Manifest Branch GKI Branch Android Platform Build תמיכה ב-aosp-main?
gs-android-gs-raviole-mainline android-mainline‏ (v6.12) BP11.241025.006‏ (12620009) כן
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006‏ (12620009) כן
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002‏ (9471150) לא

הכנת מכשיר Pixel

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

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

איך מבצעים איפוס למכשיר באמצעות flash.android.com

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

**איור 2.** דוגמה ל-Flash Station

הורדה וקמפלור של הליבה

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

מריצים את הפקודות הבאות כדי להוריד את קוד המקור של הליבה. הטבלה של שילובי הליבה והפלטפורמה הנתמכים ב-Android ל-Pixel 6/6 ProKERNEL_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 במאגר הליבה כך שיתאים לגרסה של Android שתותקן במכשיר. יש כמה אפשרויות לעדכון הקובץ vendor_ramdisk-DEVICE.img. משתמשים באפשרות (1) אם אתם משתמשים ב-Android 15 QPR2‏ (BP11.241025.006) ואילך. אחרת, משתמשים באפשרות (2).

  • אפשרות 1) מעדכנים רק את הביטים של DTB ו-DLKM ב-ramdisk של מחיצת vendor_boot

    החל מגרסה 35.0.2-12583183 של fastboot, אפשר להפעיל את DTB ואת DLKM ישירות ב-ramdisk במחיצה vendor_boot. מורידים את sdk-repo-HOST_OS-platform-tools-12583183.zip ומחליצים אותו מארטיפקטים של v35.0.2-12583183 לסביבה של המכונה המארחת לשימוש.

    פועלים לפי ההוראות ל-flash של DTB ו-vendor_boot:dlkm בקטע Flashing the kernel images.

  • אפשרות 2) חילוץ קובץ האימג' של ה-ramdisk של הספק מקובץ האימג' של 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‏ (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 vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
            KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
      

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

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

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

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

בכל שאר הליבות של Pixel, מריצים את הסקריפט build_DEVICE.sh שנמצא בכתובת KERNEL_REPO_ROOT. ברוב המקרים, השדה DEVICE צריך להיות שם הקוד שתואם לשם הקוד שמצוין בעמודה Binary path in AOSP tree בטבלה GKI supported Pixel kernel branches. זה יכול להיות שם הקוד של מכשיר אחד, כמו 'akita' (Pixel 8a), או שם קוד שמייצג קבוצה של מכשירים קשורים שיש להם ליבה משותפת, כמו '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 משתמשים בליבה של GKI שנוצרה מראש כדי לזרז את תהליך ה-build. אם רוצים לשנות את הליבה של הליבה, צריך להגדיר את משתנה הסביבה BUILD_AOSP_KERNEL=1 כדי ליצור את הליבה מהמקורות המקומיים במקום זאת. כברירת מחדל, ההסתעפויות של הליבה לפיתוח יוצרות ישירות את מקור הליבה.

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

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

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

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

מכשירים מחיצות ליבה
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (מחיצה דינמית)
Pixel 8‏ (shiba)
Pixel 8 Pro‏ (husky)
Pixel Fold‏ (felix)
Pixel Tablet‏ (tangorpro)
Pixel 7a‏ (lynx)
Pixel 7‏ (panther)
Pixel 7 Pro‏ (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (dynamic partition)
system_dlkm (dynamic partition)

בטלפונים מדגמי Pixel 6/‏6 Pro/‏6a, אם דילגתם על ההורדה של vendor_ramdisk בקטע עדכון ה-ramdisk של הספק, תוכלו להשתמש בפקודה הבאה כדי לעדכן את ה-ramdisk של DTB ו-DLKM במקום לבצע את הפלאש של קובץ האימג' vendor_boot.img:

fastboot flash  --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img

אלה הפקודות להצגת 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.

ליבות Pixel מדור קודם

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

ענפי ליבה מדור קודם של 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‏ (flame)
Pixel 4 XL‏ (coral)
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‏ (sailfish)
Pixel XL‏ (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2