[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 中的 dm-verity

Android如何 如何关闭 DM-verity相关推荐

  1. MTK Android 9.0(Android P) + kernel-4.9 默认关闭DM Verity 和secure boot 解决无法adb remount的问题

    在android P版本上执行adb remount会提示以下错误: remount of the / superblock failed: Permission denied remount fai ...

  2. android禁用应用组件,Android彻底退出(关闭)应用程序.docx

    Android彻底退出(关闭)应用程序.docx 做android开发时,发现一个关于android退出时不能彻底关闭的问题,比如:一个程序里new?出了N多个Thread,这样在退出程序的可能不能完 ...

  3. Android Studio设置关闭当前页面的快捷键ctrl+w

    Android Studio设置关闭当前标签页面的快捷键 左上角File-选择Settings- 弹出框输入Keymap-右边依次找到Main Menu-Window-Editor Tabs-Clos ...

  4. 2020-11-02 Android LOG如何关闭打开打印信息

    Android LOG如何关闭打开打印信息 一.添加头文件和定义LOG_TAG 二.system/core/include/log/log.h 三.分析上面的代码,如果不想打印log,Android. ...

  5. 如何在Android中打开/关闭相机LED /手电筒

    在本教程中,我们向您展示如何在Android中打开/关闭手机摄像头或手电筒. 查看代码段: 1.开启 camera = Camera.open();Parameters p = camera.getP ...

  6. 美版三星s7 g930 p版刷官方国际版安卓8以及手机卡信号和关闭DM服务相关问题

    看了很久没有美版单卡g930p的详细刷机教程,就随手出了一篇.首先说一下,机子是两三年前的机子了,反正好久了具体多久也记不清了,刚买来的时候是还在出note7,因为是水货美版,所以没办法跟国行的刷新走 ...

  7. android 电源管理 关闭屏幕,Android之PowerManager电源管理

    翻译来源PowerManager 这个类让你拥有控制设备状态的权利. 使用这个api类会很明显地影响设备电量的使用时长.除非你确实需要PowerManager.WakeLock否则不要轻易使用它们,并 ...

  8. android toast通知关闭,屏蔽系统通知,Toast无法显示的解决方案 v2.0.0

    为了大家方便沟通和使用,建立了一个QQ群供大家交流,欢迎大家的加入 群名称:EToast交流群 群 号:547279762 更新日志: v2.2.1(2019年5月28日10:24:41) 在2.2. ...

  9. android代码打开数据库,Android打开和关闭数据库

    与计算机编程中的许多事情一样,关闭SQLite数据库的时间没有单一的"正确进行"(如果您正在使用它,则通过SQLiteOpenHelper上的close(),否则对SQLiteDa ...

  10. android代码打开数据库,android – 如何正确关闭并重新打开Room数据库

    您好我有2个应用程序依赖于制作和恢复应用程序数据库的备份,只需将数据库文件复制到SD卡中,然后很难确定如何在关闭它之后重新打开Room Database单例以创建数据库'副本. 构建数据库: @Dat ...

最新文章

  1. zabbix监控交换机出图断断续续
  2. CSDN博客 专用备份工具
  3. 交际中你所不知道的说话的12个技巧!
  4. php 多线程处理redis,redis的多线程
  5. AJAX框架衣柜内部布局,​最合理的衣柜内部布局解析,3大细节不容小觑
  6. c语言判断化学方程式,下列是某同学写的六个化学方程式:①Mg+O2点燃.MgO2②C+O2点燃.CO...
  7. 卸载win10装Ubuntu笔记
  8. 关于指向堆的指针内涵
  9. linux系统mount命令挂载windows系统共享文件夹
  10. mysql-hash分区管理维护
  11. vuex的计算属性_vue中vuex的五个属性和基本用法
  12. 视频画面帧的展示控件SurfaceView及TextureView对比
  13. 读书行动笔记2013第2本:《整理的艺术》
  14. MTK8788,6765,通用平台的按键驱动添加
  15. 三星笔记本BIOS文件提取 三星笔记本BIOS降级
  16. JAVA中InputStream转base64
  17. jQuery选择器详细介绍
  18. 漫谈程序员(八)阿里巴巴集团合伙人花名单
  19. excel切片器_利用切片器制作动态交互图表
  20. AES 轮密钥(子密钥如何生成).md

热门文章

  1. C语言实验——简单排序
  2. 状态机编程 (一) 状态机相关概念
  3. arcgis可达性分析
  4. JVM 知识体系总结
  5. 各个国家/地区以及对应的手机区号
  6. python高级篇----网络编程与爬虫
  7. RTX 2080 Ti 刚捂热,卡皇3080Ti 就要来了?
  8. 机械加工工艺师手册_这些机械加工工艺,你见过吗?
  9. Linux小练习(2)----利用FIFO实现本地聊天室(C/S模式)
  10. edge同步chrome书签_如何通过 iCloud 同步 chromium edge 的书签?