Yapı Çekirdekleri

Bu sayfa özel inşa sürecini detayları çekirdekleri Android cihazlar için. Bu talimatlar, doğru kaynakları seçme, çekirdeği oluşturma ve sonuçları Android Açık Kaynak Projesi'nden (AOSP) oluşturulmuş bir sistem görüntüsüne yerleştirme sürecinde size rehberlik eder.

Sen kullanarak daha yeni çekirdek kaynakları edinebileceği Repo ; çalıştırarak daha fazla yapılandırma olmadan bunları inşa build/build.sh kaynak kasada kökünden.

Eski çekirdekleri oluşturmak için veya bu sayfada yer almayan tanelerini oluşturmak için nasıl talimatlara bakın eski tanelerini .

Kaynakları ve derleme araçlarını indirme

Güncel çekirdekler için, kullanım repo kaynakları, toolchain ve inşa komut dosyalarını indirmek için. Bazı çekirdekler (örneğin, Pixel 3 çekirdekleri) birden çok git deposundan kaynaklar gerektirirken diğerleri (örneğin ortak çekirdekler) yalnızca tek bir kaynak gerektirir. Kullanılması repo yaklaşımını doğru kaynak dizin kurulumu garanti eder.

Uygun şube için kaynakları indirin:

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

Aşağıdaki tabloda BRANCH bu yöntemle mevcut çekirdekler için isimler.

cihaz AOSP ağacında ikili yol Repo şubeleri
Piksel 5 (kırmızı yüzgeçli)
Pixel 4a (5G) (böğürtlen)
cihaz/google/redbull çekirdeği android-msm-redbull-4.19-android11-qpr2
Piksel 4a (güneş balığı) cihaz/google/sunfish-çekirdeği android-msm-sunfish-4.14-android11-qpr2
Piksel 4 (alev)
Pixel 4 XL (mercan)
cihaz/google/mercan çekirdeği android-msm-coral-4.14-android11-qpr2
Piksel 3a (sargo)
Pixel 3a XL (palamut)
cihaz/google/palamut çekirdeği android-msm-palamut-4.9-android11-qpr2
Piksel 3 (mavi çizgi)
Pixel 3 XL (çapraz tarama)
cihaz/google/çapraz tarama çekirdeği android-msm-crosshatch-4.9-android11-qpr2
Piksel 2 (duvar gözü)
Pixel 2 XL (taimen)
cihaz/google/wahoo çekirdeği android-msm-wahoo-4.4-android10-qpr3
Piksel (yelken balığı)
Piksel XL (marlin)
cihaz/google/marlin-çekirdeği android-msm-marlin-3.18-pie-qpr2
Hikey960 cihaz/linaro/hikey-çekirdek zambak-linaro-android-4.14
zambak-linaro-android-4.19
ortak-android12-5.4
beagle x15 cihaz/ti/beagle_x15-çekirdek omap-beagle-x15-android-4.14
omap-beagle-x15-android-4.19
Android Ortak Çekirdeği Yok ortak-android-4.4
ortak-android-4.9
ortak-android-4.14
ortak-android-4.19
ortak-android-4.19-kararlı
ortak-android11-5.4
ortak-android12-5.4
ortak-android12-5.10
ortak-android-ana hat

Çekirdeği inşa etmek

Ardından çekirdeği bununla oluşturun:

build/build.sh

Çekirdek ikili, modüller ve karşılık gelen görüntü yer almaktadır out/ BRANCH /dist dizinine.

GKI modüllerini oluşturma

Android 11 tanıtılan GKI ayrı inşa edilir Google tarafından tutulan çekirdek görüntüsü ve satıcı bakımlı modülleri içine çekirdek ayırır.

Bu örnek, bir çekirdek görüntü yapılandırmasını gösterir:

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

Bu örnek, bir modül yapılandırmasını gösterir (Mürekkep Balığı ve Öykünücü):

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

Çekirdeği çalıştırmak

Özel olarak oluşturulmuş bir çekirdeği çalıştırmanın birden çok yolu vardır. Aşağıdakiler, çeşitli geliştirme senaryoları için uygun bilinen yöntemlerdir.

Android görüntü derlemesine gömme

Kopya Image.lz4-dtb AOSP ağacındaki ilgili çekirdek ikili konuma ve önyükleme imajını yeniden inşa.

Alternatif olarak, tanımlama TARGET_PREBUILT_KERNEL kullanırken değişken make bootimage (ya da başka herhangi bir make , bir önyükleme görüntü oluşturur komut satırı). Bu değişken o aracılığıyla kurulumu yapıldıktan gibi tüm cihazlar tarafından desteklenen device/common/populate-new-device.sh . Örneğin:

export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb

Fastboot ile çekirdeklerin yanıp sönmesi ve önyüklenmesi

En yeni cihazlarda, bir önyükleme görüntüsü oluşturma ve başlatma sürecini kolaylaştırmak için bir önyükleyici uzantısı bulunur.

