Çekirdek yapılandırması

Android çekirdeği için temel olarak aşağıdaki yapılandırma ayarlarını kullan yapılandırma. Ayarlar, android-base için .cfg dosyaları halinde düzenlendi. android-base-ARCH ve android-recommended:

  • android-base seçenekleri, temel Android özelliklerini etkinleştirir ve tüm cihazlar tarafından belirtildiği şekilde yapılandırılmalıdır.
  • android-base-ARCH seçenekleri, temel özelliği etkinleştirir Android özelliklerine sahip ve mimari ARCH. Her mimariye karşılık gelen bir dosya yoktur seçenekleri sunar. Mimaride yoksa bu dosyanın, mimariye özgü ek çekirdek yapılandırması Android için geçerli.
  • android-recommended Bu seçenekler, gelişmiş Android özellikleridir ve cihazlar için isteğe bağlıdır.

Bu yapılandırma dosyaları kernel/configs. depodur. Şuna karşılık gelen yapılandırma dosyaları kümesini kullanın: çekirdeği eklemeniz gerekir.

Ayrıntılı bilgi için, web sitenizdeki çekirdeği güçlendirmek amacıyla başlatılan daha fazla bilgi için Sistem ve çekirdek güvenliği. Gerekli ayarlarla ilgili ayrıntılar için Android Uyumluluk Tanımlama Belgesi (CDD) başlıklı makaleyi inceleyin.

Çekirdek yapılandırması oluştur

Minimalist defconfig biçimine sahip cihazlarda Seçenekleri etkinleştirmek için çekirdek ağacında merge_config.sh komut dosyasını etkinleştirin:

ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg

Bu işlem, yeni bir dosya kaydetmek için kullanabileceğiniz bir .config dosyası oluşturur defconfig dosyası yükleyin veya Android özellikleriyle yeni bir çekirdek derleyin etkin.

Ek çekirdek yapılandırması gereksinimleri

Bazı durumlarda, platform yöneticisi birden fazla çekirdek arasından seçim yapabilir. özellikleri geliştirmeyi öğreneceksiniz. Bu tür bağımlılıklar (yukarıda açıklanmıştır), çünkü biçimi mantıksal ifadeleri desteklemiyordur. Android 9 ve sonraki sürümlerde Uyumluluk Test Paketi (CTS) ve Tedarikçi Firma Test Paketi (VTS), karşılanıyor:

  • CONFIG_OF=y veya CONFIG_ACPI=y
  • 4.4 ve 4.9 çekirdekleri CONFIG_ANDROID_LOW_MEMORY_KILLER=y içeriyor VEYA hem CONFIG_MEMCG=y hem de CONFIG_MEMCG_SWAP=y sahibi olun
  • CONFIG_DEBUG_RODATA=y veya CONFIG_STRICT_KERNEL_RWX=y
  • CONFIG_DEBUG_SET_MODULE_RONX=y veya CONFIG_STRICT_MODULE_RWX=y
  • Yalnızca ARM64 için: CONFIG_ARM64_SW_TTBR0_PAN=y veya CONFIG_ARM64_PAN=y

Ayrıca, CONFIG_INET_UDP_DIAG seçeneği Android 9 ve sonraki sürümlerde 4.9 çekirdekler için y.

USB ana makine modu seçeneklerini etkinleştir

USB ana makine modu sesi için aşağıdaki seçenekleri etkinleştirin:

CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
# CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver

USB ana makine modu MIDI için aşağıdaki seçeneği etkinleştirin:

CONFIG_SND_USB_MIDI=y

TSYNC ile Seccomp BPF

Secure Computing Berkeley Paket Filtresi (Seccomp BPF), bir çekirdek güvenliğidir bağlamı tanımlayan korumalı alanların oluşturulmasını sağlayan teknoloji sistem çağrıları yapabilir. İş parçacığı senkronizasyonu (TSYNC) özelliği, çok iş parçacıklı programlardan Seccomp BPF'nin kullanılmasını sağlar. Bu özellikleri, Seccomp yukarı akış desteği (ARM, ARM64, x86 ve x86_64).

Android canlı kilit arka plan programı

Android 10, Android Live-lock arka plan programını içerir (llkd), çekirdek kilitlenmelerini yakalamak ve azaltmak için tasarlanmıştır. llkd kullanımıyla ilgili ayrıntılar için şuraya bakın: Android Live-Kilit arka plan programı.

ARM64'te vDSO32

Sanal dinamik paylaşılan nesne (vDSO), doğru şekilde kullanıldığında ve yapılandırıldığında döngü maliyetlerini azaltabilir. Android 10 sürümünde, 64 bit çekirdeklerde vDSO32 desteği eklendi (Android 64 bit çekirdeklerde vDSO64'ü, 32 bit çekirdeklerde ise vDSO32'yi desteklemektedir.) Kullanım ARM64 mimarisi üzerindeki vDSO32 (CONFIG_VDSO_COMPAT), Pil ömründe yüzde 0,4 artış ve diğer performans iyileştirmeleri.

Linux topluluğu, vDSO'ları birleştirme emin olun. Aşağıdaki seçeneği etkinleştirerek Linux çekirdeğinizde vDSO'yu ayarlayabilirsiniz. CONFIG_COMPAT ve arm32 derleyici üçlüsüyle CONFIG_CROSS_COMPILE_COMPAT_VDSO. Android Kernel ekibi, vDSO yama serisinin eski sürümlerini geri yükledi ayrıntılı bir şekilde inceleyeceğiz. Böylece, Pixel çekirdek derlemelerinde (LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN yol, CROSS_COMPILE_ARM32 referansı ve CONFIG_CROSS_COMPILE_ARM32 konfigürasyonu).

