Android如何 如何关闭 DM-verity
奔跑的男人 · 2989浏览 · 发布于2019-10-10 +关注

[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 (,(filtereng,(filter eng,(filtereng,(TARGET_BUILD_VARIANT)))

LOCAL_CFLAGS += -DALLOW_SKIP_SECURE_CHECK=1

endif

改为:

#ifneq (,(filtereng,(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下vulkan与opengles纹理互通

talkchan · 437浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 1362浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 489浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 394浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页