Çekirdeği yanıp sönmeden başlatmak için:

adb reboot bootloader
fastboot boot Image.lz4-dtb

Bu yöntemi kullanarak, çekirdek gerçekten parlamaz ve yeniden başlatma boyunca devam etmez.

Çekirdek yapısını özelleştirme

Oluşturma süreci ve sonucu, ortam değişkenlerinden etkilenebilir. Çoğu isteğe bağlıdır ve her çekirdek dalı uygun bir varsayılan yapılandırmayla gelmelidir. En sık kullanılanlar burada listelenmiştir. Tam bir (ve yukarı güncel) listesi için bakınız build/build.sh .

Çevre değişkeni Açıklama Misal
BUILD_CONFIG Yapı ortamını başlattığınız yerden yapılandırma dosyası oluşturun. Konum, Repo kök dizinine göre tanımlanmalıdır. Varsayılan için build.config .
Ortak çekirdekler için zorunludur.
BUILD_CONFIG=common/build.config.gki.aarch64
CC Kullanılacak derleyiciyi geçersiz kıl. Tarafından tanımlanan varsayılan derleyici Falls geri build.config . CC=clang
DIST_DIR Çekirdek dağıtımı için temel çıktı dizini. DIST_DIR=/path/to/my/dist
OUT_DIR Çekirdek yapısı için temel çıktı dizini. OUT_DIR=/path/to/my/out
SKIP_DEFCONFIG Atla make defconfig SKIP_DEFCONFIG=1
SKIP_MRPROPER Atla make mrproper SKIP_MRPROPER=1

Yerel yapılar için özel çekirdek yapılandırması

Örneğin, bir özellik üzerinde çalışırken veya geliştirme amaçları için ayarlanacak bir seçeneğe ihtiyacınız varsa, bir çekirdek yapılandırma seçeneğini düzenli olarak değiştirmeniz gerekiyorsa, yerel bir değişiklik veya yapı yapılandırmasının bir kopyasını koruyarak bu esnekliği elde edebilirsiniz.

Değişken Set POST_DEFCONFIG_CMDS olağan hemen sonra değerlendirilir açıklamaya make defconfig adımı yapılır. As build.config dosyaları oluşturma ortamına kaynaklı, tanımlanan fonksiyonlar build.config sonrası defconfig komutları bir parçası olarak adlandırılabilir.

Yaygın bir örnek, geliştirme sırasında çapraz tarama çekirdekleri için bağlantı süresi optimizasyonunu (LTO) devre dışı bırakmaktır. LTO, serbest bırakılan çekirdekler için faydalı olsa da, derleme sırasındaki ek yük önemli olabilir. Yerel ilave Aşağıdaki kod build.config kullanıldığında kalıcı LTO devre dışı bırakır 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)
}

Çekirdek sürümlerini belirleme

Oluşturulacak doğru sürümü iki kaynaktan belirleyebilirsiniz: AOSP ağacı ve sistem görüntüsü.

AOSP ağacından çekirdek sürümü

AOSP ağacı, önceden oluşturulmuş çekirdek sürümleri içerir. Git günlüğü, taahhüt mesajının bir parçası olarak doğru sürümü gösterir:

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

Çekirdek sürümü git günlüğünde listelenmiyorsa, aşağıda açıklandığı gibi sistem görüntüsünden alın.

Sistem görüntüsünden çekirdek sürümü

Bir sistem görüntüsünde kullanılan çekirdek sürümünü belirlemek için çekirdek dosyasına karşı aşağıdaki komutu çalıştırın:

file kernel

For Image.lz4-dtb dosyaları çalıştırın:

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

Önyükleme Görüntüsü Oluşturma

Çekirdek oluşturma ortamını kullanarak bir önyükleme görüntüsü oluşturmak mümkündür. Bunu yapmak için bir GKI önyükleme görüntüsü indirerek ve paketini açarak elde edebileceğiniz bir ramdisk ikili dosyasına ihtiyacınız vardır. İlişkili Android sürümünden herhangi bir GKI önyükleme görüntüsü çalışacaktır.

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

Hedef klasör, çekirdek ağacının en üst düzey dizinidir (geçerli çalışma dizini).

Eğer AOSP usta geliştirdiğimiz, bunun yerine indirebilirsiniz ramdisk-recovery.img bir aosp_arm64 Yapı 'inşa obje ci.android.com senin ramdiskin ikili olarak ve kullanım.

Eğer ramdisktir ikili ve kopyalamanızın zaman gki-ramdisk.lz4 çekirdek yapı kök dizininde, sen yürüterek bir önyükleme görüntü oluşturabilir:

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

Eğer x86 tabanlı mimarisi ile çalışıyorsanız, yerini Image ile bzImage ve aarch64 ile 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

Bu dosya eser dizininde yer almaktadır $KERNEL_ROOT/out/$KERNEL_VERSION/dist .

Önyükleme görüntü yer almaktadır out/<kernel branch>/dist/boot.img .