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

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

מכשירי Pixel 6 ו-Pixel 6 Pro נתמכים גם בקרנל Linux במעלה הזרם, ויכולים לבצע אתחול להנחיית מעטפת המכשיר רק באמצעות מנהלי התקנים במעלה הזרם. פרטים נוספים זמינים במאמר בנושא Build and flash the upstream Pixel kernel.

איך יוצרים ומעדכנים את ליבות ה-GKI Pixel

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

ענפי ליבת 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 and Pixel 6 Pro Android platform and kernel Combinations. בגלל הבדלים ב-UAPI של הספקים בין HALs של פלטפורמת Android לבין דרייברים של ליבת Pixel, הטבלה מציגה את שילובי הבנייה הנתמכים.

שילובים נתמכים של פלטפורמת Android וליבת המערכת ב-Pixel 6 וב-Pixel 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) כדי לצרוב את המכשיר.

‫**Figure 2.** דוגמה ל-Flash Station

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

מריצים את הפקודות הבאות כדי להוריד את קוד המקור של הליבה. בטבלה Supported Pixel 6 and Pixel 6 Pro Android Platform and Kernel Combinations (שילובי פלטפורמת Android וליבת מערכת הפעלה נתמכים ב-Pixel 6 וב-Pixel 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) עדכון רק של חלקי ה-DTB וה-DLKM ramdisk של מחיצת vendor_boot

    החל מגרסת fastboot‏ 35.0.2-12583183, אפשר לצרוב ישירות את ה-DTB ואת ה-DLKM ramdisk במחיצה vendor_boot. כדי להשתמש באפשרות הזו, צריך לשדרג את platform-tools לגרסה 36.0.0 ואילך. כדי לעשות זאת, מריצים את הפקודה הבאה:

    $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"
    

    פועלים לפי ההוראות כדי להפעיל את ה-DTB ואת vendor_boot:dlkm בקטע הפעלת תמונות הליבה.

  • אפשרות 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
      

הידור הליבה

ב-Android 13, הסקריפט build.sh הוחלף במערכת build חדשה של ליבה שנקראת 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 של הקרנל מהמקורות המקומיים במקום זאת. ענפי ליבת הפיתוח יוצרים ישירות את מקור הליבה כברירת מחדל.

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

העברת תמונות הליבה לזיכרון הפלאש

הערה: אם לא השבתתם את האימות, אתם צריכים להשבית אותו לפני שמבצעים פלאשינג לליבת המערכת בהתאמה אישית. זו הפקודה שצריך להריץ:
fastboot oem disable-verification
אזהרה: אם אתם מפעילים פלאשינג של ליבת מערכת מותאמת אישית על גרסת build של פלטפורמה, יכול להיות שתצטרכו למחוק את הנתונים במכשיר אם יש שדרוג לאחור של רמת תיקון האבטחה (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,‏ Pixel 6 Pro ו-Pixel 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 6 ו-Pixel 6 Pro נתמכים בגרסה העדכנית של ליבת לינוקס, אפשר להשתמש ב-android-mainline רק עם מנהלי התקנים עדכניים כדי לבצע אתחול להנחיית מעטפת של המכשיר לצורך פיתוח ליבה. בקטע הזה מפורטים השלבים לסינכרון, לבנייה ולצריבת ליבת Pixel 6 ו-Pixel 6 Pro מ-android-mainline.

כדי להתחיל, פועלים לפי השלבים הבאים.

  1. מכינים את המכשיר לפי השלבים שמפורטים במאמר הכנת מכשיר Pixel
  2. מסנכרנים את הענף של מניפסט ליבת common-android-mainline לפי השלבים שמפורטים במאמר סנכרון מאגר ליבה.
  3. הגדרת יעד ה-build של Kleaf מוגדרת בנתיב KERNEL_REPO_ROOT/devices/google/raviole. כדי לקמפל את יעד הבנייה raviole_upstream, מריצים את הפקודה Kleaf:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. בדומה לליבות הייצור, צריך להשבית את האימות ולמחוק את המכשיר כשמבצעים פלאשינג של ליבת מותאמת אישית על גבי תמונות המפעל של Android. פרטים נוספים מופיעים בהערות שבקטע העלאה של תמונות ליבה ל-Flash.

  5. במצב fastboot, מריצים את הפקודות הבאות כדי להפעיל את תמונות הליבה:

    fastboot flash boot        out/raviole_upstream/dist/boot.img
    fastboot flash dtbo        out/raviole_upstream/dist/dtbo.img
    fastboot flash  --dtb out/raviole_upstream/dist/dtb.img \
        vendor_boot:dlkm out/raviole_upstream/dist/initramfs.img
    
  6. כדי לגשת להנחיית פקודה של מעטפת במכשיר, אפשר להפעיל מחדש את המכשיר למצב שחזור על ידי הפעלת הפקודה:

    fastboot reboot recovery
    

    מריצים את הפקודה adb shell כדי לפתוח את מעטפת המכשיר. אפשר גם להשתמש בגישת Root על ידי הפעלת הפקודה adb root.

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

לעיון, בטבלה Legacy Pixel kernel branches מפורטים הענפים של מאגר ליבת ה-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