Depuis Android 5.0, le bon fonctionnement de la pile réseau Android sous Linux les noyaux nécessitent un certain nombre de commits relativement récents en amont. ou n'en sont pas encore arrivés en amont. Il n'est pas facile de vérifier manuellement les fonctionnalités de noyau requises ou suivre les commits manquants. L'équipe Android partage les tests qu’il utilise pour s’assurer que le noyau se comporte comme prévu.
Raisons d'exécuter les tests
Ces tests existent pour trois principaux raisons:
- La version exacte du noyau Linux utilisée sur un périphérique est généralement spécifique à un appareil, et il est difficile de savoir si un noyau fonctionne correctement sans exécuter les tests.
- Les transferts de transfert rétroporter les correctifs du noyau vers différentes versions les arborescences de périphériques peuvent introduire des problèmes subtils qu'il est impossible de détecter sans l'exécution des tests.
- Les nouvelles fonctionnalités de mise en réseau peuvent nécessiter de nouvelles fonctionnalités de noyau ou un bug du noyau ou de correctifs.
Si les tests échouent, la pile réseau de l'appareil se comporte de manière incorrecte, ce qui entraîne des bugs de connectivité visibles par l'utilisateur (tels que réseaux Wi-Fi). Il est probable que l'appareil échoue également au test de compatibilité Android. (CTS).
Utiliser les tests
Les tests utilisent Linux en mode utilisateur pour démarrer le noyau en tant que processus sur une machine hôte Linux. Voir Établir un environnement de compilation pour avec les versions appropriées des systèmes d'exploitation. Framework de tests unitaires démarre le noyau avec une image disque appropriée et exécute les tests à partir du le système de fichiers hôte. Les tests sont écrits en Python et utilisent des interfaces TAP pour le comportement du noyau et l'API de socket.
Compiler le noyau pour ARCH=um
Pour exécuter les tests,
le noyau doit se compiler pour ARCH=um SUBARCH=x86_64
. Il s'agit d'un
architecture compatible en amont et dans les arborescences de noyau Android courantes
(android-4.4
, par exemple). Mais parfois, l’appareil
les noyaux ne se compilent pas dans ce mode,
car les arborescences de périphériques contiennent
code spécifique à l'appareil ou au matériel dans les fichiers courants (par exemple,
sys/exit.c
).
Dans de nombreux cas, il suffit de s'assurer que
le code spécifique au matériel se trouve derrière un #ifdef
. Généralement, cela devrait
être un #ifdef
sur une option de configuration qui contrôle
la fonctionnalité pertinente pour le code. En l'absence d'option de configuration de ce type, placez
code spécifique au matériel dans des blocs #ifndef CONFIG_UML
.
Dans
en général, la résolution de ce problème devrait être
la responsabilité du fournisseur de l'arborescence du noyau
(comme le fournisseur du chipset ou du SoC). Nous travaillons avec les OEM et les fournisseurs
que les noyaux actuels et futurs se compilent pour ARCH=um
SUBARCH=x86_64
sans nécessiter aucune modification.
Exécuter les tests
Les tests ont lieu à kernel/tests/net/test
.
Il est recommandé d'exécuter les tests depuis AOSP main, car ils
sont les plus à jour ; dans certains cas, les fonctions
du noyau qui sont nécessaires pour
le bon fonctionnement d'une version d'Android donnée n'ont pas encore de couverture de test complète.
dans l'album donné. Pour plus d'informations sur l'exécution des tests, reportez-vous au noyau
fichier README du test du réseau. En gros, en haut de l'arborescence du noyau, exécutez la commande suivante:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Réussir les tests
Python de test réseau du noyau
les fichiers sources contiennent des commentaires qui spécifient les commits du noyau connus pour être
requises pour réussir les tests. Les tests devraient réussir dans les arbres de noyau courants
branches courantes du noyau android-4.4
et versions ultérieures : dans le
kernel/common
projet dans AOSP. Par conséquent, réussir les tests sur
un noyau est simplement une question
en continu à partir de la branche
commune du noyau correspondante.
Contributions
Signaler des problèmes
Signalez tout problème lié aux tests réseau du noyau dans le package Android Issue Tracker avec l'outil Component-Networking libellé.
Documenter les commits et ajouter des tests
Signalez les problèmes comme décrit ci-dessus et, si possible, importez une modification pour les résoudre. si:
- Les tests ne réussissent pas sur les arbres de noyau courants
- Toi trouver un commit nécessaire non mentionné dans les commentaires de la source,
- La réussite des tests sur les noyaux en amont nécessite des modifications majeures
- vous pensez que les tests sont surspécifiés ou qu'ils échouent à une date ultérieure noyaux
- Vous souhaitez ajouter des tests ou une couverture plus étendue à des tests.