ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

نواة البناء

توضح هذه الصفحة تفاصيل عملية إنشاء نواة مخصصة لأجهزة Android. ترشدك الإرشادات التالية خلال عملية تحديد المصادر الصحيحة ، وبناء النواة ، وتضمين النتائج في صورة نظام مبنية من مشروع Android مفتوح المصدر (AOSP).

يمكن الحصول على مصادر kernel الأحدث باستخدام Repo ويمكن بناؤها دون مزيد من التكوين عن طريق تشغيل build/build.sh من جذر الخروج من المصدر.

بالنسبة إلى النوى القديمة أو النوى غير المدرجة أدناه ، راجع الإرشادات الخاصة بكيفية إنشاء نواة قديمة .

تنزيل المصادر وأدوات البناء

بالنسبة إلى النواة الحديثة ، استخدم repo لتنزيل المصادر وسلسلة الأدوات وإنشاء البرامج النصية. تتطلب بعض النوى (على سبيل المثال ، نواة Pixel 3) مصادر من مستودعات git متعددة ، بينما تتطلب أخرى (على سبيل المثال ، النواة الشائعة) مصدرًا واحدًا فقط. يضمن استخدام نهج repo إعداد دليل المصدر الصحيح.

قم بتنزيل المصادر الخاصة بالفرع المناسب:

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

يسرد الجدول التالي أسماء BRANCH للنواة المتاحة من خلال هذه الطريقة.

جهاز مسار ثنائي في شجرة AOSP فروع الريبو
Pixel 5 (أحمر الزعنفة)
Pixel 4a (5G) (برامبل)
device / google / redbull-kernel android-msm-redbull-4.19-android11-qpr2
بكسل 4 أ (سمكة الشمس) device / google / sunfish-kernel android-msm-sunfish-4.14-android11-qpr2
بكسل 4 (لهب)
Pixel 4 XL (مرجاني)
device / google / coral-kernel android-msm-coral-4.14-android11-qpr2
Pixel 3a (سارجو)
Pixel 3a XL (بونيتو)
device / google / bonito-kernel android-msm-bonito-4.9-android11-qpr2
Pixel 3 (أزرق أزرق)
Pixel 3 XL (التظليل المتقاطع)
device / google / crosshatch-kernel android-msm-crosshatch-4.9-android11-qpr2
بكسل 2 (العين رمادية فاتحة اللون)
Pixel 2 XL (تايمن)
device / google / wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
بكسل (سمكة ابوشراع)
Pixel XL (مارلين)
device / google / marlin-kernel android-msm-marlin-3.18-pie-qpr2.0.0-mod.apk
هيكي 960 الجهاز / لينارو / نواة هيكي hikey-linaro-android-4.14.0 تحديث
hikey-linaro-android-4.19.0 تحديث
عام android12-5.4
بيجل x15 الجهاز / ti / beagle_x15-kernel omap-beagle-x15-android-4.14.0 تحديث
omap-beagle-x15-android-4.19.0 تحديث
نواة Android المشتركة غير متاح عام-أندرويد-4.4
عام-android-4.9
عام-أندرويد 4.14.0
عام-أندرويد 4.19.0
مشترك-أندرويد-4.19-مستقر
شائع android11-5.4
عام android12-5.4
عام-android12-5.10
مشترك-android-mainline

بناء النواة

ثم قم ببناء النواة باستخدام:

build/build.sh

يوجد ملف kernel الثنائي والوحدات النمطية والصورة المقابلة في دليل out/ BRANCH /dist .

بناء وحدات GKI

قدم Android 11 GKI ، الذي يفصل النواة إلى صورة نواة تحتفظ بها Google ووحدات يحتفظ بها البائع ، والتي يتم إنشاؤها بشكل منفصل.

مثال على تكوين صورة kernel:

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

مثال على تكوين الوحدة (الحبار والمحاكي):

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

تشغيل النواة

هناك عدة طرق لتشغيل نواة مبنية بشكل مخصص. فيما يلي طرق معروفة مناسبة لسيناريوهات التطوير المختلفة.

التضمين في بناء صورة Android

انسخ Image.lz4-dtb إلى موقع kernel الثنائي المعني داخل شجرة AOSP وأعد إنشاء صورة التمهيد.

بدلا من ذلك، تحديد TARGET_PREBUILT_KERNEL متغير أثناء استخدام make bootimage (أو أي make سطر الأوامر التي تبني صورة التمهيد). هذا المتغير مدعوم من قبل جميع الأجهزة حيث تم إعداده عبر device/common/populate-new-device.sh . على سبيل المثال:

