Użyj poniższych ustawień konfiguracji jako podstawy jądra Androida
konfiguracji. Ustawienia są uporządkowane w .cfg
plików dotyczących usług android-base
,
android-base-ARCH
i
android-recommended
:
- Opcje
android-base
włączają podstawowe funkcje Androida i powinna być skonfigurowana w sposób określony przez wszystkie urządzenia. - Opcje
android-base-ARCH
włączą podstawowe funkcji Androida i należy go skonfigurować zgodnie z wymaganiami wszystkich urządzeń architektura ARCH. Nie wszystkie architektury mają odpowiedni plik opcji wymaganych w konkretnej architekturze. Jeśli Twoja architektura nie ma pliku, nie ma on dodatkowej konfiguracji jądra zależnej od architektury wymagań systemu Android. android-recommended
Te opcje włączają zaawansowane funkcje Androida funkcji i są opcjonalne na urządzeniach.
Te pliki konfiguracji znajdują się w
kernel/configs
repozytorium. Użyj zbioru plików konfiguracji, który odpowiada wersji
systemu, którego używasz.
Szczegółowe informacje na temat ustawień, które zostały już podjęte w celu wzmocnienia jądra systemu urządzeń, zapoznaj się z sekcją Systemy zabezpieczeń jądra systemu. Szczegółowe informacje o wymaganych ustawieniach znajdziesz w Dokument definicji zgodności z Androidem (CDD).
Wygeneruj konfigurację jądra
W przypadku urządzeń o minimalistycznym formacie defconfig
użyj funkcji
merge_config.sh
w drzewie jądra, aby włączyć opcje:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Spowoduje to wygenerowanie pliku .config
, którego możesz użyć do zapisania nowego
defconfig
lub skompiluj nowe jądro z funkcjami Androida
.
Dodatkowe wymagania dotyczące konfiguracji jądra
W niektórych przypadkach opiekun platformy może wybierać spośród kilku jąder aby spełnić wymagania Androida. Takich zależności nie można wyrażonych w plikach z fragmentami konfiguracji jądra (opisanych powyżej), ponieważ nie obsługuje wyrażeń logicznych. Na Androidzie 9 i Compatibility Test Suite (CTS) oraz Vendor Test Suite (VTS) sprawdza, czy spełnione są następujące wymagania:
CONFIG_OF=y
lubCONFIG_ACPI=y
- Jądra w wersjach 4.4 i 4.9 mają
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
LUB mają zarównoCONFIG_MEMCG=y
, jak iCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
lubCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
lubCONFIG_STRICT_MODULE_RWX=y
- Tylko w przypadku ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
lubCONFIG_ARM64_PAN=y
Dodatkowo opcja CONFIG_INET_UDP_DIAG
musi być ustawiona na
y
w przypadku jądra systemu 4.9 na Androidzie 9 i nowszych.
Włącz opcje trybu hosta USB
W przypadku dźwięku w trybie hosta USB włącz te opcje:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Dla trybu hosta USB MIDI włącz tę opcję:
CONFIG_SND_USB_MIDI=y
Seccomp BPF z TSYNC
Secure Computing Berkeley PacketFilter (Seccomp BPF) to zabezpieczenia jądra technologii, która umożliwia tworzenie piaskownicy definiujących kontekst który może wywoływać system. synchronizacji wątków (TSYNC), umożliwia korzystanie z Seccomp BPF z programów wielowątkowych. Ten możliwość jest ograniczona do architektur z obsługą Seccomp nadrzędnych (ARM, ARM64, x86 i x86_64).
Demon blokady na żywo na Androidzie
Android 10 zawiera demona aktywnej blokady Androida
(llkd
), która służy do wychwytywania i ograniczania wzajemnych blokad jądra.
Więcej informacji o korzystaniu z llkd
znajdziesz tutaj:
Demon Live Lock na Androida
vDSO32 w ARM64
Wirtualny, dynamiczny obiekt udostępniany (Virtual Dynamic Shared Object, vDSO) to alternatywa dla wywołań systemowych, które:
prawidłowo skonfigurowane i użyte, mogą zmniejszyć koszty cyklu. Android,
10 dodaje obsługę vDSO32 w 64-bitowych jądrach (Android
obsługuje już wersję vDSO64 w 64-bitowych jądrach i vDSO32 w 32-bitowych jądrach. Zastosowanie
vDSO32 (CONFIG_VDSO_COMPAT
) w architekturze ARM64 zapewnia
Wydłużenie czasu pracy na baterii o 0,4% i inne ulepszenia wydajności.
Społeczność użytkowników Linuksa aktywnie pracuje nad
ujednolicanie instancji vDSO
w różnych architekturach. Możesz skonfigurować vDSO w jądrze Linuksa, włączając
vDSO32 z CONFIG_COMPAT
i
CONFIG_CROSS_COMPILE_COMPAT_VDSO
z triolem kompilatora arm32.
Zespół jądra Androida przesłał wstecz starsze wersje serii poprawek vDSO.
w urządzeniach Pixel, dzięki czemu znajdziesz przykłady
w kompilacjach jądra systemu Pixel
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
ścieżka,
odwołanie do CROSS_COMPILE_ARM32
,
konfiguracja CONFIG_CROSS_COMPILE_ARM32
).
Konfiguracja z małą ilością pamięci RAM
Dostrój jądro i usługę ActivityManager, aby ograniczyć bezpośrednie odzyskiwanie
Bezpośrednie odzyskiwanie ma miejsce, gdy proces lub jądro próbuje przydzielić stronę
(bezpośrednio lub z powodu błędu na nowej stronie), a jądro ma
wykorzystano całą dostępną wolną pamięć. Wymaga to zablokowania alokacji przez jądro
podczas przeglądania strony. To z kolei często wymaga wejścia/wyjścia dysku, aby wyczyścić
czysta strona utrzymywana z pliku lub poczekaj, aż lowmemorykiller
zatrzyma
proces tworzenia konta. Może to prowadzić do dodatkowego wejścia/wyjścia w każdym wątku, w tym wątku interfejsu użytkownika.
Aby uniknąć bezpośredniego odzyskiwania, jądro ma znaki wodne, które uruchamiają się
kswapd
lub odzyskanie tła. To jest wątek, w którym próbujemy
by następnym razem, gdy zostanie przydzielony prawdziwy wątek, szybciej się to uda.
Domyślny próg aktywacji przywracania w tle jest dość niski i wynosi około 2 MB na urządzeniu o wielkości 2 GB i 636 KB na urządzeniu o wielkości 512 MB. jądro odzyskuje tylko kilka megabajtów pamięci podczas odzyskiwania w tle. Oznacza to, że każdy proces, który szybko przydziela więcej niż kilka megabajtów, kliknij Direct reclaim.
Obsługa dostrajania jądra jest dodawana w gałęzi jądra Androida 3.4 jako
patch 92189d47f66c67e5fd92eafaa287e153197a454f („dodaj dodatkowe wolne kbajty pamięci)
tunable”). Wybór tej poprawki do jądra urządzenia umożliwia
ActivityManager
, aby poinformować jądro, aby starało się utrzymać 3 filmy pełnoekranowe
Bufory pamięci o szybkości 32 bpp.
Te progi można skonfigurować za pomocą: config.xml
platformy.
<!-- 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>
Dostrajanie LowMemoryKiller
ActivityManager
konfiguruje progi
LowMemoryKiller
, aby spełnić oczekiwania zbioru roboczego
strony wspierane przez pliki (strony w pamięci podręcznej) wymagane do uruchomienia procesów o poszczególnych priorytetach.
zasobniku 100%. Jeśli urządzenie ma wysokie wymagania dotyczące zestawu roboczego, np.
jeśli interfejs dostawcy wymaga więcej pamięci lub jeśli dodano więcej usług,
progi można zwiększyć.
Progi można obniżyć, jeśli zarezerwowana jest za dużo pamięci dla dzięki czemu procesy w tle są zatrzymywane na długo thrashing dysku może wystąpić, ponieważ pamięć podręczna staje się zbyt mała.
<!-- 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>