Verwenden Sie die folgenden Konfigurationseinstellungen als Grundlage für einen Android-Kernel
Konfiguration. Die Einstellungen für android-base
sind in .cfg
Dateien organisiert.
android-base-ARCH
und
android-recommended
:
android-base
-Optionen aktivieren Android-Kernfunktionen und so konfiguriert werden, wie für alle Geräte angegeben.android-base-ARCH
-Optionen aktivieren Kern Android-Funktionen und sollten von allen Geräten mit Architektur ARCH. Nicht alle Architekturen haben eine entsprechende Datei der architekturspezifischen, erforderlichen Optionen. Wenn Ihre Architektur nicht in einer Datei ist, hat sie keine zusätzliche architekturspezifische Kernel-Konfiguration. für Android.android-recommended
Diese Optionen ermöglichen erweiterte Android-Funktionen und sind für Geräte optional.
Diese Konfigurationsdateien befinden sich im
kernel/configs
Repository. Verwenden Sie die Konfigurationsdateien, die der Version von
den Kernel, den Sie verwenden.
Weitere Informationen zu bereits ergriffenen Kontrollen zur Stärkung des Kernels auf Ihrem finden Sie unter System- und Kernel-Sicherheit. Details zu erforderlichen Einstellungen finden Sie in der Dokument zur Android-Kompatibilitätsdefinition (CDD).
Kernel-Konfiguration generieren
Verwende für Geräte mit einem minimalistischen defconfig
-Format die
merge_config.sh
im Kernel-Baum, um Optionen zu aktivieren:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Dadurch wird eine .config
-Datei erstellt, in der Sie ein neues
defconfig
-Datei oder kompilieren Sie einen neuen Kernel mit Android-Funktionen
aktiviert.
Zusätzliche Kernel-Konfigurationsanforderungen
In einigen Fällen kann der Plattform-Betreuer aus mehreren Kernel- um eine Android-Abhängigkeit zu erfüllen. Solche Abhängigkeiten können in den Kernel-Konfigurationsfragmentdateien (wie oben beschrieben) dargestellt wird, unterstützt keine logischen Ausdrücke. In Android 9 und Kompatibilitätstest-Suite (CTS) und Die Vendor Test Suite (VTS) prüft, ob die folgende Anforderungen erfüllt werden:
CONFIG_OF=y
oderCONFIG_ACPI=y
- 4.4- und 4.9-Kernel haben
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
ODER sowohlCONFIG_MEMCG=y
als auchCONFIG_MEMCG_SWAP=y
haben CONFIG_DEBUG_RODATA=y
oderCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
oderCONFIG_STRICT_MODULE_RWX=y
- Nur für ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
oderCONFIG_ARM64_PAN=y
Darüber hinaus muss die Option CONFIG_INET_UDP_DIAG
auf
y
für 4.9-Kernel in Android 9 und höher.
Optionen für den USB-Hostmodus aktivieren
Aktivieren Sie für Audio im USB-Hostmodus die folgenden Optionen:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Aktivieren Sie für MIDI im USB-Hostmodus die folgende Option:
CONFIG_SND_USB_MIDI=y
Seccomp BPF mit TSYNC
Secure Computing Berkeley Packet Filter (Seccomp BPF) ist eine Kernel-Sicherheit, die die Erstellung von Sandboxes ermöglicht, die den Kontext in ein Prozess kann Systemaufrufe durchführen. Thread-Synchronisierung (TSYNC) ermöglicht die Verwendung von Seccomp BPF aus Multithread-Programmen. Dieses Die Fähigkeit ist auf Architekturen beschränkt, die Seccomp-Upstream (ARM, ARM64, x86 und x86_64).
Android-Livelock-Daemon
Android 10 enthält den Android Live Lock-Daemon
(llkd
), die zum Erkennen und Beheben von Kernel-Deadlocks entwickelt wurde.
Weitere Informationen zur Verwendung von llkd
finden Sie unter
Android-Livelock-Daemon.
vDSO32 auf ARM64
Virtual Dynamic Shared Object (vDSO) ist eine Alternative zu Systemaufrufen,
bei richtiger Verwendung und Konfiguration können die Zykluskosten reduzieren. Android-Geräte
Version 10 unterstützt vDSO32 auf 64-Bit-Kerneln (Android
unterstützt bereits vDSO64 auf 64-Bit-Kernels und vDSO32 auf 32-Bit-Kerneln. Mit
vDSO32 (CONFIG_VDSO_COMPAT
) auf der ARM64-Architektur bietet eine
0,4 % längere Akkulaufzeit und andere Leistungsverbesserungen.
Die Linux-Community arbeitet aktiv
vDSOs vereinheitlichen
in verschiedenen Architekturen. Sie können vDSO in Ihrem Linux-Kernel einrichten, indem Sie
vDSO32 mit CONFIG_COMPAT
und
CONFIG_CROSS_COMPILE_COMPAT_VDSO
mit dem arm32-Compiler-Triplet.
Das Android-Kernel-Team hat ältere Versionen der vDSO-Patch-Serie zurückportiert
in Pixel-Geräte importieren. So finden Sie Beispiele in den
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
Pfad,
Referenz CROSS_COMPILE_ARM32
und
CONFIG_CROSS_COMPILE_ARM32
-Konfiguration).
Konfiguration mit wenig RAM
Kernel und ActivityManager abstimmen, um die direkte Rückforderung zu verringern
Die direkte Rückforderung erfolgt, wenn ein Prozess oder der Kernel versucht, eine Seite zuzuweisen
(entweder direkt oder aufgrund eines Fehlers auf einer neuen Seite) und der Kernel hat
den gesamten verfügbaren Arbeitsspeicher verwendet. Dies erfordert, dass der Kernel die Zuweisung blockiert.
während eine Seite frei wird. Dies wiederum erfordert häufig Laufwerks-E/A, um einen
schmutzige dateigestützte Seite oder warten Sie, bis lowmemorykiller
eine
. Dies kann zu zusätzlichen E/A-Vorgängen in jedem Thread führen, einschließlich eines UI-Threads.
Um eine direkte Rückforderung zu vermeiden, hat der Kernel Wasserzeichen, die
kswapd
oder Reaktivierung im Hintergrund. In diesem Thread wird versucht,
Seiten freigeben, sodass ein echter Thread das nächste Mal schnell erfolgreich sein kann.
Der Standardgrenzwert für die Rückforderung des Hintergrunds ist relativ niedrig, etwa 2 MB auf einem 2 GB-Gerät und 636 KB auf einem 512 MB-Gerät. Die Kernel gibt nur wenige Megabyte Arbeitsspeicher im Hintergrund zurück. Das bedeutet, kann jeder Prozess, der schnell mehr als ein paar Megabyte zuweist, und dann auf direkte Rückforderung.
Unterstützung für eine abstimmbare Kernel-Einstellung wird im Kernel-Zweig von Android-3.4 wie folgt hinzugefügt:
patch 92189d47f66c67e5fd92eafaa287e153197a454f ("Zusätzliche kostenlose KB hinzufügen"
abstimmbar“). Wenn Sie diesen Patch
im Kernel eines Geräts auswählen,
ActivityManager
, um den Kernel anzuweisen, drei Vollbildanzeigen zu erhalten
32 bpp Puffer kostenloser.
Diese Schwellenwerte können mit dem config.xml
konfiguriert werden
Framework.
<!-- 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>
LowMemoryKiller einstellen
ActivityManager
konfiguriert die Schwellenwerte der
LowMemoryKiller
entsprechend den Erwartungen an die Arbeitsgruppe
dateigestützten Seiten (im Cache gespeicherten Seiten), die zum Ausführen der Prozesse mit jeder Priorität erforderlich sind
auf Ebene des Buckets. Wenn ein Gerät hohe Anforderungen an den Arbeitsbereich stellt, z. B.
wenn die Anbieter-UI mehr Speicher benötigt oder weitere Dienste hinzugefügt wurden,
können erhöht werden.
Die Grenzwerte können reduziert werden, wenn zu viel Arbeitsspeicher für dateigestützten Seiten, sodass Hintergrundprozesse lange vor dem dass der Cache zu klein wird, um das Laufwerk zu fälschen.
<!-- 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>