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:
- Pliki HAL znajdują się w katalogu
hardware/interfaces/dumpstate/1.1/
. - Natywny kod stanu zrzutu, który kontroluje zawartość raportu o błędzie, znajduje się w
frameworks/native/cmds/dumpstate/
.
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
.