Çekirdek Yapılandırması

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

  • android-base seçenekler, 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 Android özelliklerini etkinleştirir ve ARCH mimarisinin tüm cihazları tarafından belirtildiği gibi yapılandırılmalıdır. Tüm mimariler, mimariye özgü gerekli seçeneklere karşılık gelen bir dosyaya sahip değildir. Mimarinizin bir dosyası yoksa, Android için mimariye özgü ek çekirdek yapılandırma gereksinimleri yoktur.
  • android-recommended . Bu seçenekler, gelişmiş Android özelliklerini etkinleştirir ve cihazlar için isteğe bağlıdır.

Bu yapılandırma dosyaları, kernel/configs deposunda bulunur. Kullanmakta olduğunuz çekirdeğin sürümüne karşılık gelen yapılandırma dosyaları kümesini kullanın.

Cihazlarınızda çekirdeği güçlendirmek için halihazırda üstlenilen kontrollerle ilgili ayrıntılar için, bkz. Sistem ve çekirdek güvenliği . Gerekli ayarlarla ilgili ayrıntılar için Android Uyumluluk Tanımı Belgesine (CDD) bakın.

Çekirdek yapılandırması oluştur

Minimalist bir defconfig formatına sahip cihazlarda, seçenekleri etkinleştirmek için çekirdek ağacındaki merge_config.sh komut dosyasını kullanın:

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

Bu, yeni bir defconfig dosyası kaydetmek veya Android özellikleri etkinken yeni bir çekirdeği derlemek için kullanabileceğiniz bir .config dosyası oluşturur.

Ek çekirdek yapılandırma gereksinimleri

Bazı durumlarda, platform yöneticisi, Android bağımlılığını karşılamak için birden çok çekirdek özelliği arasından seçim yapabilir. Bu tür bağımlılıklar, çekirdek yapılandırma parçası dosyalarında (yukarıda açıklanmıştır) ifade edilemez çünkü bu dosyaların biçimi mantıksal ifadeleri desteklemez. Android 9 ve sonraki sürümlerde, Uyumluluk Test Paketi (CTS) ve Satıcı Test Paketi (VTS) , aşağıdaki gereksinimlerin karşılandığını doğrular:

  • CONFIG_OF=y veya CONFIG_ACPI=y
  • 4.4 ve 4.9 çekirdekler CONFIG_ANDROID_LOW_MEMORY_KILLER=y sahiptir VEYA hem CONFIG_MEMCG=y hem de CONFIG_MEMCG_SWAP CONFIG_MEMCG_SWAP=y sahiptir
  • 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 çekirdek için y olarak ayarlanmalıdır.

USB ana bilgisayar modu seçeneklerini etkinleştir

USB ana bilgisayar 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 bilgisayar modu MIDI için aşağıdaki seçeneği etkinleştirin:

CONFIG_SND_USB_MIDI=y

TSYNC ile Seccomp BPF

Güvenli Hesaplama Berkeley Paket Filtresi (Seccomp BPF), bir sürecin sistem çağrıları yapabileceği bağlamı tanımlayan sanal alanların oluşturulmasını sağlayan bir çekirdek güvenlik teknolojisidir. İş parçacığı senkronizasyonu (TSYNC) özelliği, çok iş parçacıklı programlardan Seccomp BPF'nin kullanılmasını sağlar. Bu yetenek, Seccomp yukarı akış desteğine sahip mimarilerle sınırlıdır (ARM, ARM64, x86 ve x86_64).

Android Canlı Kilit Arka Plan Programı

Android 10, çekirdek kilitlenmelerini yakalamak ve azaltmak için tasarlanmış Android Live-Lock Daemon'u ( llkd ) içerir. llkd'yi kullanmayla ilgili ayrıntılar için Android Live-Lock llkd bakın.

ARM64 üzerinde vDSO32

Sanal dinamik paylaşılan nesne (vDSO), doğru kullanıldığında ve yapılandırıldığında döngü maliyetlerini azaltabilen sistem çağrılarına bir alternatiftir. Android 10, 64 bit çekirdeklerde vDSO32 desteği ekler (Android, 64 bit çekirdeklerde vDSO64'ü ve 32 bit çekirdeklerde vDSO32'yi zaten destekler). ARM64 mimarisinde vDSO32 ( CONFIG_VDSO_COMPAT ) kullanılması, pil ömründe yüzde 0,4 artış ve diğer performans iyileştirmeleri sağlar.

