Çekirdek yapılandırması

Android çekirdeği yapılandırmasına 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ında düzenlenir:

  • 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 Android özelliklerini etkinleştirir ve ARCH mimarisine sahip tüm cihazlar tarafından belirtildiği şekilde yapılandırılmalıdır. Tüm mimarilerde, mimariye özgü gerekli seçeneklerin bulunduğu bir dosya yoktur. Mimarinizde dosya 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 reposunda bulunur. Kullandığınız çekirdeğin sürümüne karşılık gelen yapılandırma dosyaları grubunu kullanın.

Cihazlarınızdaki çekirdeği güçlendirmek için halihazırda uygulanan denetimler hakkında ayrıntılı bilgi için Sistem ve çekirdek güvenliği başlıklı makaleyi inceleyin. Gerekli ayarlarla ilgili ayrıntılar için Android Uyumluluk Tanımlama Belgesi (CDD) bölümüne bakın.

Çekirdek yapılandırması oluşturma

Sade bir defconfig biçimine 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 işlemle, yeni bir defconfig dosyası kaydetmek veya Android özelliklerinin etkin olduğu yeni bir çekirdek derlemek için kullanabileceğiniz bir .config dosyası oluşturulur.

Ek çekirdek yapılandırma gereksinimleri

Bazı durumlarda platform sorumlusu, bir Android bağımlılığını karşılamak için birden fazla çekirdek özelliği arasından seçim yapabilir. Bu tür bağımlılıklar, bu dosyaların biçimi mantıksal ifadeleri desteklemediği için çekirdek yapılandırma parçası dosyalarında (yukarıda açıklanmıştır) ifade edilemez. Android 9 ve sonraki sürümlerde Uyumluluk Test Paketi (CTS) ve Tedarikçi Test Paketi (VTS), aşağıdaki şartların karşılanıp karşılanmadığını doğrular:

  • CONFIG_OF=y veya CONFIG_ACPI=y
  • 4.4 ve 4.9 çekirdeklerinde CONFIG_ANDROID_LOW_MEMORY_KILLER=y olmalıdır VEYA hem CONFIG_MEMCG=y hem de CONFIG_MEMCG_SWAP=y olmalıdır
  • 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, Android 9 ve sonraki sürümlerdeki 4.9 çekirdeklerinde CONFIG_INET_UDP_DIAG seçeneği y olarak ayarlanmalıdır.

USB ana makine modu seçeneklerini etkinleştirme

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 Packet Filter (Seccomp BPF), bir işlemin sistem çağrısı yapabileceği bağlamı tanımlayan korumalı alanlar oluşturmayı sağlayan bir çekirdek güvenlik teknolojisidir. Konu senkronizasyonu (TSYNC) özelliği, çok iş parçacıklı programlarda Seccomp BPF'nin kullanılmasını sağlar. Bu özellik, Seccomp desteğinin üst akışta bulunduğu mimarilerle (ARM, ARM64, x86 ve x86_64) sınırlıdır.

Android canlı kilit arka plan programı

Android 10, çekirdek kilitlenmelerini yakalamak ve azaltmak için tasarlanmış Android canlı kilit arka plan programını (llkd) içerir. llkd kullanmayla ilgili ayrıntılar için Android canlı kilit hizmetine bakın.

ARM64'te vDSO32

Sanal dinamik paylaşılan nesne (vDSO), doğru şekilde kullanıldığında ve yapılandırıldığında döngü maliyetlerini azaltabilecek 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 desteklemektedir). 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, mimarilerde vDSO'ları birleştirmek için aktif bir şekilde çalışmaktadır. arm32 derleyici üçlüsüyle CONFIG_COMPAT ve CONFIG_CROSS_COMPILE_COMPAT_VDSO'yi etkinleştirerek vDSO32'yi CONFIG_COMPAT ile, vDSO'yu ise CONFIG_CROSS_COMPILE_COMPAT_VDSO ile Linux çekirdeğinizde ayarlayabilirsiniz. Android çekirdek ekibi, vDSO yama serisinin eski sürümlerini Pixel cihazlara geri bağladı. Bu nedenle, Pixel çekirdek derlemelerinde örnekleri 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 yeniden talep etmeyi azaltmak için çekirdeği ve ActivityManager'ı ayarlama

Doğrudan geri alma, bir işlem veya çekirdek bir bellek sayfası ayırmaya çalıştığında (doğrudan veya yeni bir sayfada hata nedeniyle) ve çekirdek mevcut tüm kullanılabilir belleği kullandığında gerçekleşir. Bu, bir sayfayı boşaltırken çekirdeğin ayırmayı engellemesini gerektirir. Bu da genellikle kirli dosya destekli bir sayfayı temizlemek için disk I/O'su gerektirir veya lowmemorykiller'nin bir işlemi durdurmasını bekler. Bu durum, kullanıcı arayüzü mesaj dizili de dahil olmak üzere herhangi bir mesaj dizisinde ek G/Ç işlemine neden olabilir.

Doğrudan yeniden talep edilmesini önlemek için çekirdekte kswapd veya arka planda yeniden talep edilmesini tetikleyen filigranlar bulunur. Bu, gerçek bir iş parçacığı bir sonraki sefer ayırma işlemini hızlıca yapabilmesi için sayfaları boşaltmaya çalışan bir iş parçacığıdır.

Arka plan yeniden hak talebini tetiklemek için varsayılan eşik oldukça düşüktür. 2 GB'lık cihazlarda 2 MB, 512 MB'lık cihazlarda ise 636 KB civarındadır. Çekirdek, arka planda bellek geri kazanırken yalnızca birkaç megabayt bellek geri kazanır. Bu, birkaç megabayttan fazlasını hızlı bir şekilde ayıran tüm işlemlerin doğrudan geri alma işlemine hızlı bir şekilde ulaşacağı anlamına gelir.

Android-3.4 çekirdek dalına, 92189d47f66c67e5fd92eafaa287e153197a454f (&quot;ek ayarlanabilir ücretsiz kbayt ekle&quot;) yaması olarak ayarlanabilir çekirdek desteği eklendi. Bu yamayı cihazın çekirdeğine eklemek, ActivityManager'nin çekirdeğe üç tam ekran 32 bpp bellek arabelleğinin boş kalmasını denemesini söylemesine olanak tanır.

Bu eşikler config.xml çerçevesiyle yapılandırılabilir.

<!-- 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'ün eşiklerini her öncelik düzeyindeki paketteki işlemleri çalıştırmak için gereken dosya destekli sayfaların (önbelleğe alınmış sayfalar) çalışma grubuyla ilgili beklentisine uyacak şekilde yapılandırır. Bir cihazın çalışma grubuyla ilgili yüksek gereksinimleri varsa (ör. tedarikçi kullanıcı arayüzü daha fazla bellek gerektiriyorsa veya daha fazla hizmet eklendiyse) eşikler artırılabilir.

Dosya destekli sayfalar için çok fazla bellek ayrılıyorsa eşikler azaltılabilir. Böylece, önbelleğin çok küçük olması nedeniyle diskte taşma oluşmadan çok önce arka plan işlemleri sonlandırılır.

<!-- 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>