Od Androida 5.0 prawidłowe działanie warstwy sieciowej Androida w jądrach Linuksa wymaga kilku zatwierdzonych w górę commitów, które zostały przesłane w górę stosunkowo niedawno lub jeszcze nie zostały przesłane. Ręczne sprawdzanie wymaganych funkcji jądra lub śledzenie brakujących zatwierdzeń jest trudne, dlatego zespół Androida udostępnia testy, których używa do sprawdzania, czy jądro działa zgodnie z oczekiwaniami.
Powody przeprowadzania testów
Te testy są przeprowadzane z 3 głównych powodów:
- Dokładna wersja jądra Linuksa używana na urządzeniu jest zazwyczaj specyficzna dla danego urządzenia i trudno jest stwierdzić, czy jakiekolwiek jądro działa prawidłowo bez wykonywania testów.
- Przenoszenie poprawek do jądra do przodu lub do tyłu w różnych wersjach jądra lub na różnych drzewach urządzeń może spowodować drobne problemy, które mogą być niemożliwe do wykrycia bez przeprowadzania testów.
- Nowe funkcje sieciowe mogą wymagać nowych funkcji jądra lub poprawek błędów jądra.
Jeśli testy nie zostaną zaliczone, moduł sieciowy urządzenia będzie działał nieprawidłowo, powodując widoczne dla użytkownika problemy z połączeniem (np. utratę połączenia z sieciami Wi-Fi). Urządzenie prawdopodobnie nie przejdzie też testów Compatibility Test Suite (CTS) dla Androida.
Korzystanie z testów
Testy korzystają z Linuxa w trybie użytkownika, aby uruchomić jądro jako proces na maszynie-hoście z Linuksem. Aby dowiedzieć się, które wersje systemów operacyjnych są odpowiednie, przeczytaj artykuł Konfigurowanie środowiska kompilacji. Platforma testów jednostkowych uruchamia jądro za pomocą odpowiedniego obrazu dysku i przeprowadza testy z poziomu systemu plików hosta. Testy są napisane w Pythonie i korzystają z interfejsów TAP do testowania działania jądra i interfejsu Socket API.
Kompilowanie jądra dla ARCH=um
Aby testy mogły się uruchomić, jądro musi zostać skompilowane dla ARCH=um SUBARCH=x86_64
. Jest to obsługiwana architektura zarówno w górę strumienia, jak i w ramach wspólnych drzew jądra Androida (np. android-4.4
). Czasami jednak jądra urządzeń nie kompilują się w tym trybie, ponieważ drzewa urządzeń zawierają kod specyficzny dla urządzenia lub sprzętu w wspólnych plikach (np. sys/exit.c
).
W wielu przypadkach wystarczy, że kod dla sprzętu będzie dostępny w ramach #ifdef
. Zwykle powinna to być opcja #ifdef
w opcji konfiguracji, która kontroluje konkretną funkcję związaną z kodem. Jeśli nie ma takiej opcji konfiguracji, umieść kod dla konkretnego sprzętu w blokach #ifndef CONFIG_UML
.
Zazwyczaj naprawa powinna należeć do dostawcy drzewa jądra (np. dostawcy chipsetu lub SoC). Współpracujemy z producentami OEM i dostawcami, aby zapewnić kompilację obecnych i przyszłych wersji jądra na potrzeby ARCH=um
SUBARCH=x86_64
bez konieczności wprowadzania zmian.
Przeprowadzanie testów
Testy są dostępne pod adresem kernel/tests/net/test
.
Zalecamy uruchamianie testów z AOSP głównego, ponieważ są one najbardziej aktualne. W niektórych przypadkach funkcje jądra, które są niezbędne do prawidłowego działania w danej wersji Androida, nie są jeszcze w pełni objęte testami w danej wersji. Informacje o przeprowadzaniu testów znajdziesz w pliku README testu sieci jądra. Na górze drzewa jądra wykonaj:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Zdać testy
Pliki źródłowe Pythona testu sieci jądra zawierają komentarze, które wskazują na powiązane z jądrem commity, które są wymagane do zaliczenia testów. Testy powinny przejść w ramach wspólnych drzew jądra (wszystkie gałęzie wspólnego jądra android-4.4
i nowsze) w projekcie kernel/common
w AOSP. Dlatego zaliczenie testów jądra to po prostu ciągłe scalanie z odpowiednią gałęzią wspólnego jądra.
Współuczestnictwo
Zgłoś problemy
Zgłaszaj wszelkie problemy z testami sieciowymi jądra w rejestrze problemów z Androidem z oznaczeniem Component-Networking.
Dokumentowanie zatwierdzeń i dodawanie testów
Zgłaszaj problemy w sposób opisany powyżej i w miarę możliwości prześlij zmiany, aby rozwiązać problem, jeśli:
- Testy nie przechodzą w przypadku wspólnych drzew jądra
- znajdziesz niezbędny commit, który nie jest wymieniony w komentarzach źródłowych,
- Aby testy przeszły na jądrach upstream, konieczne są duże zmiany.
- uważasz, że testy są zbyt szczegółowe lub że testy nie działają w przypadku przyszłych wersji jądra;
- Chcesz dodać więcej testów lub rozszerzyć zakres dotychczasowych testów.