Bu sayfada, özel kampanya oluşturma süreci çekirdek Bu doğru dönüşüm hunisini seçme sürecinde size çekirdeği oluşturma ve sonuçları sistem görüntüsüne yerleştirme Android Açık Kaynak Projesi'nde (AOSP) geliştirilmiştir.
Daha yeni çekirdek kaynakları edinmek için
Repo; daha fazla ilerlemeden
kök dizinden build/build.sh
çalıştırarak
kaynak ödeme.
Kaynakları indirme ve oluşturma araçları
Son çekirdekler için repo
değerini kullanın
kaynak indirmenizi, araç zincirini indirmenizi ve komut dosyalarını derlemenizi sağlar.
Bazı çekirdekler (örneğin, Pixel 3 çekirdekleri), birden fazla git'ten kaynak gerektirir.
depoları bulunurken bazıları (örneğin, yaygın çekirdekler) yalnızca bir
kaynak. repo
yaklaşımını kullanmak doğru kaynak sağlar
dizin kurulumu.
Uygun dalın kaynaklarını indirin:
mkdir android-kernel && cd android-kernel
repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH
repo sync
ÖncekiBRANCH "repo init" komutuna bakın, bkz. Çekirdek dalları ve derleme sistemleri.
Pixel cihazların çekirdeklerini indirme ve derleme hakkında ayrıntılı bilgi için bkz. Pixel Kernels oluşturma.
Çekirdek oluşturma
Bazel (Kleaf) ile derleme
Android 13, Bazel.
aarch64 mimarisi için GKI çekirdeğini oluşturmak için şuraya göz atın: Android 13'ten daha eski bir Android Common Kernel dalı ve ardından aşağıdaki komutu çalıştırın:
tools/bazel build //common:kernel_aarch64_dist
Dağıtım oluşturmak için şu komutu çalıştırın:
tools/bazel run //common:kernel_aarch64_dist -- --dist_dir=$DIST_DIR
Ardından, çekirdek ikili programı, modüller ve bunlara karşılık gelen resimler,
$DIST_DIR
dizini. --dist_dir
belirtilmemişse çıkışa bakın
komutunun bir listesidir. Ayrıntılar için
aOSP ile ilgili belgelere göz atın.
Build.sh ile derleme (eski)
Android 12 veya önceki sürümlerin yüklü olduğu şubeler için VEYA Kleaf içermeyen dallar:
build/build.sh.
Çekirdek ikili programı, modüller ve karşılık gelen görüntü,
out/BRANCH/dist
dizini.
Sanal cihaz için tedarikçi modüllerini oluşturma
Android 13,
Bazel (KYaprak), build.sh
.
virtual_device
adlı uygulamanın modüllerini oluşturmak için şu komutu çalıştırın:
tools/bazel build //common-modules/virtual-device:virtual_device_x86_64_dist
Dağıtım oluşturmak için şu komutu çalıştırın:
tools/bazel run //common-modules/virtual-device:virtual_device_x86_64_dist -- --dist_dir=$DIST_DIR
Bazel ile Android çekirdekleri oluşturma hakkında daha fazla bilgi için bkz. . Kleaf - Bazel ile Android Çekirdekleri Derleme.
Ayrı ayrı mimariler için Kleaf desteği hakkında ayrıntılı bilgi edinmek üzere Cihazlar ve çekirdekler için Kleaf desteği.
Build.sh (eski) ile sanal cihaz için tedarikçi modüllerini oluşturma
Android 12'de Mürekkep Balığı ve Japon Balıkları birleşiyor, böylece
aynı çekirdek: virtual_device
. Bu çekirdeğin modüllerini oluşturmak için bu derlemeyi kullanın
yapılandırma:
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 build/build.sh
Android 11 kullanıma sunuldu GKI, Çekirdeği, Google tarafından yönetilen çekirdek görüntüsüne ve tedarikçi tarafından yönetilen modüllere ayıran ayrı olarak oluşturulur.
Bu örnekte, bir çekirdek görüntüsü yapılandırması gösterilmektedir:
BUILD_CONFIG=common/build.config.gki.x86_64 build/build.sh
Bu örnekte bir modül yapılandırması (Cuttlefish ve Emülatör) gösterilmektedir:
BUILD_CONFIG=common-modules/virtual-device/build.config.cuttlefish.x86_64 build/build.sh
Çekirdeği çalıştırma
Özel oluşturulmuş bir çekirdeği çalıştırmanın birden çok yolu vardır. Bu alanlar: uygun bilinen yöntemleri öğrenmenize yardımcı olur.
Android görüntü derlemesine yerleştir
Image.lz4-dtb
öğesini ilgili çekirdek ikili program konumuna kopyalayın
gözden geçirin ve başlatma görüntüsünü yeniden derleyin.
Alternatif olarak, TARGET_PREBUILT_KERNEL
öğesini tanımlayın
değişkeni make bootimage
(veya
make
komut satırından). Bu değişken
kurulumu için tüm cihazlar tarafından desteklenir
device/common/populate-new-device.sh
Örnek:
export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb
Fastboot özellikli flaş ve başlatma çekirdekleri
En son cihazlarda Bootloader uzantısına sahip olan başlatma görüntüsü oluşturabilirsiniz.
Çekirdeği yanıp sönmeden başlatmak için:
adb reboot bootloader
fastboot boot Image.lz4-dtb
Bu yöntem kullanıldığında, çekirdek aslında yanıp sönmez ve devam etmez çok daha iyi performans gösterir.
Mürekkep balığı üzerinde çekirdekleri çalıştırın
Çekirdekleri Kürek balığı cihazları.
Bir Mürekkep balığı cihazını belirli bir çekirdek grubuyla başlatmak için
yapıları algılamak için cvd start
komutunu hedef çekirdek yapılarıyla
parametreleridir. Aşağıdaki örnek komut,
common-android14-6.1
çekirdek manifesti.
cvd start \
-kernel_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/Image \
-initramfs_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/initramfs.img
Daha fazla bilgi için bkz. Mücevher balığı üzerinde çekirdek geliştirme.
Çekirdek derlemesini özelleştirme
Kleaf derlemelerinin çekirdek derlemelerini özelleştirmek için Kleaf belgeleri.
Çekirdek derlemesini build.sh (eski) ile özelleştirme
build/build.sh
için derleme süreci ve sonuç etkilenebilir
ortam değişkenlerine göre belirlenir.
Bunların çoğu isteğe bağlıdır ve her çekirdek dalında uygun bir
Varsayılan yapılandırma. En sık kullanılanlar burada listelenmiştir. Örneğin,
tam (ve güncel) liste için build/build.sh
inceleyin.
Ortam değişkeni | Açıklama | Örnek |
---|---|---|
BUILD_CONFIG |
Derleme ortamını ilk kullanıma hazırladığınız yerden yapılandırma dosyasını derleyin.
Konum, Depo köküne göre tanımlanmalıdır
dizin. Varsayılan olarak build.config değerine ayarlanır.. Yaygın çekirdekler için zorunludur. |
BUILD_CONFIG=common/build.config.gki.aarch64 |
CC |
Kullanılacak derleyiciyi geçersiz kıl. Varsayılan değere döner
build.config tarafından tanımlanan derleyici. |
CC=clang |
DIST_DIR |
Çekirdek dağıtımı için temel çıkış dizini. | DIST_DIR=/path/to/my/dist |
OUT_DIR |
Çekirdek derlemesi için temel çıkış dizini. | OUT_DIR=/path/to/my/out |
SKIP_DEFCONFIG |
make defconfig adımını atla |
SKIP_DEFCONFIG=1 |
SKIP_MRPROPER |
make mrproper adımını atla |
SKIP_MRPROPER=1 |
Yerel derlemeler için özel çekirdek yapılandırması
Android 14 ve sonraki sürümlerde defconfig parçalarını kullanabilirsiniz. inceleyebilirsiniz. bkz. Defconfig parçalarıyla ilgili Kleaf dokümanları.
Derleme yapılandırmaları içeren yerel derlemeler için özel çekirdek yapılandırması (eski)
Android 13 ve önceki sürümlerde aşağıdaki bilgilere bakın.
Bir çekirdek yapılandırma seçeneğini düzenli olarak değiştirmeniz gerekiyorsa. Örneğin, veya geliştirme için ayarlanmış bir seçeneğe ihtiyacınız olduğunda bu esnekliği elde etmek için yerel varlıklarınızı koruyarak yapılandırmanın değiştirilmesini veya kopyasını oluşturur.
POST_DEFCONFIG_CMDS değişkenini
normal make defconfig
adımdan hemen sonra değerlendirilir.
tamamlandı. build.config
dosyaları derlemeye eklendiğinden
build.config
içinde tanımlanan fonksiyonlar
komutunun bir parçası olarak çalışır.
Yaygın bir örnek, çapraz çizgi için bağlantı süresi optimizasyonunu (LTO) devre dışı bırakmaktır.
çekirdekleri dahil etmeyi deneyin. LTO, yayınlanan çekirdekler için faydalı olsa da
ek yük önemli ölçüde olabilir. Aşağıdaki snippet eklendi
yerel build.config
, aşağıdaki durumlarda LTO'yu kalıcı olarak devre dışı bırakır:
build/build.sh
kullanılıyor.
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 tanımlama
Derleme için doğru sürümü şu 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üğü, kaydetme mesajının 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, bunu sistemden alın görüntüsüne bakalım.
Sistem görüntüsündeki çekirdek sürümü
Sistem görüntüsünde kullanılan çekirdek sürümünü belirlemek için aşağıdaki komutu çalıştırın: komutuyla birlikte aşağıdaki kodu da yükleyebilirsiniz:
file kernel
Image.lz4-dtb
dosya için şu komutu çalıştırın:
grep -a 'Linux version' Image.lz4-dtb
Başlatma görüntüsü oluşturma
Çekirdek derleme ortamını kullanarak önyükleme görüntüsü oluşturmak mümkündür.
init_boot özelliğine sahip cihazlar için başlatma görüntüsü oluşturma
Şu özelliklere sahip cihazlar için:
init_boot
bölümü,
başlatma görüntüsü, çekirdekle birlikte oluşturulur. initramfs
resmi yerleştirilmemiş
anlamına gelir.
Örneğin, Kleaf ile GKI başlatma görüntüsünü aşağıdakilerle derleyebilirsiniz:
tools/bazel run //common:kernel_aarch64_dist -- --dist_dir=$DIST_DIR
build/build.sh
(eski) ile GKI başlatma görüntüsünü şununla derleyebilirsiniz:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
GKI başlatma görüntüsü $DIST_DIR konumunda bulunur.
init_boot (eski) özelliği bulunmayan cihazlar için başlatma görüntüsü oluşturma
Şu olmayan cihazlar için:
init_boot
bölümü,
edinebileceğiniz bir ramdisk ikili dosyası
GKI başlatma görüntüsünü indirme
ve ambalajından çıkarıyorum. İlişkilendirilmiş Android sürümünden herhangi bir GKI başlatma görüntüsü çalışır.
tools/mkbootimg/unpack_bootimg.py --boot_img=boot-5.4-gz.img
mv $KERNEL_ROOT/out/ramdisk gki-ramdisk.lz4
Hedef klasör, çekirdek ağacının (geçerli çalışma dizinine ekleyin).
AOSP ana sistemiyle geliştirme yapıyorsanız bunun yerine
ramdisk-recovery.img
bir aosp_arm64 derlemesinden derleme yapısı
ci.android.com adresine gidip bunu ramdisk ikili dosyanız olarak kullanın.
Bir ramdisk ikili dosyanız olduğunda ve bunu kök dizinde gki-ramdisk.lz4
konumuna kopyaladığınızda
dizininde, şu komutu çalıştırarak bir başlatma görüntüsü oluşturabilirsiniz:
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 tabanlı bir mimariyle çalışıyorsanız Image
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 yapı dizininde bulunuyor
$KERNEL_ROOT/out/$KERNEL_VERSION/dist
Başlatma görüntüsü, out/<kernel branch>/dist/boot.img
konumunda bulunur.