因为业务需要,需要对酷比魔方 u27gt 超级版 u33gt 进行 root, 试过了市面上所有的一键 root 工具, 比如 “root 大师”, “KingRoot”,”root 精灵”, 以及腾讯360百度等大公司提供的 root 工具,都不成功。
无奈,考虑手动从出厂固件里 root。 google 搜索”root 原理”, 第一条结果知乎的解答还算详细。 基本是拷贝一个 4755 权限的 su 文件到 ”/system/bin/”目录,手机端可配合 ”SuperSu”应用,adb shell 则直接命令 su 即可获取 root 权限。
google 搜索 “su download”, 找到一个su更新包的下载链接, 解压出来后, 里面包含各个cpu指令集的编译后su文件,有arm, arm64, armv7,x86等版本。查看了下酷比魔方的cpu,型号是 MTK8163, 处理器模块是ARM Cortex-A53, 查看 arm 官网的介绍, 应是 ARMv8-A, 所以选择 arm64 版本的 su。
另外也下载了下 SuperSu.apk。 google play 就有,或者其它地方下载。
然后去下载出厂固件, 然而官网的 u33gt 固件链接并不能下载, 第一天官网客服电话无人, 第二天打通了, 加入官方售后群, 提供了一个百度网盘地址,顺利下载。
固件解压后, 是个纯粹的 nand flash 刷机软件, 并没有单纯的升级包固件,由于对酷比魔方的 recovery 并不了解(这需要之后研究下)。 所以首选是把其中的 “system.img” 解压并添加 su, 再打包。
尝试使用一般的镜像工具(daemon tools, ultraiso), 并不能解压;尝试在 ubuntu 下 mount 也不行。 使用命令”file system.img” 查看显示”HIT archive data”。 网上搜索看到unpack HIT archive data, 了解了原来这是个 ubifs 文件系统的 img。 linux 内核已支持了 ubifs ,并有指令 nandsim 来模拟一个 nand 设备加载为 mtd 设备。
期间碰到问题,参考这篇博客,仍然不能解决,于是去查找 nandsim 的参数设置。
结果原因是 ”nandsim” 这个指令最多只能模拟 page size 为 4k 的 nand 设备。 而我手头的 system.img 用 ”xxd system.img | more”查看, 已经是 16k 的 page size。 参考这个文章挂载 ubi 镜像及反向制作.doc,查看”nandsim”的源码, ”nandsim.c”并无最新改动。 模拟这条路走不通了!
似乎只能去找一个 16k page size 的 mtd 设备在加载 system.img。 然而柳暗花明又一村,同事在 github 上搜索到一个 ubi_reader 项目, 可顺利解开 system.img !!
在拷贝完 su, 重新生成 ubifs 与 img 的时候, mtd-utils 工具里的 mkfs.ubifs 与 ubinize 都报错,提示 leb 超过 max. google 搜索报错提示,发现是作者在源码里定义了宏限制了 2m 的最大值。而我这个为 4m, 其实有的设置是 32m, 所以这个最大限制很不合理, 也有人提了去掉这个最大值的代码,然而作者不为所动,一大堆口舌后的结论是“限制保留,如果超过,自己改源码编译”。 于是只好下载源码, 上限改为 8m(对应的两工具头文件都需要改),自行编译。因为这个项目已有 deb 包,所以可以用 ”sudo apt-get build-dep mtd-utils”来先安装依赖,然后”make”, ”make install”。
之后重新打包镜像成功。
然而打包后的新的镜像文件 system.img 线刷进去后,并不能启动,系统自动重启到 recovery 模式。 怀疑是重新打包后文件过大, 于是调整文件“MT8163_Android_scatter.txt”里的system大小,重新刷新,结果仍然不行。
转换个思路,试图通过 adb root 指令来直接获得 root 权限。 这要修改boot.img 里的 default.prop。 使用 mtk-tools 解出官方包里的 boot.img, 在default.prop里修改 ro.debuggle 等相应属性,打包成新的 boot.img。线刷进去后, adb root 有提示, 然而 adb shell 进去后仍然不是 root 身份。 怀疑这个只在 andorid 2.0 时代才 OK。 此条路显然也走不通!
未完待续。