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
veyaCONFIG_ACPI=y
- 4.4 ve 4.9 çekirdeklerinde
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
VEYA hemCONFIG_MEMCG=y
hem deCONFIG_MEMCG_SWAP=y
var 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ü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 ("ek ayarlanabilir ücretsiz kbayt ekle") 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>