Bir 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ü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 mimarisinin tüm cihazları tarafından belirtildiği gibi yapılandırılmalıdır. Tüm mimariler, mimariye özgü gerekli seçeneklere karşılık gelen bir dosyaya sahip değildir. Mimarinizin bir dosyası 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. Kullanmakta olduğunuz çekirdeğin sürümüne karşılık gelen yapılandırma dosyaları kümesini kullanın.
Cihazlarınızda çekirdeği güçlendirmek için halihazırda üstlenilen kontrollerle ilgili ayrıntılar için, bkz. Sistem ve çekirdek güvenliği . Gerekli ayarlarla ilgili ayrıntılar için Android Uyumluluk Tanımı Belgesine (CDD) bakın.
Çekirdek yapılandırması oluştur
Minimalist bir defconfig
formatına 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, yeni bir defconfig
dosyası kaydetmek veya Android özellikleri etkinken yeni bir çekirdeği derlemek için kullanabileceğiniz bir .config
dosyası oluşturur.
Ek çekirdek yapılandırma gereksinimleri
Bazı durumlarda, platform yöneticisi, Android bağımlılığını karşılamak için birden çok çekirdek özelliği arasından seçim yapabilir. Bu tür bağımlılıklar, çekirdek yapılandırma parçası dosyalarında (yukarıda açıklanmıştır) ifade edilemez çünkü bu dosyaların biçimi mantıksal ifadeleri desteklemez. Android 9 ve sonraki 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
veyaCONFIG_ACPI=y
- 4.4 ve 4.9 çekirdekler
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
sahiptir VEYA hemCONFIG_MEMCG=y
hem de CONFIG_MEMCG_SWAPCONFIG_MEMCG_SWAP=y
sahiptir -
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, CONFIG_INET_UDP_DIAG
seçeneği, Android 9 ve sonraki sürümlerde 4.9 çekirdek için y
olarak ayarlanmalıdır.
USB ana bilgisayar modu seçeneklerini etkinleştir
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 bilgisayar modu MIDI için aşağıdaki seçeneği etkinleştirin:
CONFIG_SND_USB_MIDI=y
TSYNC ile Seccomp BPF
Güvenli Hesaplama Berkeley Paket Filtresi (Seccomp BPF), bir sürecin 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, çok iş parçacıklı programlardan Seccomp BPF'nin kullanılmasını sağlar. Bu yetenek, Seccomp yukarı akış desteğine sahip mimarilerle sınırlıdır (ARM, ARM64, x86 ve x86_64).
Android Canlı Kilit Arka Plan Programı
Android 10, çekirdek kilitlenmelerini yakalamak ve azaltmak için tasarlanmış Android Live-Lock Daemon'u ( llkd
) içerir. llkd'yi kullanmayla ilgili ayrıntılar için Android Live-Lock llkd
bakın.
ARM64 üzerinde vDSO32
Sanal dinamik paylaşılan 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ği ekler (Android, 64 bit çekirdeklerde vDSO64'ü ve 32 bit çekirdeklerde vDSO32'yi zaten destekler). 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, vDSO'ları mimariler arasında birleştirmek için aktif olarak çalışıyor. vDSO32'yi CONFIG_CROSS_COMPILE_COMPAT_VDSO
ile vDSO32'yi ve arm32 derleyici üçlüsü ile CONFIG_COMPAT
etkinleştirerek Linux çekirdeğinizde vDSO'yu kurabilirsiniz. Android Çekirdeği ekibi, vDSO yama serisinin eski sürümlerini Pixel cihazlarına destekledi, bu nedenle örnekleri Pixel çekirdek yapılarında 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 çekirdek/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 sayfadaki hata nedeniyle) ve çekirdek kullanılabilir tüm boş belleği kullandığında gerçekleşir. Bu, çekirdeğin bir sayfayı boşaltırken ayırmayı engellemesini gerektirir. Bu da genellikle kirli bir dosya destekli sayfayı temizlemek için disk G/ lowmemorykiller
gerektirir veya düşük bellek öldürücünün bir işlemi durdurmasını bekler. Bu, bir UI iş parçacığı dahil olmak üzere herhangi bir iş parçacığında fazladan G/Ç ile sonuçlanabilir.
Doğrudan geri almayı önlemek için, çekirdeğin kswapd
veya arka plan geri kazanmayı tetikleyen filigranları vardır. Bu, sayfaları boşaltmaya çalışan bir iş parçacığıdır, böylece bir dahaki sefere gerçek bir iş parçacığı tahsis edildiğinde, hızlı bir şekilde başarılı olabilir.
Arka plan geri almayı tetiklemek için varsayılan eşik oldukça düşüktür; 2 GB cihazda yaklaşık 2 MB ve 512 MB cihazda 636 KB civarındadır. Çekirdek, arka plan geri alma işleminde yalnızca birkaç megabayt belleği geri alır. Bu, birkaç megabayttan fazlasını hızlı bir şekilde tahsis eden herhangi bir işlemin hızlı bir şekilde doğrudan geri kazanmayı vuracağı anlamına gelir.
Bir çekirdek ayarlanabilir desteği, Android-3.4 çekirdek dalında 92189d47f66c67e5fd92eafaa287e153197a454f ("ayarlanabilir ekstra ücretsiz kbayt ekle") olarak eklenir. Bu yamanın bir cihazın çekirdeğine eklenmesi, ActivityManager
çekirdeğe üç tam ekran 32 bpp bellek tamponunu boş tutmaya çalışmasını söylemesini sağlar.
Bu eşikler, config.xml
çerçevesi ile 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>tutucu4 l10n-yer
<!-- 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 bir öncelik düzeyi kovasındaki süreçleri çalıştırmak için gereken, çalışan dosya destekli sayfalar (önbelleğe alınmış sayfalar) beklentisiyle eşleşecek şekilde yapılandırır. Bir cihazın çalışma grubu 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ılmışsa, eşikler düşürülebilir, böylece önbelleğin çok küçük olması nedeniyle arka plan işlemleri disk thrashing meydana gelmeden çok önce öldü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>tutucu6 l10n-yer
<!-- 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>