摘要

使用fastboot刷Oxygen OS的固件,解决一加一手机刷Cyanogen OS后无法使用联通3G、4G网络的问题。

环境

前言

心血来潮买了张联通卡,满怀欣喜插入一加一(Cyanogen OS cm-13.1-ZNH2KAS1KN),网络一直是2G EDGE。想到因LTE牌照问题,一加一在国内不正式支持联通3G、4G。 官网说

WCDMA和 FDD-LTE两种网络制式需国际漫游状态时才能使用

但面向海外的Cyanogen OS居然也不支持,着实让人惊讶。

先用中文搜索了一下这个问题,中文互联网社区有几个帖子试图解决这个问题,本方案的灵感也部分来源于此帖。

但此类帖子多流于教程,而非技术。本着看教程不如学原理的原则,我们需要从这些神秘兮兮的教程步骤里提取出隐藏的信息。

既然Oxygen OS支持联通3G、4G,说明该ROM的固件(其实是基带)是支持的。

过程

第一次尝试(失败)

本以为简单地刷个Oxygen OS 2.1.4的modem

fastboot flash modem NON-HLOS.bin

就能成功,结果开机后无法使用任何网络。

第二次尝试(失败

同样只刷modem,这次受上述帖子影响,使用了Oxygen OS 1.0的NON-HLOS.bin文件,刷完回到了Cyanogen OS 13,看了一下基带版本,居然是一样的。。。

第三次尝试(成功)

cm-13.1-ZNH2KAS1KN-bacon-signed-fastboot-a03c8dbbd0.zip时需要在fastboot模式分别刷从LOGO到system的各个文件(所谓的把系统恢复成完全原生的方法), 那个压缩包中有个flash-radio.sh脚本,可以“一键”刷所有固件

fastboot flash aboot emmc_appsboot.mbn
fastboot flash LOGO logo.bin
fastboot flash rpm rpm.mbn
fastboot flash modem NON-HLOS.bin
fastbootflash sbl1 sbl1.mbn
fastboot flash dbi sdi.mbn
fastboot flash oppostanvbk static_nvbk.bin
fastboot flash tz tz.mbn

不太理解其中的几个分区的功能,比如aboot,rpm,sbl1,dbi,oppostanvbk(暴露了一加的东家),但感觉这几个文件应该功能紧密相连(本文水平好像比自己鄙视的教程党高不到哪里去。。。),所以决定把这几个分区都刷了。~

还是使用Oxygen OS 2.1.4的固件。当然,有这个脚本方便多了,真是“一键”刷机。

重启后,忐忑不安的盯着开机界面,生怕刷成砖了,还好顺利进入系统,这时基带版本已经是.4.0.1.c7-00013"

Cyanogen OS 13和Oxygen OS 1.0都是DI.3.0.c6-00241,看版本号,还是Oxygen OS 2.1.4的基带更新啊(难道CM和一加闹掰后Cyanogen OS也不给好好做了)。

如此看来,固件(Firmware)还是用Oxygen OS以及对应的氢OS的最新版比较好,即使这版Oxygen OS只是个社区版。

高通固件说明

aboot emmc_appsboot.mbn

application processor(对应baseband processor) boot loader;

emmc(embedded MMC),Android手机常用的存储设备,当然各个固件也存储其中;

mbn(Multi Boot Image),使用readmbn可查看文件内容

LOGO logo.bin

没什么好说的,开机动画,其实是个压缩文件,网上有大量自定义教程。

rpm rpm.mbn

Resource Power Manager,负责设备的电源管理等。

modem NON-HLOS.bin

基带系统固件

NON-HLOS(NON High Level OS)即基带处理器的系统,与HLOS(High Level OS) Android对应;

里面包含GNSS(Global Navigation Satellite System),如GPS,子系统的控制模块;

还有mDSP(modem Digital Sigal Processor)等子系统的控制模块;

网上有泄露的高通某些型号基带源码,可以自己编译;

参考此文

NON-HLOS.bin 实际就是一个FAT16格式的磁盘映像 有两种方法取得

  1. 从刷机包中解压缩
  2. 从root的手机中获取 挂载镜像
    su -
    mkdir mountpoint
    mount -o loop NON-HLOS.bin mountpoint
    cp -r mountpoint modem
    umount mountpoint
    

    现在在modem目录下就有初步提取的底层驱动的文件了。

使用Revskills Pro可以把.b00格式的文件转换成elf文件。

提取过程中,如果遇到空缺的文件,会报告错误。你可以创建一个大小为0的空文件,文件名就为那个丢失的文件。然后重试。

最后你将得到一个类似于 modem.elf的文件,可以放入IDA Pro中分析。

IDA Pro不能正确解析这种架构(QDSP6)的二进制文件,可以使用这个模块,也可以参考这里

sbl1 sbl1.mbn

Secondary Boot Loader;

高通SoC(System on Chip)启动过程中有很多boot loader,一加一使用的MSM 8974AC把sbl1, sbl2, sbl3合并到了一个文件sbl1中。

dbi sdi.mbn

未知

oppostanvbk static_nvbk.bin

网络参数设定

tz tz.mbn

Trust Zone

Arm TrustZone technology is a System on Chip (SoC) and CPU system-wide approach to security.

TrustZone is hardware-based security built into SoCs by semiconductor chip designers who want to provide secure end points and a device root of trust.

吐槽

上文用到的几个文件都是在一加的英文论坛找到的,固件几十兆而已,可以直接下载,无需注册,有些链接可能打不开,请自备梯子。 链接

联通4G的室内信号在我这里的确比移动好很多,前者基本全满,后者最好也只是一半。

最后一定要吐槽一下国内论坛(至此您可以关掉这个页面,去享受联通4G的畅快了)

  1. 帖子里共享文件似乎很喜欢用百度云,百度这公司的产品能信吗??? 结果是没几天后链接就失效了,然后帖子下面一帮人求文件。。。

    与此形成鲜明对比的是,国外(主要是英文)的类似论坛分享的文件很多过了几年还可以下载。

    文件无法正常下载的后果是,教程的可用度会打很大折扣。

  2. 好多不重要,也不大的文件,下载必须要注册,还要扣虚拟货币(说你呢,一加中文论坛,都什么年代了也不知道上HTTPS,看看你的国际版对手,全站HTTPS,对自己同胞就可以这样“不讲究”吗)。

后记

第一版成文于2016年7月10日,文中吐槽相关的文字都是这版遗留的;

第二版于2017年12月31日完成,揭开了高通SoC中诸多固件的神秘面纱,希望能为这个方向的研究者提供参考。

参考