Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

בניית גרעינים

דף זה מפרט את תהליך בניית הגרעינים המותאמים אישית למכשירי Android. ההוראות הבאות מנחות אותך בתהליך בחירת המקורות הנכונים, בניית הגרעין והטמעת התוצאות לתמונת מערכת הבנויה מפרויקט קוד פתוח של Android (AOSP).

ניתן לרכוש מקורות build/build.sh עדכניים יותר באמצעות Repo ולהיבנות ללא תצורה נוספת על ידי הפעלת build/build.sh משורש קופת המקור שלך.

לגבי גרעינים ישנים יותר או גרעינים שלא מופיעים בהמשך, עיין בהוראות כיצד לבנות גרעינים מדור קודם .

הורדת מקורות ובניית כלים

עבור גרעינים אחרונים, השתמש ב- repo להורדת המקורות, שרשרת הכלים ובניית סקריפטים. גרעינים מסוימים (למשל גרעיני פיקסל 3) דורשים מקורות ממאגרים רבים של git, בעוד שאחרים (למשל, הגרעינים הנפוצים) דורשים רק מקור יחיד. שימוש בגישת ה- repo מבטיח התקנה נכונה של ספריית המקור.

הורד את המקורות לענף המתאים:

mkdir android-kernel && cd android-kernel
repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH
repo sync

הטבלה הבאה מפרטת את שמות BRANCH של הגרעינים הזמינים באמצעות שיטה זו.

התקן נתיב בינארי בעץ AOSP סניפי רפו
פיקסל 5 (redfin) מכשיר / google / redfin-kernel אנדרואיד-msm-redfin-4.19-android11-d1
פיקסל 4a (5G) (ברמל) מכשיר / google / bramble-kernel אנדרואיד-msm-bramble-4.19-android11-d1
פיקסל 4a (דג שמש) מכשיר / google / sunfish-kernel אנדרואיד-msm-sunfish-4.14-android11
פיקסל 4 (להבה)
פיקסל 4 XL (אלמוגים)
מכשיר / google / coral-core אנדרואיד-msm-coral-4.14-android11
פיקסל 3a (סרגו)
פיקסל 3a XL (בוניטו)
מכשיר / google / bonito-kernel אנדרואיד-msm-bonito-4.9-android11
פיקסל 3 (בלוליין)
פיקסל 3 XL (צולב)
מכשיר / google / crosshatch-kernel אנדרואיד-msm-crosshatch-4.9-android11
פיקסל 2 (סויה)
פיקסל 2 XL (טאימן)
מכשיר / google / wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
פיקסל (דג מפרש)
פיקסל XL (מרלין)
מכשיר / google / marlin-kernel אנדרואיד-msm-marlin-3.18-pie-qpr2
Hikey960 מכשיר / לינארו / hikey-core hikey-linaro-android-4.14
hikey-linaro-android-4.19
common-android12-5.4
ביגל x15 מכשיר / ti / beagle_x15-kernel omap-beagle-x15-android-4.14
omap-beagle-x15-android-4.19
אנדרואיד גרעין משותף לא common-android-4.4
common-android-4.9
common-android-4.14
common-android-4.19
common-android-4.19-stable
common-android11-5.4
common-android12-5.4
common-android12-5.10
common-android-mainline

בניית הגרעין

ואז בנה את הגרעין עם:

build/build.sh

בינארי הליבה, המודולים והתמונה המתאימה ממוקמים בספריה out/ BRANCH /dist .

בניית מודולי GKI

אנדרואיד 11 הציגה את GKI , המפריד בין הגרעין לתמונת ליבה המתוחזקת על ידי גוגל ומודולים המתוחזקים על ידי ספקים, אשר בנויים בנפרד.

דוגמה לתצורת תמונת ליבה:

BUILD_CONFIG=common/build.config.gki.x86_64 build/build.sh

דוגמה לתצורת המודול (דיונון):

BUILD_CONFIG=common-modules/virtual-device/build.config.cuttlefish.x86_64 build/build.sh

מריץ את הגרעין

ישנן מספר דרכים להריץ ליבת בנוי בהתאמה אישית. להלן דרכים ידועות המתאימות לתרחישי פיתוח שונים.

הטמעה בבניית התמונות של Android

העתק את Image.lz4-dtb למיקום הבינארי של הליבה המתאימה בתוך עץ AOSP ובנה מחדש את תמונת האתחול.

לחלופין, הגדירו את המשתנה TARGET_PREBUILT_KERNEL תוך שימוש ב- make bootimage (או בכל שורת פקודה אחרת make הבונה תמונת אתחול). משתנה זה נתמך על ידי כל המכשירים כאשר הוא מוגדר באמצעות device/common/populate-new-device.sh . לדוגמה:

export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb

גרעינים מהבהבים ואתחול עם fastboot

למכשירים האחרונים ביותר יש סיומת Bootloader כדי לייעל את תהליך היצירה ואתחול תמונת האתחול.

כדי לאתחל את הליבה בלי להבהב:

adb reboot bootloader
fastboot boot Image.lz4-dtb

בשיטה זו, הליבה לא ממש מהבהבת ולא תימשך לאורך אתחול מחדש.

התאמה אישית של בניית הליבה

תהליך הבנייה והתוצאה יכולים להיות מושפעים על ידי משתני סביבה. רובם אופציונליים וכל ענף גרעין צריך להגיע עם תצורת ברירת מחדל נכונה. הנפוצים ביותר מופיעים כאן. לקבלת רשימה מלאה (ועדכנית), עיין ב- build/build.sh .

משתנה הסביבה תיאור דוגמא
BUILD_CONFIG בנה קובץ תצורה כדי לאתחל את סביבת הבנייה ממנה. יש להגדיר את המיקום ביחס לספריית השורש Repo. ברירות מחדל לבנות build.config .
חובה לגרעינים נפוצים.
BUILD_CONFIG=common/build.config.gki.aarch64
OUT_DIR ספריית פלט בסיסית לבניית הליבה. OUT_DIR=/path/to/my/out
DIST_DIR ספריית פלט בסיסית להפצת הליבה. OUT_DIR=/path/to/my/dist
CC עקוף מהדר לשימוש. חוזר אל מהדר ברירת המחדל שהוגדר על ידי build.config . CC=clang
SKIP_MRPROPER דלג make mrproper SKIP_MRPROPER=1
SKIP_DEFCONFIG דלג make defconfig SKIP_DEFCONFIG=1

תצורת ליבות מותאמת אישית לבניינים מקומיים

אם אתה צריך להחליף אפשרות קביעת תצורה של הליבה באופן קבוע, למשל, כאשר אתה עובד על תכונה, או אם אתה צריך להגדיר אפשרות לצורכי פיתוח, תוכל להשיג את הגמישות על ידי שמירה על שינוי מקומי או עותק של תצורת ה- build.

הגדר את המשתנה POST_DEFCONFIG_CMDS להצהרה המוערכת מיד לאחר make defconfig הצעד הרגיל make defconfig . מאחר build.config מקורם בסביבת build, ניתן לקרוא לפונקציות המוגדרות ב- build.config כחלק מהפקודות post-defconfig.

דוגמה נפוצה היא השבתת אופטימיזציה של זמן קישור (LTO) עבור גרעיני crosshatch במהלך הפיתוח. אמנם LTO מועיל לליבות משוחררות, אך התקורה בזמן הבנייה יכולה להיות משמעותית. קטע הקוד הבא שנוסף ל- build.config המקומי משבית את ה- LTO בהתמדה בעת שימוש ב- build/build.sh .

POST_DEFCONFIG_CMDS="check_defconfig && update_debug_config"
function update_debug_config() {
    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
         -d LTO \
         -d LTO_CLANG \
         -d CFI \
         -d CFI_PERMISSIVE \
         -d CFI_CLANG
    (cd ${OUT_DIR} && \
     make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}

זיהוי גרסאות ליבה

ישנן שתי דרכים לזהות את הגרסה הנכונה לבנייה.

גרסת ליבה מעץ AOSP

עץ AOSP מכיל גרסאות גרעין מובנות מראש. לרוב יומן git חושף את הגרסה הנכונה כחלק מהודעת ה- commit:

cd $AOSP/device/VENDOR/NAME
git log --max-count=1

גרסת ליבה מתמונת המערכת

כדי לקבוע את גרסת הליבה המשמשת בתמונת מערכת, הפעל את הפקודה הבאה כנגד קובץ הליבה:

file kernel

עבור קבצי Image.lz4-dtb , הפעל:

grep -a 'Linux version' Image.lz4-dtb

בניית תמונת מגף

ניתן לבנות תמונת אתחול באמצעות סביבת בניית הליבה. לשם כך אתה זקוק לבינארי של ramdisk, אותו תוכל להשיג על ידי הורדת תמונת אתחול GKI ופירוקו. כל תמונת אתחול של GKI מהמהדורה המשויכת ל- Android תפעל.

tools/mkbootimg/unpack_bootimg.py --boot_img=boot-5.4-gz.img
mv out/ramdisk gki-ramdisk.lz4

אם אתם מתפתחים עם מאסטר AOSP, תוכלו להוריד במקום זאת את חפץ ה- ramdisk-recovery.img לבנות מבית aosp_arm64 על ci.android.com ולהשתמש בו כבינארי ה- ramdisk שלכם.

כאשר יש לך בינארי של ramdisk gki-ramdisk.lz4 אותו ל- gki-ramdisk.lz4 בספריית הבסיס של בניית הליבה, אתה יכול ליצור תמונת אתחול על ידי ביצוע:

BUILD_BOOT_IMG=1 SKIP_VENDOR_BOOT=1 KERNEL_BINARY=Image.gz GKI_RAMDISK_PREBUILT_BINARY=gki-ramdisk.lz4 BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh

תמונת האתחול ממוקמת ב- out/<kernel branch>/dist/boot.img .