Linux topluluğu, vDSO'ları mimariler arasında birleştirmek için aktif olarak çalışıyor. vDSO32'yi CONFIG_CROSS_COMPILE_COMPAT_VDSO ile vDSO32'yi ve arm32 derleyici üçlüsü ile CONFIG_COMPAT etkinleştirerek Linux çekirdeğinizde vDSO'yu kurabilirsiniz. Android Çekirdeği ekibi, vDSO yama serisinin eski sürümlerini Pixel cihazlarına destekledi, bu nedenle örnekleri Pixel çekirdek yapılarında bulabilirsiniz ( LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN yolu, CROSS_COMPILE_ARM32 referansı ve CONFIG_CROSS_COMPILE_ARM32 yapılandırması).

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

Doğrudan geri kazanımı azaltmak için çekirdek/ActivityManager'ı ayarlayın

Doğrudan geri alma, bir işlem veya çekirdek bir bellek sayfası ayırmaya çalıştığında (doğrudan veya yeni bir sayfadaki hata nedeniyle) ve çekirdek kullanılabilir tüm boş belleği kullandığında gerçekleşir. Bu, çekirdeğin bir sayfayı boşaltırken ayırmayı engellemesini gerektirir. Bu da genellikle kirli bir dosya destekli sayfayı temizlemek için disk G/ lowmemorykiller gerektirir veya düşük bellek öldürücünün bir işlemi durdurmasını bekler. Bu, bir UI iş parçacığı dahil olmak üzere herhangi bir iş parçacığında fazladan G/Ç ile sonuçlanabilir.

Doğrudan geri almayı önlemek için, çekirdeğin kswapd veya arka plan geri kazanmayı tetikleyen filigranları vardır. Bu, sayfaları boşaltmaya çalışan bir iş parçacığıdır, böylece bir dahaki sefere gerçek bir iş parçacığı tahsis edildiğinde, hızlı bir şekilde başarılı olabilir.

Arka plan geri almayı tetiklemek için varsayılan eşik oldukça düşüktür; 2 GB cihazda yaklaşık 2 MB ve 512 MB cihazda 636 KB civarındadır. Çekirdek, arka plan geri alma işleminde yalnızca birkaç megabayt belleği geri alır. Bu, birkaç megabayttan fazlasını hızlı bir şekilde tahsis eden herhangi bir işlemin hızlı bir şekilde doğrudan geri kazanmayı vuracağı anlamına gelir.

Bir çekirdek ayarlanabilir desteği, Android-3.4 çekirdek dalında 92189d47f66c67e5fd92eafaa287e153197a454f ("ayarlanabilir ekstra ücretsiz kbayt ekle") olarak eklenir. Bu yamanın bir cihazın çekirdeğine eklenmesi, ActivityManager çekirdeğe üç tam ekran 32 bpp bellek tamponunu boş tutmaya çalışmasını söylemesini sağlar.

Bu eşikler, config.xml çerçevesi ile yapılandırılabilir.

<!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable
in the kernel (if it exists). A high value will increase 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>
tutucu4 l10n-yer
<!-- 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 will increase 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 eşiklerini, her bir öncelik düzeyi kovasındaki süreçleri çalıştırmak için gereken, çalışan dosya destekli sayfalar (önbelleğe alınmış sayfalar) beklentisiyle eşleşecek şekilde yapılandırır. Bir cihazın çalışma grubu için yüksek gereksinimleri varsa, örneğin satıcı kullanıcı arayüzü daha fazla bellek gerektiriyorsa veya daha fazla hizmet eklenmişse, eşikler artırılabilir.

Dosya destekli sayfalar için çok fazla bellek ayrılmışsa, eşikler düşürülebilir, böylece önbelleğin çok küçük olması nedeniyle arka plan işlemleri disk thrashing meydana gelmeden çok önce öldürülür.

<!-- Device configuration setting the minfree tunable in the lowmemorykiller
in the kernel. A high value will cause 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 will keep 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>
tutucu6 l10n-yer
<!-- Device configuration adjusting the minfree tunable in the
lowmemorykiller in the kernel. A high value will cause 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 will
keep 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>