Düşük RAM yapılandırması

Doğrudan yeniden hak talebi sayısını azaltmak için çekirdeği ve ActivityManager'ı ayarlayın

Bir işlem veya çekirdek, bir sayfayı ayırmaya çalıştığında doğrudan yeniden hak talebi gerçekleşir (doğrudan veya yeni bir sayfada oluşan hata nedeniyle) belleğin tamamını kullanılabilir tüm boş bellekten yararlanıldı. Bu işlem, çekirdeğin ayırmayı engellemesini gerektirir bir sayfayı boşaltır. Bu da çoğu zaman bir diski boşaltmak için disk G/Ç'sinin dosyayı destekleyen bir sayfaya gönderin veya lowmemorykiller ürününün durdurmasını bekleyin bahsedeceğim. Bu, kullanıcı arayüzü iş parçacığı dahil herhangi bir iş parçacığında fazladan G/Ç'ye neden olabilir.

Doğrudan yeniden hak talebinde bulunmamak için çekirdekte, kswapd veya arka planda hak talebinde bulunma. Bu ileti dizisinde Böylece, gerçek bir iş parçacığı bir dahaki sefere ayrılırken hızlı bir şekilde başarılı olabilir.

Arka planda yeniden hak talebinde bulunmak için varsayılan eşik oldukça düşüktür. 2 GB'lık cihazda 2 MB, 512 MB'lık cihazda 636 KB. İlgili içeriği oluşturmak için kullanılan çekirdek arka planda geri almak için yalnızca birkaç megabayt belleği geri kazanır. Bunun anlamı şudur: ve birkaç megabayttan fazla veri ayıran herhangi bir işlem, doğrudan hak talebi.

Çekirdek ayarları için destek, Android-3.4 çekirdek dalına yama 92189d47f66c67e5fd92eafaa287e153197a454f ("ekstra ücretsiz kbayt ekle ayarlanabilir"). Bu yamanın bir cihazın çekirdeğine çekilmesi, Çekirdeğe üç adet tam ekran gösterimini denemesini söylemek için ActivityManager 32 bpp'lik boş bellek arabelleği.

Bu eşikler config.xml ile yapılandırılabilir bahsedeceğim.

<!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable
in the kernel (if it exists). A high value increases the amount of memory
that the kernel tries to keep free, reducing allocation time and causing the
lowmemorykiller to kill earlier. A low value allows more memory to be used by
processes but may cause more allocations to block waiting on disk I/O or
lowmemorykiller. Overrides the default value chosen by ActivityManager based
on screen size. 0 prevents keeping any extra memory over what the kernel keeps
by default. -1 keeps the default. -->
<integer name="config_extraFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the /proc/sys/vm/extra_free_kbytes
tunable in the kernel (if it exists). 0 uses the default value chosen by
ActivityManager. A positive value increases the amount of memory that the
kernel tries to keep free, reducing allocation time and causing the
lowmemorykiller to kill earlier. A negative value allows more memory to be
used by processes but may cause more allocations to block waiting on disk I/O
or lowmemorykiller. Directly added to the default value chosen by
ActivityManager based on screen size. -->
<integer name="config_extraFreeKbytesAdjust">0</integer>

LowMemoryKiller'ı ayarla

ActivityManager, LowMemoryKiller çalışma setinden bekleneni karşılayacak işlemleri her öncelikte çalıştırmak için gereken dosya destekli sayfalar (önbelleğe alınmış sayfalar) olarak ayarlayabilirsiniz. Bir cihazın çalışma seti için yüksek gereksinimleri varsa, örneğin: Tedarikçi kullanıcı arayüzü daha fazla bellek gerektiriyorsa veya daha fazla hizmet eklenmişse eşikler artırılabilir.

Bir alan için çok fazla bellek ayrılırsa eşikler düşürülebilir. dosya destekli sayfalar oluşturur, böylece arka plan işlemleri çok daha önce önbelleğin çok küçük olması nedeniyle disk tıkanıklığı meydana gelir.

<!-- Device configuration setting the minfree tunable in the lowmemorykiller
in the kernel. A high value causes the lowmemorykiller to fire earlier,
keeping more memory in the file cache and preventing I/O thrashing, but
allowing fewer processes to stay in memory. A low value keeps more
processes in memory but may cause thrashing if set too low. Overrides the
default value chosen by ActivityManager based on screen size and total memory
for the largest lowmemorykiller bucket, and scaled proportionally to the
smaller buckets. -1 keeps the default. -->
<integer name="config_lowMemoryKillerMinFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the minfree tunable in the
lowmemorykiller in the kernel. A high value causes the lowmemorykiller to
fire earlier, keeping more memory in the file cache and preventing I/O
thrashing, but allowing fewer processes to stay in memory. A low value
keeps more processes in memory but may cause thrashing if set too low. Directly
added to the default value chosen by ActivityManager based on screen
size and total memory for the largest lowmemorykiller bucket, and scaled
proportionally to the smaller buckets. 0 keeps the default. -->
<integer name="config_lowMemoryKillerMinFreeKbytesAdjust">0</integer>