A partir de Android 5.0, el funcionamiento adecuado de la pila de redes de Android en Linux Los kernels requieren una serie de confirmaciones que se subieron de forma reciente. o que aún no es ascendente. No es fácil verificar manualmente la funcionalidad del kernel requerida o hacer un seguimiento de las confirmaciones faltantes, de modo que el equipo de Android comparte las pruebas que usa para garantizar que el kernel se comporte como se espera.
Motivos para ejecutar las pruebas
Estas pruebas se realizan en tres etapas motivos:
- La versión exacta del kernel de Linux que se usa en un dispositivo es típicamente específico del dispositivo, y es difícil saber si algún kernel funciona correctamente sin ejecutar las pruebas.
- La portabilidad de reenvío y la portabilidad a versiones anteriores de los parches del kernel a diferentes versiones de kernel o a Los árboles de dispositivos pueden introducir problemas sutiles que pueden ser imposibles de detectar sin ejecutaste las pruebas.
- Es posible que las nuevas funciones de red requieran una nueva funcionalidad del kernel o un error en el kernel. soluciones.
Si las pruebas no se superan, la pila de red del dispositivo no se comporta correctamente, lo que provoca errores de conectividad visibles para el usuario (por ejemplo, redes Wi-Fi). Es probable que el dispositivo también falle la Prueba de compatibilidad de Android de paquetes de aplicaciones (CTS).
Usa las pruebas
Las pruebas usan Linux en modo de usuario para iniciar la kernel como un proceso en una máquina anfitrión de Linux. Consulta Cómo establecer un entorno de compilación para versiones adecuadas del sistema operativo. El framework de prueba de unidades inicia el kernel con una imagen de disco adecuada y ejecuta las pruebas desde el y el sistema de archivos host. Las pruebas se escriben en Python y usan interfaces TAP para el comportamiento del kernel de ejercicio y la API del socket.
Compila el kernel para ARCH=um
Para que se ejecuten las pruebas,
el kernel debe compilar para ARCH=um SUBARCH=x86_64
. Este es un
arquitectura compatible tanto en sentido ascendente como en los árboles de kernel de Android comunes
(como android-4.4
). Pero, a veces, los dispositivos
los kernels no se compilan en este modo porque los árboles de dispositivos contienen
código específico del dispositivo o hardware en archivos comunes (por ejemplo,
sys/exit.c
).
En muchos casos, es suficiente con
código específico de hardware se encuentra detrás de un #ifdef
. Por lo general, debería
ser un #ifdef
en una opción de configuración que controle la configuración
o una función relevante para el código. Si no existe tal opción de configuración, pon
código específico de hardware dentro de bloques #ifndef CONFIG_UML
En
En general, corregir esto debería ser responsabilidad del proveedor del árbol del kernel.
(como el proveedor del SoC o conjunto de chips). Estamos trabajando con OEM y proveedores para garantizar
que los kernels actuales y futuros se compilan para ARCH=um
SUBARCH=x86_64
sin necesidad de realizar cambios.
Ejecuta las pruebas
Las pruebas están en kernel/tests/net/test
.
Se recomienda que las pruebas se ejecuten desde la página principal de AOSP porque
son los más actualizados; en algunos casos, las funciones de kernel necesarias
el funcionamiento adecuado en una versión determinada de Android aún no tienen cobertura de prueba completa.
en la versión específica. Para obtener información sobre cómo ejecutar las pruebas, consulta el kernel
archivo README de prueba de red. Básicamente, desde la parte superior de tu árbol de kernel, ejecuta lo siguiente:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Aprueba las pruebas
La red de kernel prueba Python
Los archivos de origen contienen comentarios que especifican confirmaciones de kernel que se conocen como
necesarias para pasar las pruebas. Las pruebas deberían pasar
en los árboles de kernel común
ramas de kernel comunes android-4.4
y posteriores, en el
kernel/common
en AOSP. Por lo tanto, pasar las pruebas en un kernel es solo una cuestión de
combinando continuamente desde la rama de kernel común correspondiente.
Contribuciones
Informar problemas
Informa cualquier problema con las pruebas de red del kernel en la página de Android Herramienta de seguimiento de errores con Component-Networking etiqueta.
Confirmaciones de documentos y agrega pruebas
Informa los problemas como se describió anteriormente y, si es posible, sube un cambio para resolverlos si:
- Las pruebas no pasan en los árboles de kernel común.
- Tú encontrar una confirmación necesaria que no se menciona en los comentarios de la fuente
- Hacer que las pruebas superen los kernels ascendentes requiere cambios importantes
- Si cree que las pruebas están sobreespecificadas o que la prueba no se aprueba en el futuro kernels
- Quieres agregar más pruebas o más cobertura y pruebas.