RedmiNote9-5G刷LineageOS思路与踩坑

由于之前的主力机因为本人给手机换尾板的时候不知原因修坏了无法再使用,于是只能从家里人那边再要一台旧手机来刷机。

巧合的是,这台旧手机正好和之前的主力机是同款型号,我想起来之前刷机遇到的各种坑,于是决定这次刷机的时候再顺便整理下做个分享。

写在前面

由于之前的主力机因为本人给手机换尾板的时候不知原因修坏了无法再使用,于是只能从家里人那边再要一台旧手机来刷机。

巧合的是,这台旧手机正好和之前的主力机是同款型号,我想起来之前刷机遇到的各种坑,于是决定这次刷机的时候再顺便整理下做个分享。

第一步:解锁手机

给小米手机刷机的步骤,自然而然是解锁手机。

不过说实话,小米解锁手机的流程最麻烦的步骤还是要等待一个星期的冷静期才能解锁。

要解锁小米手机,第一步是在小米官网下载专用的解锁工具。

不过由于解锁工具对Linux,尤其是我这种非主流的Guix系统支持很差的缘故,我只能用家里人的那台低配的Windows系统来做解锁操作。

下载好解锁工具后,一般是先在小米手机上开启开发者模式,然后开启允许OEM解锁,并给设备绑定小米帐号。

然后,先用手机的验证码或输入帐号和密码登陆解锁工具。

接着,关闭手机,并按住手机的音量下键+开机键重启手机来进入到fastboot模式。

这时候再将数据线接入到电脑,然后点解锁,就会显示正在解锁中了……

不过,当我做完这一步,进度达到20%左右的时候,突然提示:

不好意思,请等待168小时后解锁。

纳尼?好不容易准备好立刻装机了,你这是什么意思?

好吧,于是抱着期待的我,确实等了大概一个星期,最后插上数据线,终于成功解锁了小米手机。

oh,yeah,恭喜,完成这一步之后,算是完成了最难的一步,之后的步骤就自由了。

第二步:选操作系统

特地将选操作系统作为这一步,是因为我之前刷机确实才踩过几次这个坑,导致手机刷完变砖头只能重刷。

一般小米手机刷机都会刷LineageOS,LineageOS Wiki上就有列出来它们支持的全部机型,但这些列出的机型里,唯独没有我所有的这款RedmiNote9 5G的机型。

我当时找半天没找到,思考了一下,既然有RedmiNote9和RedmiNote9 5G Pro的机型的刷机包,那么这些机型架构总不会差别太大吧,难不成还能刷砖?

结果我试了下这两个刷机包,不出意外,真的刷砖了。

最后我经过漫长的互联网搜索,终于找到了适配这个机型的刷机包,Cannon,虽然这个刷机包支持的lineageos版本最多支持到20,算是比较老的版本了,没有最新版本的支持,但是至少这玩意是这个机型目前已知唯一能刷机的折中方案了。

第三步:配置adb环境

由于我个人用的操作系统是比较特别的Guix系统,因此在刷机前还需要给自己操作系统额外配置一些ADB的刷机环境。

虽然guix有封装adb的包,但是由于Guix的非标准问题,似乎一般情况下使用adb也没法正常读取连接的设备。

于是为了解决这个问题,我再次搜索万能的互联网,最终找到了这个方案:android-udev-rules

为了将这个方案写入我的guix配置中,我写了如下代码适配。

