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
veyaCONFIG_ACPI=y
- 4.4 ve 4.9 çekirdeklerinde
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
olmalıdır VEYA hemCONFIG_MEMCG=y
hem deCONFIG_MEMCG_SWAP=y
olmalıdır CONFIG_DEBUG_RODATA=y
veyaCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
veyaCONFIG_STRICT_MODULE_RWX=y
- Yalnızca ARM64 için:
CONFIG_ARM64_SW_TTBR0_PAN=y
veyaCONFIG_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 ("ek ayarlanabilir ücretsiz kbayt ekle") 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>