במדריך הזה מוסבר איך להוריד, לקמפל ולצרוב ליבת Pixel מותאמת אישית לצורך פיתוח. בגלל GKI, עכשיו אפשר לעדכן את ליבת המערכת באופן עצמאי, בלי קשר לגרסת הפלטפורמה של 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 של הספק בין ה-HAL של פלטפורמת Android לבין דרייברים של ליבת Pixel, בטבלה מפורטות השילובים הנתמכים של גרסאות build.
שילובים נתמכים של פלטפורמת 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 ואילך:
צריבת ROM במכשיר באמצעות flash.android.com
- עוברים אל flash.android.com.
- בוחרים את גרסת ה-Android בהתאם לשילובים הנתמכים של פלטפורמת Android וליבת המערכת.
- ב-
android-latest-release, בוחרים באפשרות 'חזרה לגרסה ציבורית', Canary או בטא.
- ב-
- בוחרים באפשרויות הבאות:
- איפוס נתוני המכשיר
- אילוץ הפעלת הפלאש בכל המחיצות
- השבתת האימות
- לוחצים על הלחצן Install build (התקנת גרסת build) כדי לצרוב את המכשיר.
סנכרון מאגר הליבה
מריצים את הפקודות הבאות כדי להוריד את קוד המקור של הליבה. בטבלה Supported Pixel 6 and Pixel 6 Pro Android Platform and Kernel Combinations מפורטים השילובים של פלטפורמת 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 שמועברת למכשיר. יש כמה אפשרויות לעדכן את הקובץ 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. כדי להשתמש באפשרות הזו, צריך לשדרג את platform-tools לגרסה 36.0.0 ואילך. כדי לעשות זאת, מריצים את הפקודה הבאה:$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"פועלים לפי ההוראות להצגת ה-DTB ו-
vendor_boot:dlkmבקטע הצגת תמונות הליבה.אפשרות 2) חילוץ תמונת ה-ramdisk של הספק מתמונת המפעל של Pixel.
מורידים את תמונת המפעל הנתמכת של המכשיר מהכתובת https://developers.google.com/android/images.
מחפשים את הקובץ
vendor_boot.img:בדוגמה הבאה נעשה שימוש ב-Pixel 6 Pro AP1A.240505.004. מחליפים את שם קובץ ה-ZIP בשם הקובץ של אימג' היצרן שהורדתם.
unzip raven-ap1a.240505.004-factory-9d783215.zipcd raven-ap1a.240505.004unzip image-raven-ap1a.240505.004.zip vendor_boot.imgפורקים את
vendor_boot.imgכדי לקבל את ה-ramdisk של הספק.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_outמעתיקים את הקובץ
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 הוחלף במערכת חדשה לבניית ליבה שנקראת 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.
הפעלת 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, Pixel 6 Pro ו-Pixel 6a, אם עדכנתם את vendor_ramdisk בקטע עדכון של vendor 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 enablefastboot oem uart config 3000000screen -fn /dev/ttyUSB* 3000000
שחזור תמונות המערכת המקוריות
כדי לשחזר את קושחת המכשיר, אפשר להשתמש ב-flash.android.com.
פיתוח והעברה של ליבת Pixel במעלה הזרם
מכיוון שמכשירי Pixel 6 ו-Pixel 6 Pro נתמכים בגרסה העדכנית של ליבת Linux, אפשר להשתמש ב-android-mainline רק עם מנהלי התקנים עדכניים כדי לבצע אתחול להנחיית מעטפת של מכשיר לפיתוח ליבה. בקטע הזה מפורטים השלבים לסינכרון, לבנייה ולצריבת ליבת Pixel 6 ו-Pixel 6 Pro מ-android-mainline.
כדי להתחיל, פועלים לפי השלבים הבאים.
- מכינים את המכשיר לפי השלבים שמפורטים במאמר הכנת מכשיר Pixel
- מסנכרנים את הענף של מניפסט ליבת
common-android-mainlineלפי השלבים שמפורטים במאמר סנכרון מאגר ליבה. הגדרת יעד ה-build של Kleaf מוגדרת בנתיב
KERNEL_REPO_ROOT/devices/google/raviole. כדי לקמפל את יעד הבנייהraviole_upstream, מריצים את פקודת Kleaf:tools/bazel run //devices/google/raviole:raviole_upstream_distבדומה לליבות הייצור, צריך להשבית את האימות ולמחוק את המכשיר כשמבצעים פלאשינג של ליבת מותאמת אישית על גבי תמונות המפעל של Android. פרטים נוספים זמינים בהערות שבקטע העברת תמונות ליבה ל-Flash.
במצב 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כדי לגשת להנחיית פקודות של מעטפת במכשיר, אפשר להפעיל מחדש את המכשיר למצב שחזור על ידי הפעלת הפקודה:
fastboot reboot recoveryפותחים את מעטפת המכשיר על ידי הפעלת הפקודה
adb shell. אפשר גם להשתמש בגישת Root על ידי הפעלת הפקודהadb root.
ליבות Pixel מדור קודם
לעיון, בטבלה Legacy Pixel kernel branches מפורטים הענפים של מאגר ליבת המערכת למכשירי 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 |