Wdrażanie rejestrowania dostawców o określonym zakresie

Android 11 dodaje nową warstwę HAL, IDumpstateDevice (wersja 1.1). Ta warstwa HAL udostępnia nowe metody umożliwiające węższy zakres dzienników dostawców, które są uwzględniane w standardowych raportach o błędach, a także umożliwia kompilacjom użytkowników włączanie i wyłączanie rejestrowania dostawców (wartość domyślna w przypadku kompilacji użytkownika jest wyłączona). Daje to producentom OEM większą kontrolę nad tym, co jest uwzględniane w poszczególnych typach raportów o błędach.

Ta funkcja ma wpływ na producentów OEM, jeśli zdecydują się na wdrożenie tej opcjonalnej warstwy HAL. Może to mieć wpływ na SoC, w zależności od tego, co producent OEM zdecyduje się ujawnić za pomocą tej warstwy HAL. Nie należy spodziewać się wpływu na przewoźników.

To, co umieścisz w raportach o błędach, zależy od tego, jakie informacje uznasz za przydatne do debugowania, ale ogólnie rzecz biorąc, im więcej szczegółów, tym lepiej.

Przykłady i źródło

Istnieje domyślna implementacja (przestarzałej) wersji 1.0 IDumpstateDevice, która pokazuje przykład użycia biblioteki narzędziowej dumpstate: frameworks/native/cmds/dumpstate/DumpstateUtil.h . Istnieje również implementacja mątwy HAL 1.1: device/google/cuttlefish/guest/monitoring/dumpstate_ext/* .

Kod źródłowy znajduje się tutaj:

Realizacja

Aby zaimplementować tę warstwę HAL, zaimplementuj interfejs HAL android.hardware.dumpstate@1.1::IDumpstateDevice . Istnieje wiele możliwych wartości DumpstateMode , ale prawdopodobnie nie wszystkie będą obsługiwane przez pojedyncze urządzenie (na przykład WEAR w przypadku urządzeń z systemem innym niż Wear OS).

Implementacja HAL stanu zrzutu jest opcjonalna. Wszystkie nowe urządzenia uruchamiane z systemem Android 11 MUSZĄ implementować IDumpstateDevice 1.1, jeśli implementują Dumpstate HAL. Urządzenia, które mają już zaimplementowaną wersję IDumpstateDevice 1.0 przed Androidem 11, powinny być stosunkowo łatwe w aktualizacji do wersji 1.1 i zdecydowanie zaleca się wykonanie tej czynności, ponieważ znacznie zmniejsza to ilość zewnętrznych, prywatnych informacji zawartych w raportach o błędach.

Ta funkcja zależy od podstawowych zmian stanu zrzutu zawartych również w systemie Android 11 i znajdujących się w obszarze frameworks/native/cmds/dumpstate .

Wdrożenie tej warstwy HAL będzie prawdopodobnie wymagało pewnych zmian SEPolicy w niektórych właściwościach systemu, plikach itp., aby wszystko działało w pełni, i będzie wymagało koordynacji z dostawcami w celu zrzucenia wszystkich istotnych informacji do raportów o błędach.

Dostosowywanie

Użytkownik urządzenia może włączać i wyłączać logowanie dostawcy za pomocą ustawień programisty. Gdy jest wyłączony, dumpstateBoard_1_1 może nadal generować minimalne niezbędne informacje określone przez producenta OEM. Wyłączenie rejestrowania dostawców powoduje, że IDumpstateDevice::dumpstateBoard dodaje do raportu o błędzie tylko istotne informacje, a włączenie tej opcji uwzględnia wszystkie informacje wybrane przez producenta OEM.

Można zmodyfikować dumpstate.cpp (który wywołuje metody HAL IDumpstateDevice), na przykład w celu zwiększenia limitu czasu wymaganego do zakończenia dumpstateBoard . Jednakże podstawowa logika pliku dumpstate.cpp powinna pozostać niezmieniona.

Limity czasu mogą mieć dowolną wartość, ale nie powinny radykalnie wydłużać czasu potrzebnego na ukończenie raportu o błędzie. W szczególności DumpstateMode::CONNECTIVITY jest bardzo wrażliwy na czas i musi działać tak szybko, jak to możliwe, aby zebrać wszystkie istotne dzienniki modemu/Wi-Fi/sieci.

Walidacja

Istnieje test VTS dla implementacji IDumpstateDevice i istnieją funkcjonalne testy jednostkowe dla ogólnej funkcjonalności BugreportManager .

Zalecany ręczny przypadek testowy to frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java .