记一次失败的把 rwProcMem33 编译进 MI MIX2 内核的尝试
故事的开头
故事的开始总是这样,猝不及防。
事情的起因只是想要使用 stackplz 而不得,平替工具也只找到 rwProcMem33,所以就打算自己把 rwProcMem33 编译进内核
如果是 pixel 设备的话,可以参考这两篇文章在内核嵌入 rwProcMem33:
将rwProcMem33编译进安卓内核
Pixel5 内核编译并嵌入rwProcMem33
我测试机是小米设备,一台 MI MIX2(内核 4.4),一台 MI 11 Lite(内核 5.4),都达不到 stackplz 对内核版本 5.10+ 的要求
以下内容是用 MI MIX2 这个设备来做的实验
新的想法
“要不要试试 LineageOS”
“那是什么”
最开始以为小米没有开源内核,就选择了换成开源的 LineageOS 系统
我的测试机之前装过 twrp ,所以就用的 twrp 来刷的,参考小米手机刷入 LineageOS 教程
与设备适配的 LineageOS 镜像就在官网找到,把最新的系统镜像,boot.img 和 recovery.img 都下载了
小插曲
以后应该再也不会像上次那样局促了。
说起 twrp,又想起之前刷机先是跟着一篇错误的文章试后面又被 ai 骗了的经历,唉,现在想想其实当时自己根本还没搞清楚 twrp 是什么(其实就是方便刷机的第三方 recovery),甚至对 rom,rec,fastboot 等等这些概念都模糊不清,其实还是因为没亲手搞过,当真正自己上手的时候很多东西很容易就明白了
TWRP 下载网址
刷入 TWRP 官方教程
使用 TWRP 刷 MIUI 开发版方法
泥嚎,LineageOS
初次见面,请多指教。
准备源码
lineageos wiki 的 device 里面可以看到详细的设备信息,Kernel Version 后面也贴了内核源码
先尝试不嵌入 rwProcMem33 编译内核,我是选择在 wsl 里面编译的
网上编译 LineageOS 内核的博客也不多,试了几种方式最后让我成功编译的是参考这篇文章 lineageos_simple_kernel_build,it’s super useful!
先把内核源码克隆下来
1 | |
准备工具链
在 https://github.com/LineageOS/android 选择构建内核对应的 linegasos 版本,然后在 snippets/lineage.xml 中搜索 prebuilts/ 找到需要的工具链,把它们拉下来
1 | |
编译内核
记录下所有准备文件所在的目录并进入内核源码目录
1 | |
清除所有内容,包括删除任何旧的内核配置文件(Mr. Proper 其实是英国清洁用品品牌)
1 | |
指定输出目录,之后构建内核时,结果文件都位于 $KERNEL_NAME/out
1 | |
在 $KERNEL_NAME/arch/arm64/configs 目录下找到设备内核对应的配置文件,我的是 msm-perf_defconfig,然后生成新的内核配置
ps: 获取内核版本 cat /proc/version 或者 uname -r
1 | |
记录每个工具链的路径
1 | |
最后编译内核
1 | |
成功编译后生成的 img 文件在 out/arch/arm64/boot/ 目录下

