Usa los siguientes parámetros de configuración como base para un kernel de Android
configuración. Los parámetros de configuración se organizan en archivos .cfg
para android-base
,
android-base-ARCH
y
android-recommended
:
- Las opciones de
android-base
habilitan las funciones principales de Android y se debe configurar según lo especificado en todos los dispositivos. - Las opciones de
android-base-ARCH
habilitan las funciones principales Android y debe configurarse según lo especificado en todos los dispositivos de arquitectura ARCH. No todas las arquitecturas tienen un archivo correspondiente de opciones requeridas específicas de la arquitectura. Si tu arquitectura no tiene un archivo, este no tiene una configuración de kernel adicional específica de la arquitectura los requisitos para Android. android-recommended
Estas opciones habilitan las funciones avanzadas de Android y son opcionales para los dispositivos.
Estos archivos de configuración se encuentran
kernel/configs
repo. Utiliza el conjunto de archivos de configuración que corresponda a la versión de
kernel que estás usando.
Para obtener detalles sobre los controles ya realizados para fortalecer el kernel en tu consulta la sección Sistema y seguridad del kernel. Para obtener detalles sobre la configuración requerida, consulta la Documento de definición de compatibilidad de Android (CDD).
Cómo generar la configuración del kernel
Para dispositivos con formato defconfig
minimalista, usa la
Secuencia de comandos merge_config.sh
en el árbol del kernel para habilitar las opciones:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Se generará un archivo .config
que puedes usar para guardar un nuevo archivo
defconfig
o compila un kernel nuevo con funciones de Android
habilitado.
Requisitos adicionales de configuración del kernel
En algunos casos, el encargado de mantenimiento de la plataforma puede elegir entre varios archivos para satisfacer una dependencia de Android. Esas dependencias no pueden se expresa en los archivos de fragmentos de configuración del kernel (descritos anteriormente) porque la no admite expresiones lógicas. En Android 9 y superior, Conjunto de pruebas de compatibilidad (CTS) y El paquete de pruebas de proveedores (VTS) verifica que se cumplen los siguientes requisitos:
CONFIG_OF=y
oCONFIG_ACPI=y
- Los kernels 4.4 y 4.9 tienen
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
O tenerCONFIG_MEMCG=y
yCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
oCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
oCONFIG_STRICT_MODULE_RWX=y
- Solo para ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
oCONFIG_ARM64_PAN=y
Además, la opción CONFIG_INET_UDP_DIAG
debe configurarse como
y
para kernels 4.9 en Android 9 y versiones posteriores.
Habilita las opciones del modo de host USB
Para el audio del modo de host USB, habilita las siguientes opciones:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Para el modo de host USB MIDI, habilita la siguiente opción:
CONFIG_SND_USB_MIDI=y
Seccomp BPF con TSYNC
El filtro de paquetes de Berkeley de procesamiento seguro (Seccomp BPF) es una solución de seguridad tecnología que permite la creación de zonas de pruebas que definen el contexto en las que un proceso puede realizar llamadas al sistema. La sincronización de subprocesos (TSYNC) permite usar Seccomp BPF desde programas multiproceso. Esta esta capacidad se limita a arquitecturas que admiten Seccomp en forma ascendente (ARM, ARM64, x86 y x86_64).
Daemon de bloqueo activo de Android
Android 10 incluye el daemon de bloqueo activo de Android
(llkd
), que está diseñado para detectar y mitigar los interbloqueos del kernel.
Para obtener detalles sobre el uso de llkd
, consulta
Daemon de bloqueo activo de Android.
vDSO32 en ARM64
El objeto virtual compartido dinámico (vDSO) es una alternativa a las llamadas al sistema que,
cuando se usan y configuran correctamente, pueden reducir los costos del ciclo. En Android
10 agrega compatibilidad con vDSO32 en kernels de 64 bits (Android
ya es compatible con vDSO64 en kernels de 64 bits y vDSO32 en kernels de 32 bits). Usando
vDSO32 (CONFIG_VDSO_COMPAT
) en la arquitectura ARM64 proporciona una
Aumento del 0.4% en la duración de la batería y otras mejoras de rendimiento.
La comunidad de Linux está trabajando activamente en
unificación de las vDSO
en todas las arquitecturas. Puedes configurar vDSO en tu kernel de Linux habilitando
vDSO32 con CONFIG_COMPAT
y
CONFIG_CROSS_COMPILE_COMPAT_VDSO
con el triplete del compilador arm32.
El equipo de kernel de Android incorporó versiones anteriores de la serie de parches vDSO.
en dispositivos Pixel, para que encuentres ejemplos en compilaciones de kernel de Pixel
(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
ruta,
La referencia de CROSS_COMPILE_ARM32
y
configuración de CONFIG_CROSS_COMPILE_ARM32
).
Configuración de memoria RAM baja
Ajusta el kernel y ActivityManager para reducir la reclamación directa.
La reclamación directa ocurre cuando un proceso o el kernel intentan asignar una página.
de memoria (ya sea directamente o debido a errores en una página nueva), y el kernel tiene
se usó toda la memoria libre disponible. Esto requiere que el kernel bloquee la asignación
a la vez que libera una página. Esto, a su vez, suele requerir la E/S del disco para vaciar una
página respaldada por archivos no sincronizadas o espera a que lowmemorykiller
detenga una
el proceso de administración de recursos. Esto puede generar E/S adicionales en cualquier subproceso, incluido un subproceso de IU.
Para evitar la reclamación directa, el kernel
tiene marcas de agua que activan
kswapd
o recuperación de fondo. Este es un subproceso que intenta
liberar páginas para que la próxima vez que se asigne un subproceso real, se pueda realizar con éxito rápidamente.
El umbral predeterminado para activar la recuperación en segundo plano es bastante bajo, aproximadamente 2 MB en un dispositivo de 2 GB y 636 KB en un dispositivo de 512 MB El recupera solo unos pocos megabytes de memoria en la recuperación en segundo plano. Esto significa cualquier proceso que asigne rápidamente más de unos pocos megabytes haz clic en Recuperar directamente.
La compatibilidad con un kernel ajustable se agrega en la rama de kernel de Android-3.4 como
parche 92189d47f66c67e5fd92eafaa287e153197a454f ("agregar bytes gratuitos adicionales
ajustable"). Elegir rápidamente este parche para el kernel de un dispositivo permite,
ActivityManager
para indicarle al kernel que intente mantener tres pantallas completa
Búferes de memoria de 32 bpp libres
Estos umbrales se pueden configurar con el config.xml
en un framework de aplicaciones.
<!-- 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>
Ajusta LowMemoryKiller
ActivityManager
configura los umbrales de la
LowMemoryKiller
para que coincida con su expectativa del conjunto de trabajo de
páginas respaldadas por archivos (páginas almacenadas en caché) necesarias para ejecutar los procesos en cada prioridad
a un bucket de Google Cloud. Si un dispositivo tiene requisitos elevados para el conjunto de tareas, por ejemplo
Si la IU del proveedor requiere más memoria o si se agregaron más servicios,
se pueden aumentar los umbrales.
Los umbrales pueden reducirse si se reserva demasiada memoria para las páginas respaldadas por archivos, de manera que los procesos en segundo plano se cierran mucho antes se produciría una hiperpaginación en el disco debido a que la caché es demasiado pequeñ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>