Android如何 如何关闭 DM-verity

[DESCRIPTION]

在需要对image文件(如system.img)等进行解包->修改->打包->烧录后,可能会出现无法开机的现象。
这个问题主要是受到了DM-Verity的影响。

从P版本开始,DM-Verity由vboot1.0 更新到了 avb2.0,dm-verity 的关闭标志也从system image 的dm-verity metadata(vboot1.0) 中搬到了 vbmeta image(avb2.0)。

在vboot1.0 中,dm-verity 在eng build中默认关闭,在 userdebug/user build中默认开启。在userdebug build(不包括user load)中可以通过adb (并非 fastboot)直接关闭DM-verity而不需要先进行unlock。

在 avb2.0中, dm-verity 在所有build类型中默认开启,且只能在unlock之后才可以通过adb 或 fastboot关闭。

[SOLUTION]

解决的方法有两种(此项修改可能会导致CTS等测试无法通过,请根据实际需求使用):

1.在烧录前进行unlock操作,具体步骤请参考:

FAQ20567 替换谷歌system.img后无法开机

2.在编译前作一定的修改:

2.1 Android N之前有两种方法:

(1) 将build/target/product/verity.mk中的
PRODUCT_SUPPORTS_VERITY := true
改为:
PRODUCT_SUPPORTS_VERITY := false

(2) 在vendor/mediatek/proprietary/hardware/fstab/{platform}/fstab.in中(以vendor image为例):
/dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/vendor /vendor __MTK_VNDIMG_FSTYPE ro wait,verify,recoveryonly
将"verify"去除。

2.2 Android O中需要进行如下改动:

(1)在build/target/product/verity.mk中,将
PRODUCT_SUPPORTS_VERITY := true
PRODUCT_SUPPORTS_VERITY_FEC := true
改为 :
PRODUCT_SUPPORTS_VERITY := false
PRODUCT_SUPPORTS_VERITY_FEC := false

(2) 在/device/{mediatekprojects|mediateksample}/{Project}/ProjectConfig.mk中,将
MTK_DM_VERITY_OFF = no
改为 :
MTK_DM_VERITY_OFF = yes

(3)在/kernel/{arch|arch64}/{arm|arm64}/configs/{Project}defconfig中,将

CONFIG_DM_VERITY=y
改为 :
CONFIG_DM_VERITY=n
同时,添加:
CONFIG_MTK_DM_VERITY_OFF=y

(4)
For O0:
在system/core/fs_mgr/Android.mk 中,将
ifneq (, ( f i l t e r e n g , (filter eng, (filtereng,(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_SKIP_SECURE_CHECK=1
endif
改为:
#ifneq (, ( f i l t e r e n g , (filter eng, (filtereng,(TARGET_BUILD_VARIANT)))
LOCAL_CFLAGS += -DALLOW_SKIP_SECURE_CHECK=1
#endif

For O1:
在/system/core/fs_mgr/Android.bp中,在
product_variables: {
前面添加:
cppflags: ["-DALLOW_SKIP_SECURE_CHECK=1"],

2.3 Android P上的修改步骤:

(1)关闭preloader的 verity:
修改 preloader 的custom 文件.
以evb6765_64_emmc为例:
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/evb6765_64_emmc/evb6765_64_emmc.mk中关闭boot verify:
MTK_SEC_USBDL=ATTR_SUSBDL_DISABLE
MTK_SEC_BOOT=ATTR_SBOOT_DISABLE
配置好后重新编译下载preloader (out中的preloader_project_name_SBOOT_DIS.bin)。
至此,未签名的image就可以download 和boot了。

(2)
对于 Android P + kernel-4.4:

  • adb root
  • adb disable-verity
  • adb reboot

对于 Android P + kernel-4.9 及以上:

  • boot to Home Screen
  • go to setting -> system -> Developer options -> OEM unlocking
    按照以下cmd执行
    (PC进入cmd窗口后,先进入到platform-tools目录,因为该目录下才有fastboot.exe.以下cmd才能正常运行.对应的platform-tools位于sdk目录下)
  • 输入"adb reboot bootloader"
  • 等到画面出现"=> fastboot mode…",输入"fastboot flashing unlock"
  • 画面会出现一段文字,press volume up key
  • 画面切换到下一个选单后,输入"fastboot reboot"
    手机重启完毕后,按以下指令执行:
  • adb root
  • adb disable-verity
  • adb reboot

Android 中的 dm-verity

你可能感兴趣的:(Android,FAQ)