Korzystanie z DebugFS w Androidzie 12

Urządzenia, które będą uruchamiane z Androidem 12 i używają jądra w wersji 5.4 lub nowszej, muszą być dostarczane z jądrem GKI. Aby partnerzy mogli korzystać z DebugFS w kompilacji userdebug podczas tworzenia wersji jądra GKI, konfiguracja jądra CONFIG_DEBUG_FS jest włączona w defconfig GKI. Nigdy nie montuj DebugFS w kompilacji użytkownika na urządzeniach z Androidem 12.

Wersje Userdebug mają lepsze pokrycie testów niż wersje dla użytkowników i są intensywnie testowane w trakcie całego cyklu programowania. Ten plan minimalizuje różnice między tymi 2 typami wersji pod względem dostępu DebugFS i zapewnia te korzyści:

  • Zapobieganie przypadkowemu uzależnieniu wersji kompilowanych przez użytkowników od DebugFS w przypadku nowych funkcji
  • zapewnia, że wszelkie istniejące funkcje, które nie działają z powodu braku DebugFS, są znane na wczesnym etapie cyklu rozwojowego;

Dostępy debugfs w kompilacji userdebug są podzielone na następujące kategorie:

  1. Inicjowania pliku DebugFS podczas uruchamiania urządzenia, na przykład dostępu do pliku w katalogu DebugFS w celu włączenia zbierania danych debugowania.
  2. Generowanie raportu o błędzie: interfejs HAL dumpstate odczytuje pliki DebugFS, gdy DumpstateBoard() zostanie wywołany przez dumpstate. Te informacje są częścią raportu o błędzie.
  3. testowanie i weryfikacja na konkretnym urządzeniu.

W tabeli poniżej opisano, jak te 3 kategorie są obsługiwane w Androidzie 12. Pamiętaj, że te informacje dotyczą tylko wersji w userdebug, ponieważ DebugFS nie można zamontować w wersjach dla użytkowników.

Przypadek użycia kompilacja userdebug Androida 12,
Jednorazowe inicjowanie plików DebugFS podczas uruchamiania. Ten dostęp następuje tylko raz podczas uruchamiania. Robi to interfejs Dumpstate HAL podczas inicjalizacji. Aby włączyć tę funkcję, przed zainicjowaniem HAL należy użyć init mounts DebugFS w kompilacji userdebug. Init wywołuje umount() na DebugFS po zakończeniu uruchamiania urządzenia.
Generowanie raportu o błędzie: HAL dumpstate odczytuje pliki DebugFS, które staną się częścią raportu o błędzie. Wykonywane przez moduł HAL dumpstate w ramach DumpstateBoard(), gdy zostanie wywołane przez dumpstate (DumpstateDevice.cpp). Narzędzie dumpstate (element platformy Android) zapewnia, że DebugFS zostanie zamontowany podczas wywołania.
Testowanie i weryfikowanie na konkretnych urządzeniach Adb root i shell. Zamontuj DebugFS w powłoce adb z dostępem roota1.

1 Aby zamontować DebugFS z adb shell z dostępem roota, użyj tego polecenia:

adb shell mount -t debugfs debugfs /sys/kernel/debug.

Wymagane działania partnera

W związku z tymi zmianami partnerzy muszą wprowadzić na urządzeniach z Androidem 12 następujące zmiany:

  • Wszystkie inicjalizacje węzłów DebugFS podczas uruchamiania powinny odbywać się podczas inicjalizacji HAL dumpstate. Przykładowy sposób wykonania tej czynności znajdziesz w artykule DNM: Przykład inicjalizacji plików DebugFS podczas uruchamiania.
  • Nie zezwalaj aplikacji DebugFS na dostęp podczas działania. Obowiązują te wyjątki:
    • Generowanie raportu o błędzie (pochodzi z dumpstate HAL)
    • Testowanie i weryfikacja (dostęp do nich mają adb root i shell – upewnij się, że najpierw zamontowano DebugFS).

Deweloperzy mogą ustawić trwałą właściwość debugowania persist.dbg.keep_debugfs_mounted, aby DebugFs była dostępna po ponownym uruchomieniu w przypadku kompilacji userdebug i eng.

Testy zgodności GTS sprawdzają, czy system plików DebugFS nie jest zamontowany w kompilacji użytkownika. Instrukcje Sepolicy neverallow zapewniają, że na urządzeniach z Androidem 12 lub nowszym nieautoryzowane procesy nie mają dostępu do DebugFs.