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:
- Die genaue Version des auf einem Gerät verwendeten Linux-Kernels sind normalerweise gerätespezifisch und es ist schwierig, ohne Tests ordnungsgemäß funktioniert.
- 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.
- 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.