自定义设备开发

本页面将介绍您在为自己的设备设置 build 时可能需要执行的几项任务。

创建自定义刷写配置

fastboot 指令在名为 fastboot-info.txt 的工件中定义。如果您构建多个目标,$OUT_DIR 中会有多个 fastboot-info.txt 文件。此外,$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 会传输引导加载程序状态,PersistentDataBlockManager.getFlashLockState() 系统 API 会返回兼容设备上引导加载程序的锁定状态。

返回值 条件
FLASH_LOCK_UNKNOWN 仅升级到 Android 7.x 或更高版本且符合以下条件的设备会返回此值:设备支持刷写锁定/解锁功能,但之前不支持获取刷写锁定状态所需的引导加载程序变更。
  • 运行 Android 7.x 或更高版本的新设备必须处于 FLASH_LOCK_LOCKEDFLASH_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