MTK-Android12-Android13-挂载-root & remount实现

MTK-Android12-Android13-挂载-remount实现

文章目录

  • 前言-需求
  • 一、参考资料
  • [二、 实际效果](#二、 实际效果)
  • [三、root 和 remount 相关知识点](#三、root 和 remount 相关知识点)
    • 核心定义
      • [1. Root(获取 root 权限)](#1. Root(获取 root 权限))
      • [2. Remount(重新挂载分区)](#2. Remount(重新挂载分区))
    • 核心区别
    • 典型使用场景
      • [(一)仅用到 Root(无需 remount)](#(一)仅用到 Root(无需 remount))
      • [(二)Root + Remount 配合使用(MTK 固件定制 / 系统修改核心场景)](#(二)Root + Remount 配合使用(MTK 固件定制 / 系统修改核心场景))
    • 个人理解
  • 四、涉及到修改文件
  • 五、修改方案-实战
    • [关闭 boot 签名 + 关闭系统分区校验 + 关闭纠错](#关闭 boot 签名 + 关闭系统分区校验 + 关闭纠错)
      • [1. PRODUCT_SUPPORTS_BOOT_SIGNER := false](#1. PRODUCT_SUPPORTS_BOOT_SIGNER := false)
      • [2. PRODUCT_SUPPORTS_VERITY := false](#2. PRODUCT_SUPPORTS_VERITY := false)
      • [3. PRODUCT_SUPPORTS_VERITY_FEC := false](#3. PRODUCT_SUPPORTS_VERITY_FEC := false)
      • 三者关系
    • [全局强制关闭 dm‑verity 分区校验](#全局强制关闭 dm‑verity 分区校验)
      • [MTK_DM_VERITY_OFF 宏控制范畴](#MTK_DM_VERITY_OFF 宏控制范畴)
        • [MTK_DM_VERITY_OFF = yes](#MTK_DM_VERITY_OFF = yes)
        • [MTK_DM_VERITY_OFF = false](#MTK_DM_VERITY_OFF = false)
      • [MTK_DM_VERITY_OFF和 PRODUCT_* 的关系](#MTK_DM_VERITY_OFF和 PRODUCT_* 的关系)
  • 总结

前言-需求

  • 自己之前做了很多年很多RK相关的整机产品,在 RK4.4-RKAndroid11,都是工控相关产品,需要什么权限自己无论开发应用还是开发系统都是随便操作,但是现在在做MTK 相关平台后,remount 操作异常艰难。
  • MTK 平台客户在排除手机产品之外,很多客户也是在用MTK平台做消费电子相关产品,越来越多客户也用MTK平台做工控产品了。
  • 在实际提供客户支持的时候,大家对挂载 remount 操作越来越多了,这里就给出自己实战解决方案

一、参考资料

android dm-verity 功能【转】

Android/Linux的FEC浅析
android 12 bootchar 开启 转载

Android如何 如何关闭 DM-verity
MTK_DM_VERITY_OFF
MTKClient项目中解决dm-verity校验错误的深度解析
开机默认关闭VERITY, 可以adb remount

二、 实际效果

如下,看实际是挂载 remount 成功了,具体操作验证我就不举例说明了:

发现开机时候还有提醒,说明已经remont 成功了的:

三、root 和 remount 相关知识点

这里穿插讲一讲 , 稍微梳理一下 root remount 的知识点,方便理解知识。

核心定义

1. Root(获取 root 权限)

  • 本质:拿到系统 UID=0 超级管理员身份,是进程权限。
  • 安卓默认普通应用 Shell shell 权限(UID 2000),权限受限;root 后拥有系统最高执行权限,可调用所有系统接口、读写任意文件、杀系统进程、修改系统服务。
  • MTK 原生出厂默认关闭 root,分:临时 root、永久 rootMTK 原厂工程 root

2. Remount(重新挂载分区)

  • 本质:修改分区挂载属性,是文件系统读写权限,和身份权限无关。
  • 安卓系统分区默认挂载规则:
java 复制代码
/system、/vendor、product、odm 等系统分区 默认只读 (ro)
remount rw:把只读分区重新挂载为可读写 (rw)
remount ro:切回只读
  • 关键:普通 shell 权限无法执行 remount,绝大多数场景必须先 root。

核心区别

维度 Root Remount
作用对象 进程 / 账号执行权限 磁盘分区读写属性
依赖关系 独立权限,可单独存在 多数分区 remount 依赖 root 权限
生效范围 整个 Shell/APP 拥有最高执行权 仅修改指定分区能否写入
能否改系统文件 有权限,但分区只读依然写不进 分区变可写,但无 root 仍无法写入
重启后状态 临时 root 重启失效;永久 root 保留 绝大多数机型 remount 重启恢复 ro

典型使用场景

(一)仅用到 Root(无需 remount)

  • 抓取完整系统日志、内核日志 dmesglogcat -b all
  • 查看 / 终止系统进程、调试 APP 后台行为
  • 读写/data分区(用户数据区,默认 rw,不需要 remount
  • 调试 MTK 硬件模块:射频、摄像头、LCDTP、传感器等工程指令
  • 导出整机分区镜像、备份 userdata

(二)Root + Remount 配合使用(MTK 固件定制 / 系统修改核心场景)

  • 替换系统内置 APK / 删预装应用
  • 修改 /system/app、/system/priv-app
  • 修改系统配置文件
java 复制代码
build.prop(机型名、分辨率、参数开关)
MTK 专属配置:mtk_*.conf、init*.rc、权限文件 etc/permissions
  • 替换系统库、驱动 so、bin 可执行文件
  • /system/lib、/system/bin、/vendor/lib
  • 修改开机动画、默认铃声、系统资源
  • 调试 SELinux 权限、修改文件归属 / 权限 chmod/chown
  • 临时关闭系统原生校验、调试开机自启服务

个人理解

  • root 其实很重要,给了我们很大权限,日常的拉取文件、查看文件权限、查看目录权限、操作命令、执行可执行文件 等;
  • remount给了你所有权限,替换各种分区文件、系统文件、增删查改都给了你所有权限,当然风险并存。 对于 实际开发中快速验证问题提供了绝佳的便利条件,但是 不意味正式量产版本也可以这么搞,那就需要实际适配等、放权,还涉及到SELinux 相关知识点了。

四、涉及到修改文件

java 复制代码
\vendor\mediatek\proprietary\bootable\bootloader\lk\project\k69v1_64_k419.mk
\device\mediateksample\k69v1_64_k419\ProjectConfig.mk
\build\make\target\product\verity.mk

五、修改方案-实战

关闭 boot 签名 + 关闭系统分区校验 + 关闭纠错

路径:\vendor\mediatek\proprietary\bootable\bootloader\lk\project\k69v1_64_k419.mk

修改如下,属性值设置为false

java 复制代码
PRODUCT_SUPPORTS_BOOT_SIGNER := false
PRODUCT_SUPPORTS_VERITY := false
PRODUCT_SUPPORTS_VERITY_FEC := false

1. PRODUCT_SUPPORTS_BOOT_SIGNER := false

  • 作用:控制是否支持boot.img 签名工具(boot_signer)。
  • 设为 true:编译时会用官方密钥对boot.img做数字签名;开机时 Bootloader 校验签名,非法 / 修改过的 boot.img 直接拒绝启动。
  • 设为 false:不签名、不校验;你可以随便改 boot.img(比如植入 su、修改 kernel、关闭 dm-verity),直接刷入就能开机,不会报签名错误。
  • MTK 场景:工程机 / 调试版本必关,否则 root 或改 boot 会直接卡第一屏。

2. PRODUCT_SUPPORTS_VERITY := false

  • 作用:控制是否开启 dm-verity(设备映射完整性校验),保护 /system、/vendor 等只读分区。
  • 设为 truesystem 分区会生成哈希树(hash tree),每个 4K 块都有 SHA256 哈希,开机内核逐块校验;只要有一个字节被修改(root、替换 APK、改 build.prop),校验失败→直接 I/O 错误、系统崩溃或卡开机。
  • 设为 false:关闭 dm-verity 校验;root remount rw /system 可以随意修改系统文件,不会触发校验失败。

3. PRODUCT_SUPPORTS_VERITY_FEC := false

  • 作用:控制是否开启 FECForward Error Correction,前向纠错),是 dm-verity 的增强容错选项。
  • 设为 true:在dm-verity哈希树基础上,额外生成冗余纠错数据;能自动修复少量物理坏块 / 轻微篡改,不影响开机。
  • 设为 false:不生成纠错数据;只要 dm-verity 检测到错误,直接报错,不尝试修复。
    依赖:必须VERITY=true才有效;你这里三个都 falseFEC 自然不生效。
  • MTK 场景:量产机偶尔开启提升稳定性;调试机直接关闭,减少编译体积和复杂度。

三者关系

  • BOOT_SIGNER:管 boot.img 签名与校验(防内核 /boot 篡改)。
  • VERITY:管system/vendor分区哈希校验(防系统文件篡改)。
  • VERITY_FEC:给 VERITY 加纠错能力(容错)。

全局强制关闭 dm‑verity 分区校验

修改路径:\vendor\mediatek\proprietary\bootable\bootloader\lk\project\k69v1_64_k419.mk \device\mediateksample\k69v1_64_k419\ProjectConfig.mk

修改内容:MTK_DM_VERITY_OFF = yes

MTK_DM_VERITY_OFF = yes 就是在 MTK 平台全局强制关闭 dm‑verity 分区校验,让你能直接 remount rw /system、改系统文件、root 不卡机。

MTK_DM_VERITY_OFF 宏控制范畴

MTK_DM_VERITY_OFF = yes
  • LKbootloader)、kernelfstab 里都会走 "关闭 dm‑verity" 逻辑
  • 开机不生成 system/vendor 的哈希树
  • fstab 里自动去掉 verify 标记
  • 系统分区可直接 remount rw,不改 boot、不关 AVB 也能改 system
MTK_DM_VERITY_OFF = false
  • 正常开启 dm‑verity
  • system 被改就报 corrupted、卡开机或弹窗警告

MTK_DM_VERITY_OFF和 PRODUCT_* 的关系

PRODUCT_* 它们是 Android 原生层开关;而 MTK_DM_VERITY_OFF MTK 硬件/bootloader层开关。

层面 原生 Android MTK 平台 效果
Boot 签名 PRODUCT_SUPPORTS_BOOT_SIGNER=false - 可改 boot.img
分区校验 PRODUCT_SUPPORTS_VERITY=false MTK_DM_VERITY_OFF=yes system 可写、无校验
纠错 PRODUCT_SUPPORTS_VERITY_FEC=false - 不做冗余校验
  • 只关 PRODUCT_SUPPORTS_VERITY:有时在 MTK 上不彻底,还会被 LK/kernel
  • 只设 MTK_DM_VERITY_OFF=yes:原生层没关的话,编译可能仍会生成部分校验数据
  • 工程机标准做法:两边都关

总结

这里是根据自己的项目经验,总结的 MTK 平台挂载 实战案例,具有一定的参考价值。