自定义设备开发

本页面介绍了为您自己的设备设置 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, 和--apply-vbmeta`。
  • update-super:更新 super 分区。
  • if-wipe:如果指定了 wipe 操作,则有条件地运行其他组件。
  • erase %s:擦除给定的分区(只能与 if-wipe 结合使用 -> 例如,if-wipe erase cache)。

确定刷写锁定状态

如果您要为设备构建自定义 flashboot 守护程序 (flashbootd),则需要能够获取 bootloader 和 bootloader 锁定状态。getFlashLockState() @SystemApi 会传输 bootloader 状态,而 PersistentDataBlockManager.getFlashLockState() 系统 API 会返回兼容设备上 bootloader 的锁定状态。

返回值 条件
FLASH_LOCK_UNKNOWN 仅由升级到 Android 7.x 或更高版本的设备返回,如果这些设备支持刷写锁定/解锁功能,但之前不支持获取刷写锁定状态所需的 bootloader 更改。
  • 运行 Android 7.x 或更高版本的新设备必须处于 FLASH_LOCK_LOCKEDFLASH_LOCK_UNLOCKED 状态。
  • 升级到 Android 7.x 或更高版本且不支持刷写解锁/锁定功能的设备应返回 FLASH_LOCK_LOCKED 状态。
FLASH_LOCK_LOCKED 由任何不支持刷写锁定/解锁(即设备始终处于锁定状态)的设备或任何支持刷写锁定/解锁且处于锁定状态的设备返回。
FLASH_LOCK_UNLOCKED 由任何支持刷写锁定/解锁且处于解锁状态的设备返回。

制造商应测试具有锁定和解锁 bootloader 的设备返回的值。例如,AOSP 包含一个参考实现,该实现根据 ro.boot.flash.locked 启动属性返回值。示例代码位于以下目录中

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