Android(九)Google Pixel 解锁电信4G
0x1 解锁原理
Google nexus & pixel等系列手机基带默认都是支持电信频段的,但实际使用时候却只能使用电信卡来打电话发短信,无法使用4G流量。
实际上设备中默认是没有把电信的
mcc/mnc
添加至 bSRLTE
列表carrier_policy.xml
里 ,没在这个列表里导致电信用不了 SRLTE(SRVCC)
,也没配置 CSFB
导致不能 4G 回落 1x。这就是能打电话不能上网的原因。
所以只要将电信的
mcc/mnc
添加至 bSRLTE
列表carrier_policy.xml
里,即可使用电信4G了。0x2 开启DIAG模式
diag
是Qualcomm
平台的日志系统,修改carrier_policy.xml
需要开启设备的diag
模式。init.common.diag.rc.user
内容如下,直接删除了/dev/diag
on property:ro.boot.mode=normal
rm /dev/diag
而init.common.diag.rc.userdebug则内容教多,就不分析了。
添加diag支持,理论上只需要将
设备刷入
init.common.diag.rc.userdebug
放入系统根目录即可,但在Android P上要求较多,如需绕过安全启动、需ROOT权限等。故使用userdebug
模式编译的系统镜像是比较稳妥的方法,编译方法详见libFuzzer on Android(一)Android源码编译。但userdebug
模式编译的系统镜像是不含基带的,所以仍需事先刷好官方镜像,或者之后刷入其中的modem.img
和radio-sailfish-*.img
设备刷入
userdebug
镜像后,即可通过adb开启设备的diag模式:$ adb shell
$ su
# setprop sys.usb.config diag,adb
0x3 QPST工具修改carrier_policy.xml
QPST是针对高通芯片开发的传输软件包,目前只有windows版本,里面包含的工具很多,如资源管理器(EFS Explorer)、工厂测试模式(Factory Test Mode Application)、内存调试模式(memory debug)、QCN查看(QCNView)、QPST配置(QPSTConfigruation)、闪存影像(Gang Flash Image Application)、显示捕获(Display Capture)、NV项目管理(RF NV Item Manager)、服务程序(Service Programming)、软件下载(Software Download)。RL编辑(RL Editor)、DMProxyWin。
修改carrier_policy.xml
需要用到QPST里的EFS Explorer工具,当设备开启diag端口后,Windows系统会提示发现新的设备,装好驱动后(win10比win7对驱动兼容性好一些,系统不能自动安装的驱动可以使用驱动精灵等工具来安装),在设备管理器里会多一个Qualcomm HS-USB Diagnostics 903D
,重点记住COM3
端口QPST工具连接手机,需要在QPST Configuration里添加设备,添加上面的
COM3
即可QPST Configuration添加完成后,QPST EFS Explorer即可找到手机设备,不需做修改直接OK即可
等待过程中可能会有一些未找到文件的错误提示,通过后就可以对基带配置文件进行编辑,找到
policyman
目录(没有就新建),修改其下的carrier_policy.xml
文件(没有可以从网上下载已修改版本拖进去)其实修改
carrier_policy.xml
文件,主要为了将460/11添加至bSRLTE列表(/policyman/carrier_policy.xml)中,改动的内容也只有以下两处:
修改完成后退出重启系统,应该就可以切换
LTE/CDMA
使用电信4G网络了。但有些userdebug版本可能会出现找不到sim情况,暂不明原因,不过刷回原厂ROM恢复modemst即可正常使用,如图:0x4 备份modemst基带分区
为避免
LTE/CDMA
失效,可以备份modemst分区,以供以后使用,方式如下:- 找到modemst分区
$ adb shell $ ls -al /dev/block/platform/*/by-name | grep modemst //*号名字随设备不同而变化 lrwxrwxrwx 1 root root 15 1970-01-22 19:48 modemst1 -> /dev/block/sdd9 lrwxrwxrwx 1 root root 16 1970-01-22 19:48 modemst2 -> /dev/block/sdd10
- 备份modemst分区
$ adb shell $ su # dd if=/dev/block/platform/soc/624000.ufshc/by-name/modemst1 of=/sdcard/modemst1.img # dd if=/dev/block/platform/soc/624000.ufshc/by-name/modemst2 of=/sdcard/modemst2.img
- 取回电脑
$ adb pull /sdcard/modemst1.img ./ $ adb pull /sdcard/modemst2.img ./
0x5 刷回原厂ROM(可选)
如需使用官方rom,刷入时只需从
image
输入,并删除 image
中的 modem.img
和 userdata.img
,且去掉-w
参数。
或者使用第七节
保留基带和数据更新
的方式。0x6 恢复modemst基带
当
LTE/CDMA
失效时,可通过刷入备份好的modemst镜像来恢复$ adb reboot bootloader
$ fastboot flash modemst1 modemst1.img
$ fastboot flash modemst2 modemst2.img
0x7 保留基带和数据更新
破解电信后,可能无法通过OTA更新;或者更新会覆盖基带,这时恢复modemst即可。
保留基带和数据更新,需要通过USB线刷,对官方镜像操作如下:
- 修改
image*.zip/android-info.txt
以跳过bootloader 以及 baseband 的版本检测require board=marlin|sailfish # require version-bootloader=8996-012001-1808030001 # require version-baseband=8996-130181-1806061856
- 修改
flash-all.sh
修改后zip -d image*.zip userdata.img //删除系统镜像中的 `userdata.img` # fastboot flash radio radio*.img //注释掉更新基带的命令 # fastboot -w update image*.img //去掉默认清除数据选项 -w (wipe) fastboot update image*.img
flash-all.sh
内容如下:if ! grep -q dtbo.sig $(which fastboot); then echo "fastboot too old" exit 1 fi zip -d image-sailfish-ppr2.181005.003.zip userdata.img #删除系统镜像中的 `userdata.img` fastboot flash bootloader bootloader-sailfish-8996-012001-1808030001.img fastboot reboot-bootloader sleep 5 #fastboot flash radio radio-sailfish-8996-130181-1806061856.img //注释掉更新基带的命令 fastboot reboot-bootloader sleep 5 #fastboot -w update image-sailfish-ppr2.181005.003.zip //去掉默认清除数据选项 -w (wipe) fastboot update image-sailfish-ppr2.181005.003.zip
- 更新系统
$ adb reboot bootloader $ ./flash-all.sh
详细明晰,我宣布这是全网最佳教程!!
回复删除Pixel 2 XL, Android P. 已root,有没有更简单方法,比如直接替换carrier_policy.xml文件?
回复删除或者有没有Mac上的操作教程,貌似QPST只有window版
误操作删除了pixel分区表,QPST有办法恢复吗
回复删除