Utilisez les paramètres de configuration suivants comme base pour un noyau Android
configuration. Les paramètres sont organisés en fichiers .cfg
pour android-base
,
android-base-ARCH
et
android-recommended
:
- Les options
android-base
permettent d'activer les principales fonctionnalités Android et doit être configuré comme spécifié par tous les appareils. - Les options
android-base-ARCH
activent les fonctionnalités de base fonctionnalités Android et doit être configuré comme spécifié par tous les appareils de l'architecture ARCH. Toutes les architectures n'ont pas de fichier correspondant d'options requises propres à l'architecture. Si votre architecture ne comporte pas il n'a pas de configuration de noyau spécifique à l'architecture requises pour Android. android-recommended
Ces options permettent d'activer les fonctionnalités avancées d'Android et sont facultatives pour les appareils.
Ces fichiers de configuration se trouvent dans le
kernel/configs
de ce dépôt. Utilisez l'ensemble de fichiers de configuration correspondant à la version de
le noyau que vous utilisez.
Pour en savoir plus sur les contrôles déjà entrepris pour renforcer le noyau sur votre appareils, consultez la section Système et la sécurité du noyau. Pour en savoir plus sur les paramètres requis, consultez les Document de définition de compatibilité Android (CDD).
Générer la configuration du noyau
Pour les appareils dont le format defconfig
est minimaliste, utilisez la
merge_config.sh
dans l'arborescence du noyau pour activer les options:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Cela génère un fichier .config
que vous pouvez utiliser pour enregistrer un nouveau
defconfig
ou compiler un nouveau noyau avec les fonctionnalités Android
est activé.
Exigences supplémentaires pour la configuration du noyau
Dans certains cas, le gestionnaire de la plateforme peut choisir parmi plusieurs noyaux pour satisfaire une dépendance Android. De telles dépendances ne peuvent pas exprimé dans les fichiers de fragment de configuration du noyau (décrits ci-dessus), car format pour ces fichiers n'est pas compatible avec les expressions logiques. Sur Android 9 et de niveau supérieur, la Compatibility Test Suite (CTS) et La suite de test fournisseur (VTS) vérifie que les conditions suivantes sont remplies:
CONFIG_OF=y
ouCONFIG_ACPI=y
- Les noyaux 4.4 et 4.9 disposent de
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
OU qui incluent à la foisCONFIG_MEMCG=y
etCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
ouCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
ouCONFIG_STRICT_MODULE_RWX=y
- Pour ARM64 uniquement:
CONFIG_ARM64_SW_TTBR0_PAN=y
ouCONFIG_ARM64_PAN=y
De plus, l'option CONFIG_INET_UDP_DIAG
doit être définie sur
y
pour les noyaux 4.9 sous Android 9 ou version ultérieure.
Activer les options du mode hôte USB
Pour l'audio en mode hôte USB, activez les options suivantes:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Pour le mode hôte USB MIDI, activez l'option suivante:
CONFIG_SND_USB_MIDI=y
Seccomp BPF avec TSYNC
Seccomp BPF (Secure Computing Berkeley Packet filter) est un filtre de sécurité du noyau qui permet de créer des bacs à sable qui définissent le contexte qu'un processus peut effectuer des appels système. Synchronisation des threads (TSYNC) permet d'utiliser BPF Seccomp à partir de programmes multithread. Ce la capacité est limitée aux architectures compatibles avec Seccomp en amont (ARM, ARM64, x86 et x86_64).
Daemon de verrouillage en direct Android
Android 10 inclut le daemon de verrouillage en direct Android
(llkd
), conçu pour détecter et atténuer les interblocages du noyau.
Pour en savoir plus sur l'utilisation de llkd
, consultez
Damon de verrouillage en direct Android.
vDSO32 sur ARM64
L'objet partagé dynamique virtuel (vDSO) est une alternative aux appels système qui,
lorsqu'elles sont utilisées et configurées correctement, peuvent réduire les coûts de cycle. Android
10 est désormais compatible avec vDSO32 sur les noyaux 64 bits (Android
est déjà compatible avec vDSO64 sur les noyaux 64 bits et vDSO32 sur les noyaux 32 bits). En utilisant
vDSO32 (CONFIG_VDSO_COMPAT
) sur l'architecture ARM64 fournit
Augmentation de 0,4 % de l'autonomie de la batterie et autres améliorations des performances.
La communauté Linux travaille activement sur
unifier des vDSO
entre plusieurs architectures. Vous pouvez configurer vDSO dans votre noyau Linux en activant
vDSO32 avec CONFIG_COMPAT
et
CONFIG_CROSS_COMPILE_COMPAT_VDSO
avec le triplet de compilation arm32.
L'équipe du noyau Android a rétroporté d'anciennes versions de la série de correctifs vDSO
sur les appareils Pixel. Vous pourrez ainsi trouver des exemples de builds de noyau Pixel
(chemin d'accès LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
,
Référence CROSS_COMPILE_ARM32
CONFIG_CROSS_COMPILE_ARM32
).
Configuration à faible mémoire RAM
Régler le noyau et ActivityManager pour réduire la récupération directe
Une récupération directe se produit lorsqu'un processus ou le noyau tente d'allouer une page
de mémoire (soit directement, soit en raison d'une défaillance sur une nouvelle page) et que le noyau dispose
utilisé toute la mémoire disponible disponible. Cela nécessite que le noyau
bloque l’allocation
tout en libérant une page. Cela nécessite souvent des E/S de disque pour vider
une page contenant un fichier corrompu ou attendez que lowmemorykiller
arrête une
processus. Cela peut entraîner des E/S supplémentaires dans n'importe quel thread, y compris un thread UI.
Pour éviter la récupération directe, le noyau a des filigranes qui déclenchent
kswapd
ou récupération en arrière-plan. Il s'agit d'un fil
de discussion qui tente
de libérer des pages. Ainsi, la prochaine fois qu'un thread réel sera alloué, il pourra aboutir rapidement.
Le seuil par défaut de déclenchement de la récupération en arrière-plan est assez faible, 2 Mo sur un appareil de 2 Go et 636 Ko sur un appareil de 512 Mo. La le noyau ne récupère que quelques mégaoctets de mémoire lors de la récupération en arrière-plan. Cela signifie tout processus alloue rapidement plus de quelques mégaoctets, cliquez sur "Récupération directe".
La prise en charge d'un noyau réglable est ajoutée dans la branche de noyau Android-3.4 en tant que
correctif 92189d47f66c67e5fd92eafaa287e153197a454f ("ajouter des kilo-octets sans frais supplémentaires
réglable"). La sélection de ce correctif
sur le noyau d’un appareil permet
ActivityManager
pour indiquer au noyau d'essayer de conserver trois éléments en plein écran
Tampons de mémoire de 32 bpp libres.
Ces seuils peuvent être configurés à l'aide du config.xml
d'infrastructure.
<!-- 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>
Régler LowMemoryKiller
ActivityManager
configure les seuils de la
LowMemoryKiller
pour qu'elle corresponde aux attentes de l'ensemble de travail
pages de fichiers (en cache) requises pour exécuter les processus de chaque priorité
d'un bucket Cloud Storage. Si un appareil présente des exigences élevées pour l'ensemble de travail, par exemple
si l'UI du fournisseur nécessite davantage de mémoire ou si d'autres services ont été ajoutés,
les seuils peuvent être augmentés.
Les seuils peuvent être réduits si trop de mémoire est réservée des pages reposant sur des fichiers, de sorte que les processus en arrière-plan soient arrêtés bien avant le thrashing de disque se produirait lorsque le cache deviendrait trop petit.
<!-- 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>