Od Androida 5.0 prawidłowe działanie stosu sieciowego Androida w jądrach Linuxa wymaga kilku zmian, które zostały stosunkowo niedawno przesłane do repozytorium głównego 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 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 hostującej maszynie 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 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 przypadku upstream, jak i w przypadku typowych 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ą 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 kontroluje 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 uruchamianie 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 uruchom:
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 sprowadza się po prostu do 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 narzędziu do śledzenia 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 źródłowych.
- 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 że w przyszłości nie będą działać na nowszych wersjach jądra.
- Chcesz dodać więcej testów lub rozszerzyć zakres istniejących testów.