פיתוח ליבות של Pixel

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

ענפי ליבת Pixel שנתמכים על ידי GKI
מכשיר ענפים במאגר GKI Kernel
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (comet) android-gs-comet-6.1-android16 android14-6.1
‫Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
android-gs-caimito-6.1-android16 android14-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android14-6.1
‫Pixel 8 ‏ (shiba)
Pixel 8 Pro ‏ (husky)
android-gs-shusky-6.1-android16 android14-6.1
Pixel Fold (felix) android-gs-felix-6.1-android16 android14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
‫Pixel 7‏ (panther)
Pixel 7 Pro‏ (cheetah)
android-gs-pantah-6.1-android16 android14-6.1
Pixel 6a (bluejay) android-gs-bluejay-6.1-android16 android14-6.1
‫Pixel 6‏ (oriole)
Pixel 6 Pro‏ (raven)
android-gs-raviole-6.1-android16 android14-6.1

בנוסף לליבות הנתמכות במפעל, מכשירי Pixel 6 ו-Pixel 6 Pro נתמכים למטרות פיתוח GKI רק בענפי ליבת Android Common שכלולים בטבלה Supported Pixel 6/6 Pro Android Platform and Kernel Combinations. בגלל ההבדלים ב-UAPI של הספקים בין ה-HAL של פלטפורמת Android לבין מנהלי ההתקנים של ליבת Pixel, בטבלה מפורטים שילובי ה-Build הנתמכים.

שילובי פלטפורמה וליבה של Android שנתמכים ב-Pixel 6/6 Pro
Pixel Kernel Manifest Branch GKI Branch Android Platform Build
gs-android-gs-raviole-mainline android-mainline android-latest-release
gs-android16-6.12-gs101 android16-6.12 android-latest-release
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

הכנת מכשיר Pixel

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

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

צריבת ROM במכשיר באמצעות flash.android.com

  1. עוברים אל flash.android.com
  2. בוחרים את גרסת ה-build של Android על סמך השילובים הנתמכים של פלטפורמת Android וליבת המערכת.
    • ב-android-latest-release, בוחרים באפשרות 'חזרה לגרסה ציבורית', Canary או בטא.
  3. בוחרים באפשרויות הבאות:
    • איפוס נתוני המכשיר
    • אילוץ הפעלה של Flash בכל המחיצות
    • השבתת האימות
  4. לוחצים על הלחצן Install build (התקנת גרסת build) כדי לצרוב את המכשיר.

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

הורדה והידור של ליבת המערכת

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

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

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

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

    פועלים לפי ההוראות כדי להפעיל את DTB ואת vendor_boot:dlkm בקטע Flash 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 הוחלף במערכת חדשה לבניית ליבה שנקראת Kleaf. במכשירים עם android13-5.15 ואילך, צריך ליצור את ליבת המערכת באמצעות Kleaf.

לנוחותכם, תוכלו להריץ את הסקריפט build_DEVICE.sh שנמצא בכתובת KERNEL_REPO_ROOT. ברוב המקרים, DEVICE צריך להיות שם הקוד, שיכול להיות שם הקוד של מכשיר אחד, כמו 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 של הקרנל מהמקורות המקומיים במקום זאת. ענפי ליבת הפיתוח יוצרים ישירות את מקור הליבה כברירת מחדל.

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

הפעלת Flash על תמונות הליבה

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

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

מכשיר מחיצות ליבה
‫Pixel 6‏ (oriole)
‫Pixel 6 Pro‏ (raven)
‫Pixel 6a‏ (bluejay)
‫boot
dtbo
vendor_boot או vendor_boot:dlkm
vendor_dlkm (מחיצה דינמית)
‫Pixel 9 (tegu)
Pixel 9 Pro Fold (comet)
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
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 ב-android-mainline:

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash  --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

במכשירי Pixel 6/6 Pro/6a, אם עדכנתם את vendor_ramdisk בקטע עדכון של ramdisk של הספק, אתם צריכים להשתמש בפקודה הבאה כדי לעדכן את המחיצה vendor_boot:

fastboot flash vendor_boot out/slider/dist/vendor_boot.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 (blueline)
Pixel 3 XL (crosshatch)
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