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
veyaCONFIG_ACPI=y
- 4.4 ve 4.9 çekirdekleri
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
sahiptir VEYA hemCONFIG_MEMCG=y
hem deCONFIG_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 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 bilgisayar 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>