(services

,(list

(udev-rules-service 'android-udevrules android-udev-rules)

(udev-rules-service 'android-edl

(udev-rule "52-edl.rules"

(string-append [对应规则])))

(udev-rules-service 'android-mtk

(udev-rule "53-mtk.rules"

(string-append [对应规则])))))

其中[对应规则]部分省略了,实际上就是将android-udev-rules中的对应文件里面的udev规则逐条复制并根据实际需要修改了下写进我的guix配置中了。

这样adb环境部分也算配置完成了,跑guix system reconfigue重构完guix系统后,就能愉快地装机了。

第四步:安装系统

我个人给手机刷机一般习惯线刷,毕竟之前也都主要是用线刷刷的,只有一次用卡刷刷过。

首先,给手机接线,再次让手机进入fastboot模式:

adb -d reboot bootloader

然后,确认下是否能检测到设备:

fastboot devices

如果出现了手机id和fastboot,说明能检测到设备。

然后,先刷入LineageOS的救援系统的镜像,也就是recory.img

fastboot flash recovery recovery.img

如果顺利的话,最后应该会提示finished.

刷好镜像后,先按住电源键给手机关机,然后按住音量上键+电源键进入lineageos的救援系统。

接下来不出意外,看到的就是救援系统的页面,会有各种选项,这个页面一般是单击音量键上下选择,然后单击电源键选中。

接下来选中菜单中的Factory reset -> Format data/factory reset,先完整格式化一遍操作系统的数据。

然后选中Advanced -> Enable ADB以开启ADB。

最后回到主菜单,选中 ~Apply Update -> Apply from ADB~

然后,确保数据线和电脑是连上的,使用命令挂载并安装操作系统。

adb -d sideload lineage-xxxxxx-UNOFFICIAL-cannon.zip

如果顺利的话,终端通常会返回Total xfer: 1.00x

这一步如果手机报错提示I/O error之类的不用慌张,可能是adb状态有点奇怪,重新格式化然后刷一次应该就行了。

另外,adb界面刷机时可能会卡在47%,这个时候主要关注手机,手机刷机顺利最后手机命令行会提示Install completed with status 0

最后,重启进入操作系统,完成刷机。

第五步:后续操作

刷好手机的操作系统后,通常还需要做一些额外的后续操作,包括配置更换网络检测服务、配置电信APN接入点、刷Root等,来解决手机后续使用的问题。

更换网络检测服务器

由于Lineage默认的网络检测服务在国外的因素,因此在连接wifi时容易出现提示信号受限的问题。

这一步非常简单,首先开启开发者模式,并打开USB调试。

然后,连接电脑,使用下列命令。

adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204

adb shell settings put global captive_portal_https_url https://connect.rom.miui.com/generate_204

adb shell settings put global captive_portal_fallback_url http://connect.rom.miui.com/generate_204

adb shell settings put global captive_portal_other_fallback_urls https://connect.rom.miui.com/generate_204

当然,我这是将网络检测服务器换成小米提供的,这样在国内环境会有比较好的信号。

配置电信APN接入点

这也是我刷机后遇到的一个坑之一,刷机后电信的APN接入点因为某些未知因素似乎并不能很好工作,所以需要自己手动配置。

配置方式很简单,参考这篇文章

当然,经过个人测试,在我这边不确定是网络环境还是手机问题,实际的配置方式和文章讲述的还是有点差异。

由于我是中国电信的用户,所以需要首先点开互联网,点开最上面的运营商右边的设置按钮。

然后,点开接入点名称,找到名为ctnet的接入点,将APN类型修改为xcap,default,supl,然后将承载系统设定为LTE,NR最后点右上角,选保存即可。

刷Root与配置root隐藏

首先,安装Magisk,我一般通过adb命令安装。

adb install /path/to/Magisk-xxx.apk

值得注意的是,这里的路径一定要填绝对路径,不然会安装失败。

安装完成后,先解压lineageos的操作系统包,将里面的boot.img提取出来,并传递到手机上。

adb push /path/to/boot.img /sdcard/Download/

接着,进入Magisk,点选择并修补一个文件,然后在文件管理器中选中刚上传的文件,等待修补完成后,将文件再次pull到电脑上来。

adb pull /sdcard/Download/magisk_xxxx.img /any/path

最后,再次进入fastboot模式,使用下列命令来刷magsik修改过的boot文件。

fastboot flash boot /path/to/magisk_xxxx.img

我一般习惯顺便安装Zygisk NextLSposed,并顺手开启Zygisk。

至于隐藏root状态,我参考的是这篇文章:链接

我个人的习惯一般装Shamiko模块和PlayIntergrityFix

当然,刚刚看了看文章,觉得文章推荐的模块都值得装,特别是HideMyApplistTrickyStoreTrickyAddonsYuriKey

通常来讲,安装了Shamiko后,只需要配置开启遵守排除列表,设置好排除列表并重启,即可生效。

安装应用

刷机后第一个安装的应用自然是fdroid,然后我习惯使用fdroid先安装好fcitx,配置好fcitx输入法后,再安装其它应用。

adb install /path/to/F-Droid.apk

这里的路径一定要填绝对路径,不然会安装失败。

之后优先安装的应用是shelter和localsend,剩下的就是用户层的一些常用应用和配置了。

最后

不知不觉刷完机就快睡觉了,刷机真的辛苦啊。