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

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

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

Инструкции 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 : Условно запускает какой-либо другой компонент, если указана очистка.
  • 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