export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb

وميض وتمهيد الحبات مع fastboot

تحتوي معظم الأجهزة الحديثة على ملحق أداة تحميل التشغيل لتبسيط عملية إنشاء صورة تمهيد وتمهيدها.

لتشغيل النواة بدون وميض:

adb reboot bootloader
fastboot boot Image.lz4-dtb

باستخدام هذه الطريقة ، لا تومض النواة بالفعل ولن تستمر عبر إعادة التشغيل.

تخصيص بناء النواة

يمكن أن تتأثر عملية البناء والنتيجة بمتغيرات البيئة. معظمها اختياري ويجب أن يأتي كل فرع من فروع kernel بتكوين افتراضي مناسب. الأكثر استخداما مدرجة هنا. للحصول على قائمة كاملة (ومحدثة) ، راجع build/build.sh .

متغيرات البيئة وصف مثال
BUILD_CONFIG إنشاء ملف التكوين لتهيئة بيئة البناء من. سيتم تحديد الموقع بالنسبة إلى دليل جذر الريبو. افتراضات إلى build.config .
إلزامي للنواة المشتركة.
BUILD_CONFIG=common/build.config.gki.aarch64
CC تجاوز مترجم لاستخدامها. العودة إلى المترجم الافتراضي المحدد بواسطة build.config . CC=clang
DIST_DIR دليل الإخراج الأساسي لتوزيع kernel. OUT_DIR=/path/to/my/dist
OUT_DIR دليل الإخراج الأساسي لبناء النواة. OUT_DIR=/path/to/my/out
SKIP_DEFCONFIG تخطي make defconfig SKIP_DEFCONFIG=1
SKIP_MRPROPER تخطي make mrproper SKIP_MRPROPER=1

تهيئة نواة مخصصة للبنيات المحلية

إذا كنت بحاجة إلى تبديل خيار تكوين kernel بانتظام ، على سبيل المثال ، عند العمل على ميزة ، أو إذا كنت بحاجة إلى خيار لتعيينه لأغراض التطوير ، فيمكنك تحقيق هذه المرونة من خلال الحفاظ على تعديل محلي أو نسخة من تكوين الإنشاء.

اضبط المتغير POST_DEFCONFIG_CMDS على عبارة يتم تقييمها مباشرة بعد الانتهاء من خطوة make defconfig POST_DEFCONFIG_CMDS المعتادة. نظرًا build.config ملفات build.config مصدرها بيئة build.config يمكن استدعاء الوظائف المحددة في build.config كجزء من أوامر post-defconfig.

مثال شائع هو تعطيل تحسين وقت الارتباط (LTO) لنواة التظليل المتقاطع أثناء التطوير. في حين أن 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 عن الإصدار الصحيح كجزء من رسالة التنفيذ:

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

إصدار Kernel من صورة النظام

لتحديد إصدار kernel المستخدم في صورة النظام ، قم بتشغيل الأمر التالي على ملف kernel:

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 tools/mkbootimg/out/ramdisk gki-ramdisk.lz4

المجلد الهدف هو دليل المستوى الأعلى لشجرة النواة (دليل العمل الحالي).

إذا كنت تقوم بالتطوير باستخدام AOSP master ، فيمكنك بدلاً من ذلك تنزيل الأداة ramdisk-recovery.img build artifact من aosp_arm64 على ci.android.com واستخدامه كبرنامج ثنائي ramdisk.

عندما يكون لديك ثنائي ramdisk وقمت بنسخه إلى gki-ramdisk.lz4 في الدليل الجذر لبناء kernel ، يمكنك إنشاء صورة تمهيد بتنفيذ:

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

إذا كنت تعمل باستخدام بنية تستند إلى x86 ، bzImage Image بـ bzImage و aarch64 بـ x86_64 :

BUILD_BOOT_IMG=1 SKIP_VENDOR_BOOT=1 KERNEL_BINARY=bzImage GKI_RAMDISK_PREBUILT_BINARY=gki-ramdisk.lz4 BUILD_CONFIG=common/build.config.gki.x86_64 build/build.sh

يوجد هذا الملف في دليل القطع الأثرية $KERNEL_ROOT/out/$KERNEL_VERSION/dist .

توجد صورة التمهيد في out/<kernel branch>/dist/boot.img .