Çekirdek Yapılandırması

Android çekirdek yapılandırması için aşağıdaki yapılandırma ayarlarını temel olarak 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 mimarisindeki tüm cihazlar tarafından belirtildiği şekilde yapılandırılmalıdır. Tüm mimarilerde, mimariye özgü gerekli seçeneklerden oluşan karşılık gelen bir dosya yoktur. Mimarinizde bir 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 deposunda bulunur. Kullandığınız çekirdek sürümüne karşılık gelen yapılandırma dosyaları kümesini kullanın.

Cihazlarınızdaki çekirdeği güçlendirmek amacıyla halihazırda gerçekleştirilen kontrollerle ilgili ayrıntılar için Sistem ve çekirdek güvenliği bölümüne bakın. Gerekli ayarlarla ilgili ayrıntılar için Android Uyumluluk Tanımı Belgesine (CDD) bakın.

Çekirdek yapılandırması oluştur

Minimalist defconfig formatına sahip cihazlar için seçenekleri etkinleştirmek üzere çekirdek ağacındaki merge_config.sh betiğini 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 etkinleştirilmiş yeni bir çekirdek derlemek için kullanabileceğiniz bir .config dosyası oluşturur.

Ek çekirdek yapılandırma gereksinimleri

Bazı durumlarda platform sorumlusu, 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 çekirdek yapılandırma parça dosyalarında (yukarıda açıklanmıştır) ifade edilemez çünkü bu dosyaların formatı mantıksal ifadeleri desteklemez. Android 9 ve üzeri 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 çekirdekleri CONFIG_ANDROID_LOW_MEMORY_KILLER=y sahiptir VEYA hem CONFIG_MEMCG=y hem de 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 Android 9 ve üzeri sürümlerde 4.9 çekirdekler için CONFIG_INET_UDP_DIAG seçeneğinin y olarak ayarlanması gerekir.

USB ana bilgisayar modu seçeneklerini etkinleştirin

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

CONFIG_SND_USB_MIDI=y

TSYNC ile Seccomp BPF

Güvenli Bilgi İşlem Berkeley Paket Filtresi (Seccomp BPF), bir işlemin 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, Secomp BPF'nin çok iş parçacıklı programlardan kullanılmasını sağlar. Bu yetenek, yukarı yönde Seccomp desteğine sahip mimarilerle sınırlıdır (ARM, ARM64, x86 ve x86_64).

Android Canlı Kilit Programı

Android 10, çekirdek kilitlenmelerini yakalamak ve azaltmak için tasarlanmış Android Live-Lock Arka Plan Programını ( llkd ) içerir. llkd kullanımına ilişkin ayrıntılar için Android Live-Lock Daemon'a bakın.

ARM64'te vDSO32

Sanal dinamik paylaşımlı 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ğini ekler (Android, 64 bit çekirdeklerde vDSO64'ü ve 32 bit çekirdeklerde vDSO32'yi zaten destekler). ARM64 mimarisinde vDSO32'nin ( 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_COMPAT ile ve CONFIG_CROSS_COMPILE_COMPAT_VDSO arm32 derleyici üçlüsü ile etkinleştirerek Linux çekirdeğinizde vDSO'yu kurabilirsiniz. Android Çekirdeği ekibi, vDSO yama serisinin eski sürümlerini Pixel cihazlarına desteklemiştir; böylece Pixel çekirdek yapılarında örnekler 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 çekirdeği/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 sayfada hata nedeniyle) ve çekirdek tüm kullanılabilir boş belleği kullandığında gerçekleşir. Bu, çekirdeğin bir sayfayı serbest bırakırken ayırmayı engellemesini gerektirir. Bu da genellikle disk G/Ç'sinin kirli dosya destekli sayfayı temizlemesini veya lowmemorykiller bir işlemi durdurmasını beklemesini gerektirir. Bu, bir UI iş parçacığı da dahil olmak üzere herhangi bir iş parçacığında ekstra G/Ç ile sonuçlanabilir.

Doğrudan geri kazanımı önlemek için çekirdekte kswapd veya arka plan geri alımını tetikleyen filigranlar bulunur. Bu, bir dahaki sefere gerçek bir iş parçacığı tahsis edildiğinde hızlı bir şekilde başarılı olabilmesi için sayfaları boşaltmaya çalışan bir iş parçacığıdır.

Arka planda geri kazanımı tetiklemek için varsayılan eşik oldukça düşüktür; 2 GB'lık bir cihazda yaklaşık 2 MB ve 512 MB'lık bir cihazda 636 KB. Çekirdek, arka planda geri kazanım işleminde yalnızca birkaç megabaytlık belleği geri kazanır. Bu, birkaç megabayttan fazlasını hızlı bir şekilde tahsis eden herhangi bir işlemin, hızlı bir şekilde doğrudan geri kazanıma ulaşacağı anlamına gelir.

Ayarlanabilir çekirdek desteği, Android-3.4 çekirdek dalına 92189d47f66c67e5fd92eafaa287e153197a454f ("ayarlanabilir ekstra ücretsiz kbyte ekle") yaması olarak eklendi. Bu yamanın bir cihazın çekirdeğine aktarılması, ActivityManager çekirdeğe üç tam ekran 32 bpp'lik bellek arabelleğini boş tutmasını 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 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>
<!-- 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 öncelik düzeyi grubundaki işlemleri çalıştırmak için gereken dosya destekli sayfaların (önbelleğe alınmış sayfalar) çalışma kümesine ilişkin beklentisini karşılayacak şekilde yapılandırır. Bir cihazın çalışma seti 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ılırsa eşikler azaltılabilir, böylece önbelleğin çok küçük olması nedeniyle disk parçalanması meydana gelmeden ç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 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>
<!-- 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>