Pruebas de unidades de red de kernel

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:

  1. 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.
  2. 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.
  3. 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.