Od Androida 5.0 prawidłowe działanie stosu sieciowego Androida na jądrach Linuksa wymaga wielu zmian, które zostały stosunkowo niedawno przesłane do repozytorium upstream lub jeszcze się w nim nie znalazły. Ręczne sprawdzenie wymaganych funkcji jądra lub śledzenie brakujących commitów nie jest łatwe, dlatego zespół Androida udostępnia testy, których używa, aby mieć pewność, że jądro działa zgodnie z oczekiwaniami.
Powody przeprowadzania testów
Testy te są przeprowadzane z 3 głównych powodów:
- Dokładna wersja jądra systemu Linux używanego na urządzeniu jest zwykle specyficzna dla danego urządzenia i trudno jest stwierdzić, czy dane jądro działa prawidłowo, bez przeprowadzenia testów.
- Przenoszenie poprawek jądra do przodu i do tyłu do różnych wersji jądra lub różnych drzew urządzeń może powodować subtelne problemy, których nie da się wykryć bez przeprowadzenia testów.
- Nowe funkcje sieciowe mogą wymagać nowych funkcji jądra lub poprawek błędów jądra.
Jeśli testy nie zostaną zaliczone, stos sieciowy urządzenia będzie działać nieprawidłowo, co spowoduje widoczne dla użytkownika błędy łączności (np. rozłączanie z sieciami Wi-Fi). Urządzenie prawdopodobnie nie przejdzie też testów pakietu CTS (Android Compatibility Test Suite).
Korzystanie z testów
Testy wykorzystują User-Mode Linux do uruchamiania jądra jako procesu na maszynie hosta z systemem Linux. Odpowiednie wersje systemów operacyjnych znajdziesz w sekcji Tworzenie środowiska kompilacji. Platforma testów jednostkowych uruchamia jądro z odpowiednim obrazem dysku i przeprowadza testy z systemu plików hosta. Testy są napisane w języku Python i korzystają z interfejsów TAP, aby sprawdzać działanie jądra i interfejsu API gniazd.
Kompilowanie jądra dla ARCH=um
Aby testy mogły zostać przeprowadzone, jądro musi zostać skompilowane dla ARCH=um SUBARCH=x86_64. Jest to architektura obsługiwana zarówno w górę, jak i w drzewach wspólnego jądra Androida (np. android-4.4). Czasami jednak jądra urządzeń nie kompilują się w tym trybie, ponieważ drzewa urządzeń zawierają w plikach wspólnych kod specyficzny dla urządzenia lub sprzętu (np. sys/exit.c).
W wielu przypadkach wystarczy upewnić się, że kod specyficzny dla sprzętu znajduje się za #ifdef. Zwykle powinien to być #ifdef w opcji konfiguracji, która steruje konkretną funkcją związaną z kodem. Jeśli nie ma takiej opcji konfiguracji, umieść kod specyficzny dla sprzętu w blokach #ifndef CONFIG_UML.
Ogólnie rzecz biorąc, naprawa tego błędu powinna być obowiązkiem dostawcy drzewa jądra (np. dostawcy chipsetu lub SoC). Współpracujemy z producentami OEM i dostawcami, aby zapewnić, że obecne i przyszłe jądra będą kompilowane dla ARCH=um
SUBARCH=x86_64 bez konieczności wprowadzania zmian.
Przeprowadzanie testów
Testy są dostępne pod adresem kernel/tests/net/test.
Zalecamy przeprowadzanie testów z głównej gałęzi AOSP, ponieważ są one najbardziej aktualne. W niektórych przypadkach funkcje jądra niezbędne do prawidłowego działania w danej wersji Androida nie mają jeszcze pełnego pokrycia testami w tej wersji. Informacje o tym, jak przeprowadzać testy, znajdziesz w pliku README testu sieci jądra. W zasadzie w głównym katalogu drzewa jądra wykonaj to polecenie:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Zdanie testów
Pliki źródłowe Pythona testu sieci jądra zawierają komentarze, które określają commity jądra, które są wymagane do przejścia testów. Testy powinny być przeprowadzane w przypadku wspólnych drzew jądra – wszystkich wspólnych gałęzi jądra android-4.4 i nowszych – w projekcie kernel/common w AOSP. Dlatego przejście testów na jądrze jest po prostu kwestią ciągłego scalania z odpowiedniej gałęzi wspólnego jądra.
Współuczestnictwo
Zgłoś problemy
Zgłoś wszelkie problemy z testami sieci jądra w rejestrze problemów z Androidem, używając etykiety Component-Networking.
Dokumentowanie zmian i dodawanie testów
Zgłoś problemy w sposób opisany powyżej i w razie potrzeby prześlij zmianę, aby je rozwiązać, jeśli:
- Testy nie przechodzą w przypadku wspólnych drzew jądra.
- Znajdziesz potrzebną zmianę, która nie jest wymieniona w komentarzach do źródła.
- Aby testy na jądrach upstream zakończyły się pomyślnie, konieczne są duże zmiany.
- Uważasz, że testy są zbyt szczegółowe lub nie powiodą się w przyszłych wersjach jądra.
- Chcesz dodać więcej testów lub zwiększyć zakres istniejących testów.