Urządzenia uruchamiane z systemem Android 12 i wersją jądra wyższą niż v5.4 muszą być dostarczane z jądrem GKI. Aby partnerzy mogli uzyskać dostęp do DebugFS
w kompilacjach userdebug podczas programowania na jądrze GKI, konfiguracja jądra CONFIG_DEBUG_FS
jest włączona w GKI defconfig. Nigdy nie montuj DebugFS
w kompilacjach użytkowników dla urządzeń uruchamianych na Androidzie 12.
Kompilacje debugowania użytkownika mają lepszy zasięg testów niż kompilacje użytkowników i są intensywnie testowane w całym cyklu programowania. Poniższy plan minimalizuje różnicę między dwoma typami kompilacji w odniesieniu do dostępu do DebugFS
i zapewnia następujące korzyści:
- Zapobiega przypadkowemu uzależnieniu kompilacji userdebug od
DebugFS
w celu uzyskania nowych funkcjonalności - Zapewnia, że każda istniejąca funkcjonalność, która została uszkodzona z powodu braku DebugFS, jest znana na wczesnym etapie cyklu rozwojowego
Dostępy Debugfs w kompilacjach userdebug są podzielone na następujące kategorie:
- Inicjalizacja pliku
DebugFS
podczas uruchamiania urządzenia, na przykład dostęp do zapisu do pliku wDebugFS
w celu włączenia zbierania danych debugowania. - Generowanie raportu o błędach: HAL stanu zrzutu odczytuje pliki
DebugFS
, gdyDumpstateBoard()
jest wywoływana przezdumpstate
. Informacje te stają się częścią raportu o błędzie. - Testowanie i walidacja specyficzne dla urządzenia.
W poniższej tabeli opisano, jak każda z tych trzech kategorii jest obsługiwana w systemie Android 12. Należy pamiętać, że poniższe informacje dotyczą tylko kompilacji userdebug, ponieważ DebugFS
nie można zamontować w kompilacjach użytkownika.
Przypadek użycia | Kompilacja debugowania użytkownika Androida 12 |
---|---|
Jednorazowa inicjalizacja plików DebugFS podczas uruchamiania . Dostęp ten ma miejsce tylko raz podczas rozruchu. | Dumpstate HAL wykonuje to podczas inicjalizacji HAL. Aby to umożliwić, init montuje DebugFS w kompilacjach userdebug przed inicjalizacją warstwy HAL. Init wywołuje umount() na DebugFS , gdy urządzenie zakończy uruchamianie. |
Generowanie raportu o błędzie : stan zrzutu HAL odczytuje pliki DebugFS , które stają się częścią raportu o błędzie. | Wykonywane przez HAL stanu zrzutu w ramach DumpstateBoard() po wywołaniu przez stan zrzutu ( DumpstateDevice.cpp ). Narzędzie dumpstate (część platformy Android) gwarantuje, że DebugFS zostanie zamontowany podczas wywołania. |
Testowanie i walidacja specyficzne dla urządzenia | Korzeń Adb i powłoka. Zamontuj DebugFS z powłoki adb z dostępem do roota 1 . |
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 oparciu o te zmiany na urządzeniach z Androidem 12 partnerzy muszą wprowadzić następujące zmiany:
- Spraw, aby wszystkie inicjalizacje węzłów
DebugFS
miały miejsce podczas inicjalizacji HAL stanu zrzutu. Aby zapoznać się z przykładem, jak to zrobić, zobacz DNM: Przykład inicjalizacji plikówDebugFS
w czasie rozruchu . - Nie zezwalaj na dostęp do
DebugFS
w czasie wykonywania. Obowiązują następujące wyjątki:- Generowanie raportu o błędach (pochodzi ze stanu zrzutu HAL)
- Testowanie i sprawdzanie poprawności (dostępne przez
adb root
ishell
- upewnij się, że DebugFS jest zamontowany jako pierwszy)
Deweloperzy mogą ustawić trwałą właściwość debugowania persist.dbg.keep_debugfs_mounted
, aby zachować zamontowanie DebugFs
po ponownym uruchomieniu kompilacji userdebug i eng.
Testy zgodności GTS zapewniają, że system plików DebugFS
nie jest zamontowany w kompilacjach użytkowników. Instrukcje Sepolicy neverallow
zapewniają, że na urządzeniach uruchamianych w systemie Android 12 lub nowszym nieautoryzowane procesy nie uzyskają dostępu do DebugFs
.