替换内核
参考Android 搞机之编译 lineageOS 内核
下载 AnyKernel3
1 | |
编辑 anykernel.sh 文件
1 | |
将编译成功的内核 Image 文件复制到 AnyKernel3 根目录下
将 Anykernel3 根目录下的所有文件打包成 zip 压缩包
1 | |
用 twrp 刷入 Anykernel.zip,重启系统
这里我用 twrp 卡刷失败了,貌似是因为现在刷入的 rom 是安卓 15,之前下载的 twrp 是对应安卓 9 的,然后我又给手机刷了 Lineageos 的原厂 rec, 参考LineageOS刷机教程
手机关机状态下,按住 音量下 + 电源键 进入 fastboot 模式
1 | |
进入 LineageOS recovery 模式
1 | |
选择 Apply update
因为我没插外置 sd 卡,就选择 adb sideload,但是我选了之后电脑端识别不到设备,最后是用搞机助手刷上去的
到这里本应该完美结束,但是实际上我刷入后手机黑屏,进不了系统,啊啊啊可恶,不过大概率是编译内核时为了修报错改源码出了问题
编译过程中遇到的报错,试了好几种方式要么没效果要么产生新的报错,后面 ai 给的提议说问题函数不影响功能让直接注释掉,有点离谱了、、、虽然这样确实能过编译这关,不过也可想而知刷机黑屏的原因了
列一下报错吧
报错1:
1 | |
报错2:
1 | |
忘记了…
我当时做的时候忘记先把不嵌入 rwProcMem33 编译出的内核刷进去测试了,还尝试了把 rwProcMem33 嵌入编译
嵌入 rwProcMem33
在内核源码的 drivers 目录下新建 rwProcMem33 目录,里面放入 hwBreakpointProcModule 和 rwProcMem33Module 文件夹,然后分别修改 hwBreakpointProcModule\hwBreakpointProc_module\ver_control.h 和 rwProcMem33Module\rwProcMem_module\ver_control.h
修改 ver_control.h
把里面的 MY_LINUX_VERSION_CODE 切换到自己内核对应的版本

修改 drivers/Makefile
在 drivers/Makefile 添加
1 | |
byebye warning
修改内核源码根目录下的 Makefile,在-Wno-format-security 后加上一个 -w 参数,忽略编译警告

同上
接着就和上文一样的步骤进行编译了

替换内核,刷入手机,黑屏进不了系统(叹气)
故事的结尾
好像全都白干了。
等等,不是结尾??!
周六晚上本来也打算就此放弃了,犹豫之后和其他师傅交流了下得到了新的思路,去了解了下适配小米系统的潘多拉内核,但是查找资料之后发现刷这个内核也是要与手机内核版本对应的,比如 5.10.z 就只能下载刷入 5.10.z 的内核,5.15.z 就只能下载刷入 5.15.z的内核;

没有办法实现从高版本到低版本的替换
另外的路
没路了怎么办,像索隆一样用剑劈一条出来。
骗你的,其实自己根本劈不开(哭了
接着是另外一条路,小米mix2ksu以及如何去修补
尝试了把这篇文章里面的 kernelsu 刷进去,小米官方的 MIX2 的 ROM 最高版本是安卓 9,上面文章中测试成功的是 安卓 11,担心适配问题,就去找了个魔改的安卓 11 的 ROM 和适配的 twrp 重新刷上去
ps:小米官方镜像网站下载无敌慢,在 https://miuiver.com/ 这个网址下会快很多
刷入 kernelsu 后,看到内核版本依旧是 4.4.302,并没有提升
然后在酷安和 XDA 上翻了个遍,企图找到有无民间大佬编译好的适配设备的 5.10+ 内核,看到半夜,发现是条死路,无。
后面又在想要试着编译小米官方内核,它是有开放源码的Xiaomi_Kernel_OpenSource ,但是当我尝试把官方 ROM 重新刷进去失败的时候,突然有点不太想继续了,凭借着现在的能力,想要成功编译出一个能用的 5.10+ 内核几乎不太可能,因为都没深入学过内核方面的知识,遇到报错基本上也是参考 ai 给的解决方式,出错的机率太大,不确定性太多,不想让沉没成本继续增加了,就此收手。
还会再见吗
故事的结局是?
没有结局。
研究了大半周最后好像只能买台 pixel 6 来解决问题,哈哈。
至于为什么还要把这个失败的经历写出来,可能是宽慰自己并非毫无收获的借口(?)我哭了虽然好像确实没学到太多东西
或者希望等到有更多储备之后再来回看或者继续尝试吧。
又或者,想记录下过程中情绪的起起伏伏,会为有新的想法感到无比兴奋,又可以怀揣着希望睡觉了,狠狠期待第二天接着折腾,也会因为探索中的不顺利生气和难受,可恶啊,最后是平静的放弃了,emm,暂且放弃。
好像体验到了和打 CTF 拿 flag 不一样的神奇感觉。
不是一个迷茫的逆向手了。至少最近不是。