Usa le seguenti impostazioni di configurazione come base per un kernel Android
configurazione. Le impostazioni sono organizzate in file .cfg
per android-base
,
android-base-ARCH
e
android-recommended
:
- Le opzioni di
android-base
attivano le funzionalità principali di Android e deve essere configurato come specificato da tutti i dispositivi. android-base-ARCH
opzioni abilitano il piano principale funzioni Android e deve essere configurato come specificato da tutti i dispositivi di dell'architettura ARCH. Non tutte le architetture hanno un file corrispondente di opzioni richieste specifiche dell'architettura. Se la tua architettura non presenta un file, non ha una configurazione del kernel aggiuntiva specifica per l'architettura requisiti per Android.android-recommended
. Queste opzioni abilitano le funzionalità avanzate di Android e sono facoltativi per i dispositivi.
Questi file di configurazione si trovano
kernel/configs
un repository. Utilizza l'insieme di file di configurazione che corrisponde alla versione
al kernel che stai utilizzando.
Per maggiori dettagli sui controlli già intrapresi per rafforzare il kernel nel tuo per i dispositivi, vedi Sistema e della sicurezza del kernel. Per informazioni dettagliate sulle impostazioni richieste, vedi Documento di definizione della compatibilità Android (CDD).
Genera configurazione kernel
Per i dispositivi in formato defconfig
minimalista, utilizza il
merge_config.sh
script nell'albero del kernel per abilitare le opzioni:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Viene generato un file .config
che puoi utilizzare per salvare un nuovo
defconfig
o compila un nuovo kernel con funzionalità Android
in un bucket in cui è abilitato
il controllo delle versioni.
Requisiti aggiuntivi di configurazione del kernel
In alcuni casi, il gestore della piattaforma può scegliere tra più kernel per soddisfare una dipendenza Android. Queste dipendenze non possono espressa nei file dei frammenti di configurazione del kernel (descritti sopra) perché questo formato non supporta espressioni logiche. In Android 9 e superiori, Compatibility Test Suite (CTS) e Il Vendor Test Suite (VTS) verifica che vengono soddisfatti i seguenti requisiti:
CONFIG_OF=y
oCONFIG_ACPI=y
- I kernel 4.4 e 4.9 hanno
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
OPPURE hanno entrambiCONFIG_MEMCG=y
eCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
oCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
oCONFIG_STRICT_MODULE_RWX=y
- Solo per ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
oCONFIG_ARM64_PAN=y
Inoltre, è necessario impostare l'opzione CONFIG_INET_UDP_DIAG
su
y
per kernel 4.9 in Android 9 e versioni successive.
Attiva le opzioni della modalità host USB
Per l'audio in modalità host USB, abilita le seguenti opzioni:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Per la modalità host USB MIDI, abilita la seguente opzione:
CONFIG_SND_USB_MIDI=y
Seccomp BPF con TSYNC
Il filtro dei pacchetti Berkeley per il computing sicuro (Seccomp BPF) è una tecnologia che consente la creazione di sandbox che definiscono il contesto che un processo può effettuare chiamate di sistema. La sincronizzazione dei thread (TSYNC) consente l'uso di Seccomp BPF da programmi multithread. Questo la capacità è limitata alle architetture che supportano Seccomp a monte (ARM, ARM64, x86 e x86_64).
Daemon Live Lock Android
Android 10 include il daemon Live Lock di Android
(llkd
), progettato per rilevare e mitigare i deadlock del kernel.
Per maggiori dettagli sull'utilizzo di llkd
, consulta
Daemon Live Lock di Android.
vDSO32 su ARM64
Il Virtual Dynamic Shared Object (vDSO) è un'alternativa alle chiamate di sistema che,
se utilizzati e configurati correttamente, possono ridurre i costi del ciclo. Android
10 aggiunge il supporto per vDSO32 sui kernel a 64 bit (Android
supporta già vDSO64 sui kernel a 64 bit e vDSO32 sui kernel a 32 bit). Utilizzo
vDSO32 (CONFIG_VDSO_COMPAT
) sull'architettura ARM64 fornisce un
Aumento dello 0,4% della durata della batteria e altri miglioramenti delle prestazioni.
La community Linux sta lavorando attivamente
unificazione dei vDSO
in più architetture. Puoi configurare vDSO nel kernel Linux abilitando
vDSO32 con CONFIG_COMPAT
e
CONFIG_CROSS_COMPILE_COMPAT_VDSO
con la terzina del compilatore ARM32.
Il team del kernel Android ha eseguito il backporting di versioni precedenti della serie di patch vDSO
nei dispositivi Pixel, quindi puoi trovare esempi nelle build di kernel Pixel
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
percorso,
riferimento CROSS_COMPILE_ARM32
e
CONFIG_CROSS_COMPILE_ARM32
).
Configurazione con RAM insufficiente
Ottimizza il kernel e ActivityManager per ridurre il recupero diretto
Il recupero diretto avviene quando un processo o il kernel tenta di allocare una pagina
di memoria (direttamente o a causa di errori in una nuova pagina) e il kernel ha
utilizzata tutta la memoria libera disponibile. Questo richiede che il kernel blocchi l'allocazione
mentre libera una pagina. Questo, a sua volta, richiede spesso I/O del disco per il flush di un
pagina supportata da file dirty o attendi che lowmemorykiller
interrompa un
e il processo di sviluppo. Ciò può comportare un I/O aggiuntivo in qualsiasi thread, incluso un thread dell'interfaccia utente.
Per evitare il recupero diretto, il kernel ha filigrane che attivano
kswapd
o rivendicazione in background. Questo è un thread che tenta di
di liberare le pagine in modo che la prossima volta che venga assegnato un thread reale, l'operazione venga completata rapidamente.
La soglia predefinita per attivare il recupero in background è piuttosto bassa, circa 2 MB su un dispositivo da 2 GB e 636 KB su un dispositivo da 512 MB. La il kernel recupera solo pochi megabyte di memoria in background. Ciò significa qualsiasi processo che assegni rapidamente più di pochi megabyte sarà fai clic su rivendicazione diretta.
Il supporto per l'ottimizzazione del kernel viene aggiunto nel ramo del kernel Android-3.4 come
patch 92189d47f66c67e5fd92eafaa287e153197a454f ("aggiungi kbyte senza costi extra
regolabile"). La scelta di questa patch al kernel di un dispositivo consente
ActivityManager
per indicare al kernel di provare a mantenere tre opzioni a schermo intero
buffer di memoria da 32 bpp liberi.
Queste soglie possono essere configurate con config.xml
il modello di machine learning.
<!-- 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>
Ottimizza LowMemoryKiller
ActivityManager
configura le soglie del
LowMemoryKiller
affinché corrisponda alle sue aspettative relative al set di lavoro
pagine basate su file (pagine memorizzate nella cache) necessarie per eseguire i processi in ogni priorità
a livello di bucket. Se un dispositivo ha requisiti elevati per il set di lavoro, ad esempio
se l'interfaccia utente del fornitore richiede più memoria o se sono stati aggiunti altri servizi,
le soglie possono essere aumentate.
Le soglie possono essere ridotte se viene riservata troppa memoria le pagine basate su file, in modo che i processi in background vengano terminati molto prima il thrashing del disco si verifica perché la cache diventa troppo piccola.
<!-- 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>