时时勤拂拭,勿使惹尘埃

TOC

Categories

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模式

diagQualcomm平台的日志系统,修改carrier_policy.xml需要开启设备的diag模式。
而谷歌的商用 rom 即user模式限制了 diag ,无法直接将电信的信息加到手机里;userdebug调试模式则默认支持diag,详情可以对比Android源码
其中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.imgradio-sailfish-*.img
设备刷入userdebug镜像后,即可通过adb开启设备的diag模式:
$ adb shell
$ su
# setprop sys.usb.config diag,adb
执行完成后,可以发现设备开启了监听8872端口:

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分区,以供以后使用,方式如下:
  1. 找到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
    
  2. 备份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
    
  3. 取回电脑
    $ adb pull /sdcard/modemst1.img ./
    $ adb pull /sdcard/modemst2.img ./
    

0x5 刷回原厂ROM(可选)

如需使用官方rom,刷入时只需从 image 输入,并删除 image 中的 modem.imguserdata.img,且去掉-w参数。
或者使用第七节保留基带和数据更新的方式。

0x6 恢复modemst基带

LTE/CDMA失效时,可通过刷入备份好的modemst镜像来恢复
$ adb reboot bootloader
$ fastboot flash modemst1 modemst1.img
$ fastboot flash modemst2 modemst2.img

0x7 保留基带和数据更新

破解电信后,可能无法通过OTA更新;或者更新会覆盖基带,这时恢复modemst即可。
保留基带和数据更新,需要通过USB线刷,对官方镜像操作如下:
  1. 修改image*.zip/android-info.txt以跳过bootloader 以及 baseband 的版本检测
    require board=marlin|sailfish
    # require version-bootloader=8996-012001-1808030001
    # require version-baseband=8996-130181-1806061856
    
  2. 修改 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
    
  3. 更新系统
    $ adb reboot bootloader
    $ ./flash-all.sh
    

2 条评论:

  1. 详细明晰,我宣布这是全网最佳教程!!

    回复删除
  2. Pixel 2 XL, Android P. 已root,有没有更简单方法,比如直接替换carrier_policy.xml文件?
    或者有没有Mac上的操作教程,貌似QPST只有window版

    回复删除