Tests für Kernel-Netzwerkeinheiten

Seit Android 5.0 funktioniert der Android-Netzwerkstack unter Linux ordnungsgemäß Kernel erfordern eine Reihe von Commits, die vor relativ kurzer Zeit vorgelagert wurden oder noch nicht in den Upstream. Die manuelle Überprüfung der erforderliche Kernel-Funktionen benötigen oder die fehlenden Commits verfolgen, sodass das Android-Team die Tests, die er verwendet, um sicherzustellen, dass sich der Kernel wie erwartet verhält.

Gründe für die Ausführung der Tests

Diese Tests gibt es für drei Gründe:

  1. Die genaue Version des auf einem Gerät verwendeten Linux-Kernels sind normalerweise gerätespezifisch und es ist schwierig, ohne Tests ordnungsgemäß funktioniert.
  2. Die Weiterleitung und die Rückportierung der Kernel-Patches auf verschiedene Kernel-Versionen Gerätebäume können kleine Probleme verursachen, die ohne für die Durchführung der Tests.
  3. Neue Netzwerkfunktionen erfordern möglicherweise neue Kernel-Funktionen oder Kernel-Fehler Fehlerbehebungen.

Wenn die Tests nicht bestanden werden, ist der Netzwerkstack des Geräts nicht richtig funktioniert, was zu für Nutzer sichtbaren Konnektivitätsfehlern führt (z. B. Absturz WLANs). Das Gerät schlägt dann wahrscheinlich auch den Android-Kompatibilitätstest nicht vor Suite-Tests (CTS).

Tests verwenden

Die Tests verwenden Linux im Nutzermodus, um das Kernel als Prozess auf einem Linux-Hostcomputer. Weitere Informationen finden Sie unter Erstellen einer Build-Umgebung für Betriebssystemversionen zu finden. Das Framework für Unittests startet den Kernel mit einem geeigneten Laufwerk-Image und führt die Tests vom Host-Dateisystem. Die Tests werden in Python geschrieben und nutzen TAP-Schnittstellen, um das Kernelverhalten des Trainings und die Socket API verwenden.

Kompilieren Sie den Kernel für ARCH=um

Um die Tests durchzuführen, Der Kernel muss für ARCH=um SUBARCH=x86_64 kompilieren. Dies ist ein unterstützte Architektur sowohl vorgelagert als auch in den gemeinsamen Android-Kernel-Baumstrukturen (z. B. android-4.4). Aber in manchen Fällen Kernel werden in diesem Modus nicht kompiliert, da Gerätestrukturen geräte- oder hardwarespezifischer Code in gängigen Dateien (z. B. sys/exit.c).

In vielen Fällen reicht es aus, Hardware-spezifischer Code hinter einem #ifdef. Normalerweise sollte dies ein #ifdef für eine Konfigurationsoption sein, die die spezifische die für den Code relevant sind. Gibt es keine solche Konfigurationsoption, geben Sie hardwarespezifischer Code in #ifndef CONFIG_UML-Blöcken.

In Im Allgemeinen sollte der Anbieter der Kernel-Baumstruktur für die Behebung dieses Problems verantwortlich sein. z. B. den Chipsatz oder den SoC-Anbieter. Wir arbeiten mit OEMs und Anbietern zusammen, dass aktuelle und zukünftige Kernel ohne Änderungen für ARCH=um SUBARCH=x86_64 kompiliert werden.

Tests ausführen

Die Tests finden unter kernel/tests/net/test statt. Es wird empfohlen, die Tests über AOSP main auszuführen, da sie sind die aktuellsten. in einigen Fällen Kernel-Funktionen, die für einwandfreier Betrieb in einem bestimmten Android-Release vorhanden ist, haben noch keine vollständige Testabdeckung. in der jeweiligen Veröffentlichung. Informationen zum Ausführen der Tests finden Sie im Kernel- README-Datei zum Netzwerktest Führen Sie im Grunde oben in Ihrer Kernel-Baumstruktur folgenden Befehl aus:

ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh

Tests bestehen

Python-Netzwerktest für Python Quelldateien enthalten Kommentare mit Kernel-Commits, die bekanntermaßen die zum Bestehen der Tests erforderlich sind. Die Tests sollten in den gemeinsamen Kernel-Baumstrukturen bestanden werden – alle gemeinsame Kernel-Zweige android-4.4 und höher – in der kernel/common Projekt in AOSP. Daher ist das Bestehen der Tests in einem Kernel eine Frage der die kontinuierlich aus dem entsprechenden gemeinsamen Kernel-Branch zusammengeführt werden.

Beiträge

Probleme melden

Melden Sie Probleme mit den Kernel-Netzwerktests in der Android Problemverfolgung mit dem Komponentennetzwerk .

Commits und Hinzufügen von Tests dokumentieren

Melden Sie die Probleme wie oben beschrieben und laden Sie nach Möglichkeit eine Änderung hoch, um das Problem zu beheben. wenn:

  • Die Tests werden die allgemeinen Kernel-Baumstrukturen nicht bestanden
  • Ich ein erforderliches Commit finden, das nicht in den Kommentaren der Quelle erwähnt ist,
  • Damit die Tests Upstream-Kernel übergeben, sind größere Änderungen erforderlich
  • Sie glauben, dass die Tests zu hoch spezifiziert sind oder der Test später fehlschlägt. körner
  • Sie möchten vorhandenen Tests oder einer größeren Abdeckung weitere Tests hinzufügen. Tests durchführen.