Gunakan setelan konfigurasi berikut sebagai dasar untuk kernel Android
konfigurasi Anda. Setelan disusun ke dalam .cfg
file untuk android-base
,
android-base-ARCH
, dan
android-recommended
:
- Opsi
android-base
mengaktifkan fitur inti Android dan harus dikonfigurasi sebagaimana ditentukan oleh semua perangkat. - Opsi
android-base-ARCH
mengaktifkan inti fitur Android dan harus dikonfigurasi seperti yang ditentukan oleh semua perangkat arsitektur ARCH. Tidak semua arsitektur memiliki file yang sesuai opsi yang diperlukan khusus arsitektur. Jika arsitektur Anda tidak memiliki sebuah file, ia tidak memiliki tambahan konfigurasi {i> kernel<i} khusus arsitektur persyaratan untuk Android. android-recommended
. Opsi ini mengaktifkan fitur Android lanjutan dan bersifat opsional untuk perangkat.
File konfigurasi ini terletak di
kernel/configs
ke dalam repositori tambahan. Gunakan kumpulan file konfigurasi yang sesuai dengan versi
{i>kernel<i} yang Anda gunakan.
Untuk detail tentang kontrol yang sudah dilakukan untuk memperkuat {i>kernel<i} pada perangkat, lihat Sistem dan keamanan kernel. Untuk detail tentang setelan yang diperlukan, lihat Dokumen Definisi Kompatibilitas Android (CDD).
Membuat konfigurasi kernel
Untuk perangkat yang memiliki format defconfig
minimalis, gunakan
Skrip merge_config.sh
di hierarki kernel untuk mengaktifkan opsi:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Tindakan ini akan menghasilkan file .config
yang dapat Anda gunakan untuk menyimpan file baru
File defconfig
atau kompilasi kernel baru dengan fitur Android
mengaktifkan pembuatan versi.
Persyaratan konfigurasi kernel tambahan
Dalam beberapa kasus, pengelola platform bisa memilih dari beberapa {i>kernel<i} untuk memenuhi dependensi Android. Ketergantungan tersebut tidak bisa yang dinyatakan dalam file fragmen konfigurasi kernel (dijelaskan di atas) karena format file tersebut tidak mendukung ekspresi logika. Di Android 9 dan yang lebih tinggi, Compatibility Test Suite (CTS) dan Vendor Test Suite (VTS) memverifikasi bahwa persyaratan berikut terpenuhi:
CONFIG_OF=y
atauCONFIG_ACPI=y
- Kernel 4.4 dan 4.9 memiliki
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
ATAU memilikiCONFIG_MEMCG=y
danCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
atauCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
atauCONFIG_STRICT_MODULE_RWX=y
- Khusus ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
atauCONFIG_ARM64_PAN=y
Selain itu, opsi CONFIG_INET_UDP_DIAG
harus ditetapkan ke
y
untuk kernel 4.9 di Android 9 dan yang lebih tinggi.
Aktifkan opsi mode host USB
Untuk audio mode host USB, aktifkan opsi berikut:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Untuk MIDI mode host USB, aktifkan opsi berikut:
CONFIG_SND_USB_MIDI=y
Seccomp BPF dengan TSYNC
{i>Secure Computing Berkeley Packet Filter<i} (Seccomp BPF) adalah keamanan {i>kernel<i} teknologi yang memungkinkan pembuatan {i>sandbox <i}yang menentukan konteks dalam di mana suatu proses dapat melakukan panggilan sistem. Sinkronisasi thread (TSYNC) memungkinkan penggunaan Seccomp BPF dari program multi-thread. Ini kemampuan terbatas pada arsitektur yang memiliki dukungan Seccomp upstream (ARM, ARM64, x86, dan x86_64).
Daemon live-lock Android
Android 10 menyertakan daemon live-lock Android
(llkd
), yang dirancang untuk menangkap dan mengurangi deadlock kernel.
Untuk detail tentang penggunaan llkd
, lihat
Daemon live-lock Android.
vDSO32 di ARM64
{i>Virtual dynamic shared object<i} (vDSO) adalah alternatif untuk panggilan sistem yang,
jika digunakan dan dikonfigurasi dengan benar, dapat mengurangi biaya siklus. Android
10 menambahkan dukungan untuk vDSO32 pada kernel 64-bit (Android
sudah mendukung vDSO64 pada kernel 64-bit dan vDSO32 pada kernel 32-bit). Menggunakan
vDSO32 (CONFIG_VDSO_COMPAT
) pada arsitektur ARM64 menyediakan
Peningkatan masa pakai baterai dan peningkatan performa lainnya sebesar 0,4 persen.
Komunitas Linux
secara aktif mengerjakan
menyatukan vDSO
lintas arsitektur. Anda dapat menyiapkan vDSO di {i>
kernel<i} Linux dengan mengaktifkan
vDSO32 dengan CONFIG_COMPAT
dan
CONFIG_CROSS_COMPILE_COMPAT_VDSO
dengan triplet compiler arm32.
Tim Kernel Android telah melakukan backport versi lama dari seri patch vDSO
di perangkat Pixel, sehingga Anda dapat menemukan contoh di build kernel Pixel
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
jalur,
CROSS_COMPILE_ARM32
referensi, dan
konfigurasi CONFIG_CROSS_COMPILE_ARM32
).
Konfigurasi RAM rendah
Menyesuaikan kernel dan ActivityManager untuk mengurangi perolehan kembali langsung
Klaim kembali langsung terjadi ketika proses atau {i>kernel<i} mencoba mengalokasikan sebuah halaman
memori (baik secara langsung maupun karena faulting di laman baru) dan {i>kernel<i} memiliki
telah menggunakan semua
memori bebas yang tersedia. Ini memerlukan {i>kernel<i} untuk memblokir alokasi
sementara itu mengosongkan halaman. Hal ini pada akhirnya membutuhkan I/O {i>disk<i} untuk
halaman yang didukung file kotor atau menunggu lowmemorykiller
menghentikan
{i>checkout<i}. Hal ini dapat mengakibatkan I/O tambahan di thread apa pun, termasuk thread UI.
Untuk menghindari perolehan kembali langsung, kernel memiliki watermark yang memicu
kswapd
atau klaim ulang latar belakang. Ini adalah utas yang mencoba untuk
mengosongkan halaman sehingga saat berikutnya
thread yang sebenarnya dialokasikan, ia bisa berhasil dengan cepat.
Batas default untuk memicu klaim balik latar belakang cukup rendah, sekitar 2 MB di perangkat 2 GB dan 636 KB di perangkat 512 MB. Tujuan {i>kernel<i} hanya mengklaim kembali memori dalam beberapa megabita di latar belakang. Artinya proses apa pun yang dengan cepat mengalokasikan lebih dari beberapa {i>megabytes<i} akan dengan cepat dan klik klaim langsung.
Dukungan untuk tunable {i>kernel<i} ditambahkan di cabang {i>kernel<i} Android-3.4 sebagai
patch 92189d47f66c67e5fd92eafaa287e153197a454f ("tambahkan ekstra kbytes gratis tambahan
dapat disesuaikan"). Memilih {i>patch<i} ini ke {i>
kernel<i} perangkat memungkinkan
ActivityManager
untuk memberi tahu kernel agar mencoba mempertahankan tiga mode layar penuh
Buffering memori 32 bpp yang bebas.
Batas ini dapat dikonfigurasi dengan config.xml
Google Workspace for Education.
<!-- 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>
Menyesuaikan LowMemoryKiller
ActivityManager
mengonfigurasi nilai minimum
LowMemoryKiller
agar sesuai dengan ekspektasinya
halaman yang didukung file (halaman dalam cache) yang diperlukan untuk menjalankan proses dalam setiap prioritas
bucket level. Misalnya, jika perangkat memiliki persyaratan tinggi untuk working set
jika UI vendor membutuhkan lebih banyak memori atau jika lebih banyak layanan telah ditambahkan,
nilai minimum data dapat ditingkatkan.
Batas dapat dikurangi jika terlalu banyak memori yang tersedia halaman yang didukung file, sehingga proses latar belakang dihentikan jauh sebelum {i>disk thrashing <i}akan terjadi karena {i> cache<i} terlalu kecil.
<!-- 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>