Разработка индивидуальных устройств

На этой странице описаны несколько задач, которые вам может потребоваться выполнить при настройке сборки для вашего собственного устройства.

Создайте пользовательскую конфигурацию прошивки.

Инструкции Fastboot определены в файле fastboot-info.txt . Если вы собираете несколько целевых платформ, у вас будет несколько файлов fastboot-info.txt в каталоге $OUT_DIR . А переменная $ANDROID_PRODUCT_OUT указывает на самую последнюю собранную вами целевую платформу. На этой странице перечислены задачи для выполнения Fastboot, и её можно перегенерировать с помощью m fastboot_info . Вы можете добавить собственную логику прошивки, изменив файл fastboot-info.txt .

Файл fastboot-info.txt поддерживает следующие команды:

  • flash %s : Записывает данные в указанный раздел. Необязательные аргументы: --slot-other, filename_path , and --apply-vbmeta`.
  • update-super : Обновляет суперраздел.
  • if-wipe : При условии запускает другой компонент, если указана опция очистки (wipe).
  • erase %s : Удаляет указанный раздел (может использоваться только в сочетании с if-wipe -> например, if-wipe erase cache ).

Определить состояние блокировки флэш-памяти

Если вы создаёте собственный демон flashboot (flashbootd) для устройства, вам необходимо иметь возможность получать состояние загрузчика и его блокировки. Функция getFlashLockState() @SystemApi передаёт состояние загрузчика, а системный API PersistentDataBlockManager.getFlashLockState() возвращает статус блокировки загрузчика на совместимых устройствах.

Возвращаемое значение Условия
FLASH_LOCK_UNKNOWN Возвращается только устройствами, обновляющимися до Android 7.x или выше, которые ранее не поддерживали изменения загрузчика, необходимые для получения статуса блокировки прошивки, если они поддерживали возможность блокировки/разблокировки прошивки.
  • Новые устройства под управлением Android 7.x или выше должны находиться в состоянии FLASH_LOCK_LOCKED или FLASH_LOCK_UNLOCKED .
  • Устройства, обновляемые до Android 7.x или выше, которые не поддерживают прошивку для разблокировки/блокировки, должны возвращать состояние FLASH_LOCK_LOCKED .
FLASH_LOCK_LOCKED Возвращается любым устройством, которое не поддерживает автоматическую блокировку/разблокировку (то есть, устройство всегда заблокировано), или любым устройством, которое поддерживает автоматическую блокировку/разблокировку и находится в заблокированном состоянии.
FLASH_LOCK_UNLOCKED Возвращается любым устройством, поддерживающим прошивку блокировки/разблокировки и находящимся в разблокированном состоянии.

Производителям следует тестировать значения, возвращаемые устройствами с заблокированным и разблокированным загрузчиком. Например, в AOSP содержится эталонная реализация, которая возвращает значение на основе свойства загрузки ro.boot.flash.locked . Пример кода находится в следующих каталогах:

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