Seit Android 5.0 erfordert der ordnungsgemäße Betrieb des Android-Netzwerkstacks auf Linux-Kerneln eine Reihe von Commits, die relativ neu upstreamed wurden oder noch nicht upstreamed wurden. Es ist nicht einfach, die erforderliche Kernelfunktionalität manuell zu überprüfen oder die fehlenden Commits zu verfolgen. Daher stellt das Android-Team die Tests zur Verfügung, mit denen es sicherstellt, dass sich der Kernel wie erwartet verhält.
Gründe für die Ausführung der Tests
Diese Tests haben drei Hauptgründe:
- Die genaue Version des Linux-Kernels, der auf einem Gerät verwendet wird, ist in der Regel gerätespezifisch. Ohne die Tests auszuführen, ist es schwierig zu wissen, ob ein Kernel ordnungsgemäß funktioniert.
- Durch das Forward-Porting und Back-Porting der Kernel-Patches auf verschiedene Kernel-Versionen oder verschiedene Gerätetrees können subtile Probleme entstehen, die ohne die Ausführung der Tests nicht erkennbar sind.
- Für neue Netzwerkfunktionen sind möglicherweise neue Kernelfunktionen oder Kernel-Fehlerkorrekturen erforderlich.
Wenn die Tests nicht bestanden werden, verhält sich der Netzwerkstack des Geräts falsch, was zu für Nutzer sichtbaren Verbindungsfehlern führt (z. B. Trennung von WLAN-Netzwerken). Das Gerät besteht wahrscheinlich auch die CTS-Tests (Android Compatibility Test Suite) nicht.
Tests verwenden
Bei den Tests wird User-Mode Linux verwendet, um den Kernel als Prozess auf einem Linux-Hostcomputer zu starten. Geeignete Betriebssystemversionen finden Sie unter Build-Umgebung einrichten für. Das Unit-Test-Framework startet den Kernel mit einem geeigneten Festplatten-Image und führt die Tests über das Hostdateisystem aus. Die Tests sind in Python geschrieben und verwenden TAP-Schnittstellen, um das Kernelverhalten und die Socket API zu testen.
Kernel für ARCH=um kompilieren
Damit die Tests ausgeführt werden können, muss der Kernel für ARCH=um SUBARCH=x86_64 kompiliert werden. Dies ist eine unterstützte Architektur sowohl upstream als auch in den gemeinsamen Android-Kernel-Trees (z. B. android-4.4). Manchmal werden Geräte-Kernel in diesem Modus jedoch nicht kompiliert, da Gerätetrees gerätespezifischen oder hardwarespezifischen Code in gemeinsamen Dateien enthalten (z. B. sys/exit.c).
In vielen Fällen reicht es aus, dafür zu sorgen, dass hardwarespezifischer Code hinter einem #ifdef steht. In der Regel sollte dies ein #ifdef für eine Konfigurationsoption sein, die die spezifische Funktion steuert, die für den Code relevant ist. Wenn keine solche Konfigurationsoption vorhanden ist, setzen Sie hardwarespezifischen Code in #ifndef CONFIG_UML-Blöcke.
Im Allgemeinen sollte die Behebung dieses Problems in der Verantwortung des Kernel-Tree-Anbieters liegen (z. B. des Chipset- oder SoC-Anbieters). Wir arbeiten mit OEMs und Anbietern zusammen, um sicherzustellen,
dass aktuelle und zukünftige Kernel für ARCH=um
SUBARCH=x86_64 kompiliert werden, ohne dass Änderungen erforderlich sind.
Tests ausführen
Die Tests befinden sich unter kernel/tests/net/test.
Es wird empfohlen, die Tests über AOSP main auszuführen , da sie die aktuellsten sind. In einigen Fällen haben Kernel-Funktionen, die für den ordnungsgemäßen Betrieb in einer bestimmten Android-Version erforderlich sind, in der jeweiligen Version noch keine vollständige Testabdeckung. Informationen zum Ausführen der Tests finden Sie in der Kernel
Netzwerktest-README-Datei. Führen Sie im Grunde von der obersten Ebene Ihres Kernel-Trees aus:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Tests bestehen
Die Python-Quelldateien für Kernel-Netzwerktests enthalten Kommentare, in denen Kernel-Commits angegeben sind, die bekanntermaßen erforderlich sind, um die Tests zu bestehen. Die Tests sollten in den gemeinsamen Kernel-Trees bestanden werden – all
gemeinsamen Kernel-Branches android-4.4 und höher – im
kernel/common
Projekt in AOSP. Daher ist das Bestehen der Tests für einen Kernel einfach eine Frage des kontinuierlichen Mergens aus dem entsprechenden gemeinsamen Kernel-Branch.
Beiträge
Probleme melden
Melden Sie alle Probleme mit den Kernel-Netzwerktests im Android Issue-Tracker mit dem Label „Component-Networking“.
Commits dokumentieren und Tests hinzufügen
Melden Sie Probleme wie oben beschrieben und laden Sie nach Möglichkeit eine Änderung hoch, um das Problem zu beheben, wenn:
- Die Tests in den gemeinsamen Kernel-Trees nicht bestanden werden
- Sie einen erforderlichen Commit finden, der in den Quellkommentaren nicht erwähnt wird,
- um die Tests für Upstream-Kernel zu bestehen, größere Änderungen erforderlich sind
- Sie der Meinung sind, dass die Tests zu spezifisch sind oder die Tests bei zukünftigen Kerneln fehlschlagen
- Sie weitere Tests oder eine bessere Abdeckung für vorhandene Tests hinzufügen möchten.