Tworzenie niestandardowych urządzeń

Na tej stronie znajdziesz informacje o kilku zadaniach, które mogą być konieczne podczas konfigurowania kompilacji na własnym urządzeniu.

Tworzenie niestandardowej konfiguracji flash

Instrukcje dotyczące Fastboota są zdefiniowane w artefakcie o nazwie fastboot-info.txt. Jeśli tworzysz kompilację dla kilku miejsc docelowych, znajdziesz kilka plików fastboot-info.txt w $OUT_DIR. Z kolei $ANDROID_PRODUCT_OUT wskazuje najnowsze miejsce docelowe, dla którego utworzono kompilację. Ta strona zawiera listę zadań, które Fastboot ma wykonać. Można ją wygenerować ponownie za pomocą polecenia m fastboot_info. Możesz wprowadzić niestandardową logikę flashowania, modyfikując plik fastboot-info.txt.

Plik fastboot-info.txt obsługuje te polecenia:

  • flash %s: flashuje daną partycję. Opcjonalne argumenty to --slot-other,filename_path, and--apply-vbmeta`.
  • update-super: aktualizuje partycję super.
  • if-wipe: warunkowo uruchamia inny komponent, jeśli określono wyczyszczenie.
  • erase %s: czyści daną partycję (może być używane tylko w połączeniu z poleceniem if-wipe -> np. if-wipe erase cache).

Określanie stanu blokady flash

Jeśli tworzysz niestandardowego demona flashboot (flashbootd) na urządzeniu, musisz mieć możliwość uzyskania stanu programu rozruchowego i jego blokady. Interfejs getFlashLockState() @SystemApi przesyła stan programu rozruchowego , a interfejs systemowy PersistentDataBlockManager.getFlashLockState() zwraca stan blokady programu rozruchowego na zgodnych urządzeniach.

Zwracana wartość Warunki
FLASH_LOCK_UNKNOWN Zwracana tylko przez urządzenia, które są aktualizowane do Androida 7.x lub nowszego i które wcześniej nie obsługiwały zmian w programie rozruchowym wymaganych do uzyskania stanu blokady flash, jeśli obsługiwały możliwość blokowania i odblokowywania flashowania.
  • Nowe urządzenia z Androidem 7.x lub nowszym muszą być w stanie FLASH_LOCK_LOCKED lub FLASH_LOCK_UNLOCKED.
  • Urządzenia aktualizowane do Androida 7.x lub nowszego, które nie obsługują możliwości odblokowywania i blokowania flashowania, powinny zwracać stan FLASH_LOCK_LOCKED.
FLASH_LOCK_LOCKED Zwracana przez każde urządzenie, które nie obsługuje blokowania i odblokowywania flashowania (czyli urządzenie jest zawsze zablokowane), lub przez każde urządzenie, które obsługuje blokowanie i odblokowywanie flashowania i jest w stanie zablokowanym.
FLASH_LOCK_UNLOCKED Zwracana przez każde urządzenie, które obsługuje blokowanie i odblokowywanie flashowania i jest w stanie odblokowanym.

Producenci powinni testować wartości zwracane przez urządzenia z zablokowanym i odblokowanym programem rozruchowym. Na przykład AOSP zawiera implementację referencyjną, która zwraca wartość na podstawie właściwości programu rozruchowego ro.boot.flash.locked. Przykładowy kod znajduje się w tych katalogach:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java