MTK-Android12-Android13-挂载-remount实现
文章目录
- 前言-需求
- 一、参考资料
- [二、 实际效果](#二、 实际效果)
- [三、root 和 remount 相关知识点](#三、root 和 remount 相关知识点)
- 四、涉及到修改文件
- 五、修改方案-实战
-
- [关闭 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/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、永久root、MTK原厂工程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)
- 抓取完整系统日志、内核日志
dmesg、logcat -b all - 查看 / 终止系统进程、调试
APP后台行为 - 读写
/data分区(用户数据区,默认rw,不需要remount) - 调试 MTK 硬件模块:射频、摄像头、
LCD、TP、传感器等工程指令 - 导出整机分区镜像、备份
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等只读分区。 - 设为
true:system分区会生成哈希树(hash tree),每个4K块都有SHA256哈希,开机内核逐块校验;只要有一个字节被修改(root、替换APK、改build.prop),校验失败→直接I/O错误、系统崩溃或卡开机。 - 设为
false:关闭dm-verity校验;root后remount rw /system可以随意修改系统文件,不会触发校验失败。
3. PRODUCT_SUPPORTS_VERITY_FEC := false
- 作用:控制是否开启
FEC(Forward Error Correction,前向纠错),是dm-verity的增强容错选项。 - 设为
true:在dm-verity哈希树基础上,额外生成冗余纠错数据;能自动修复少量物理坏块 / 轻微篡改,不影响开机。 - 设为
false:不生成纠错数据;只要dm-verity检测到错误,直接报错,不尝试修复。
依赖:必须VERITY=true才有效;你这里三个都false,FEC自然不生效。 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
LK(bootloader)、kernel、fstab里都会走 "关闭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 平台挂载 实战案例,具有一定的参考价值。