Çekirdek yapılandırması

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üzenlendi:

  • 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. Her mimaride, mimariye özel gerekli seçeneklerin yer aldığı bir dosya bulunmaz. Mimarinizde dosya yoksa Android için mimariye özel ek çekirdek yapılandırma gereksinimleri de bulunmaz.
  • 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 dosyası 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 ayarlar hakkında ayrıntılı bilgi için Android Uyumluluk Tanım Belgesi (CDD)'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 yöneticisi, 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, Compatibility Test Suite (CTS) ve Vendor Test Suite (VTS) aşağıdaki koşulların karşılandığını doğrular:

  • CONFIG_OF=y veya CONFIG_ACPI=y
  • 4.4 ve 4.9 çekirdeklerinde CONFIG_ANDROID_LOW_MEMORY_KILLER=y VEYA hem CONFIG_MEMCG=y hem de CONFIG_MEMCG_SWAP=y var
  • 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ümlerde CONFIG_INET_UDP_DIAG seçeneği 4.9 çekirdekler için 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 yukarı akış desteği sunan 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. vDSO32'yi CONFIG_COMPAT ile, CONFIG_CROSS_COMPILE_COMPAT_VDSO ise arm32 derleyici üçlüsüyle etkinleştirerek Linux çekirdeğinizde vDSO'yu kurabilirsiniz. Android Kernel ekibi, vDSO yama serisinin eski sürümlerini Pixel cihazlara geri aktardı. Böylece Pixel çekirdek derlemelerinde ö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 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. Bunun için çekirdeğin, bir sayfayı boşaltırken ayırmayı engellemesi gerekir. Bu da genellikle disk G/O'nun, dosya destekli kirli bir sayfayı boşaltması için veya lowmemorykiller ürününün bir işlemi durdurmasını gerektirir. 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 plan geri alma işlemini tetikleyen filigranlar bulunur. Bu, sayfaları serbest bırakmaya çalışan bir iş parçacığıdır. Böylece gerçek bir iş parçacığı bir dahaki sefere ayrılırken hızlı bir şekilde başarılı olabilir.

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ıca ayıran herhangi bir işlemin doğrudan geri kazanılmasına yol aç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 kiralarken ActivityManager, çekirdeğe üç tam ekran 32 bpp arabelleği boş bırakmaya çalışmasını söyleyebilir.

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>

Tune LowMemoryKiller

ActivityManager, her bir öncelik düzeyindeki paketteki işlemleri çalıştırmak için gerekli olan, çalışan dosya destekli sayfalar (önbelleğe alınmış sayfalar) beklentilerini karşılayacak şekilde LowMemoryKiller etiketinin eşiklerini 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>