ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

骁龙845老旗舰刷入OpenHarmony 6.1全记录:解锁、备份、刷入与排坑

骁龙845老旗舰刷入OpenHarmony 6.1全记录:解锁、备份、刷入与排坑

我手头这台6T是前几年退役下来的骁龙845老旗舰,8GB+128GB版本。官方系统停在Android 10,日常用着倒也还行,就是少了点新鲜感。OpenHarmony 6.1发布之后,我对着社区里那批适配包犹豫了很久,最后还是决定动手刷一把。这篇文章不打算复述官方文档,而是想把我在6T上从解锁、备份、找包、校验、刷入到首次点亮屏幕的完整过程,以及中途翻车的几个瞬间,原原本本写出来。准备拿同平台老设备折腾的朋友,可以直接照着这个思路走。

1. 为什么要把OpenHarmony 6.1塞进一台骁龙845老旗舰

1.1 硬件底子不差,差的只是“最新系统”的入场券

6T这块平台其实不落后。骁龙845的CPU、Adreno 630的GPU、8GB LPDDR4X内存,再加上128GB的UFS 2.1闪存,放在今天当一台轻度使用设备还是绰绰有余的。它的问题在于,官方系统已经停更,停留在Android 10之后就没有大版本了。Android 10本身不差,但几年后很多新应用的兼容要求已经超出了这个系统版本,实际用起来就是各种不舒服:应用启动变慢、后台频繁被杀、某些新版软件直接提示系统版本过低。

OpenHarmony 6.1的到来恰好给了这台老机器一个新的选择。OpenHarmony不是套壳的Android,它以Linux内核为基础,自己管理分布式能力、图形栈、ArkUI运行时等。单看系统调度和内存占用,6.1比以前那版精简不少,在845这种老平台上跑起来反而比原厂Android更轻快。这也是为什么社区里不少玩家会把目光瞄向这类老旗舰——它们的硬件性能放在开源系统上,仍然有很强的可玩性。

1.2 官方支持之外的社区移植包

先说明一点,OpenHarmony 6.1官方发布的时候,适配的主要是各类开发板,不是手机。手机要跑起来,必须靠社区移植。6T的适配包在社区里已经迭代了很长一段时间,从最初的只能通过串口输出字符,到一个能亮屏、能触摸、能连Wi-Fi的日常可用状态,基本是两三个开发者长期维护的结果。所以如果你在搜索栏里直接找“官方OpenHarmony 6.1一加6T镜像”,大概率是找不到的,真正的资源都藏在社区维护的发布页里。

我这次用的是6.1的社区Nightly包,而不是更稳定的Release候选。Nightly包的优点是能第一时间体验新版特性,缺点是偶尔会踩到构建期才引入的bug。如果只是想体验一下,用最新的稳定发布包更稳妥。这里我不放具体下载地址,社区仓库里搜索“sdm845 OpenHarmony 6.1”一般就能找到对应的发布页,认准设备代号、分支名和发布时间戳即可。

1.3 刷之前必须接受的三个现实

刷之前先把丑话说在前头,这三件事不接受就不要往下走:

  • 不能当主力机。OpenHarmony的手机分支还在成长阶段,电话、短信能通,但应用生态和原来的安卓生态完全不是一回事,很多安卓APP直接装不了,别指望无缝迁移。
  • 部分硬件功能可能不完整。NFC、指纹、快充这类功能往往要看移植进度,6T的适配包里有些模块可用,有些模块只是“能点亮”,驱动层离完美还有距离。
  • 解锁过就回不去了。刷机过程中的解锁、分区改动都会影响厂家保修,虽然可以刷回原厂系统,但保修状态已经没办法恢复。

这三个现实想清楚之后,再往下看解锁和刷机的细节。

2. 解锁Bootloader与备份:刷机成败的第一道门槛

2.1 解锁前:打开OEM解锁开关并准备好平台工具

解锁Bootloader的第一步不是敲adb命令,而是先把手机里的开发者选项打开,找到“OEM解锁”开关并打开。6T这个选项默认是关闭的,如果手机没有联网,它会显示不可用,所以刷机前建议先联网把账号状态激活。很多第一次刷机的朋友就是卡在这一步,以为fastboot命令无效,其实是系统设置里的开关没有打开。

准备工具方面,我建议先安装platform-tools,里面自带了fastboot和adb命令。Windows用户还要把USB驱动装上,否则设备管理器里会一直出现一个带着黄色感叹号的Android设备。Linux和macOS的用户一般不需要额外驱动,直接识别成fastboot设备即可。我这里用的是Linux环境,后面的命令也都是基于Linux终端的写法,Windows下把sha256sum换成Get-FileHash、把ls换成dir即可,其余命令基本一致。

打开OEM解锁开关后,进入fastboot模式的方式是关机,然后长按音量减和电源键。或者直接在系统里执行:

adb reboot bootloader

看到终端出现“fastboot”设备后,再连接电脑。注意这里的顺序:先确认fastboot设备已经被识别,再执行后续解锁命令,不然容易出现“waiting for device”卡住不动的情况。

2.2 备份:照片通讯录之外,还要留底层分区

解锁Bootloader本身会做一次数据擦除,所有用户数据都会清空。因此在解锁之前,把照片、联系人之类的个人数据导出来是基本操作。但有一点很多人会忽略,就是系统底层分区数据的备份。

6T这类高通平台的机器,modemst1、modemst2、persist这几个分区存放着射频校准、设备标识和传感器校准数据。一旦刷机过程中把这些分区弄脏,可能会出现没信号、Wi-Fi连不上、传感器失灵的问题。我见过有人刷完OpenHarmony后打电话没声音,排查半天发现不是音频驱动问题,而是早期备份时漏掉了modemst分区,导致射频参数错乱。

我的做法是,先刷入一个临时的第三方Recovery,然后利用它的备份功能把persist、modemst1、modemst2、boot、system等关键分区完整导出。这里强调一下,不是随便点一下备份分区就叫完整备份,最好把备份文件复制到电脑里,然后马上做一次校验,确认文件不是0字节,避免后续格式化把备份文件一起清掉。

备份的命令大致是这样的,不同Recovery里写法会有些差异:

dd if=/dev/block/bootdevice/by-name/modemst1 of=/sdcard/modemst1.img dd if=/dev/block/bootdevice/by-name/modemst2 of=/sdcard/modemst2.img dd if=/dev/block/bootdevice/by-name/persist of=/sdcard/persist.img

如果Recovery里没有终端功能,也可以用图形界面的备份选项,选取这些分区逐个导出。

2.3 解锁之后的分区现状与槽位概念

解锁完成后,fastboot的命令行下执行:

fastboot flashing unlock

部分平台还需要再执行:

fastboot oem unlock

两条命令的作用类似,都是为了打开bootloader写权限。执行完后手机屏幕上会有明确的确认提示,用音量键选择解锁、电源键确认即可。

解锁后系统会重启,并恢复一次出厂状态。这时候可以通过:

fastboot getvar current-slot

看到当前使用的A/B槽位。6T是A/B分区设计,系统镜像同时存在A和B两组分区中,开机时由当前槽位决定加载哪一组。刷OpenHarmony之前,务必要知道自己当前在哪个slot,因为之后的刷写命令最好固定写到指定槽位,避免两个槽位状态不一致导致启动异常。

3. 固件获取与校验:别把来路不明的包刷进去

3.1 找包与选版本:稳定版、Beta版还是Nightly版

社区定制系统通常会区分三个分支:稳定版、Beta版、Nightly版。稳定版经过了比较长时间的验证,适合日常体验;Beta版功能更新但偶尔有bug;Nightly版则几乎每天重新构建,适合用来追新和反馈问题。

我这次选的是Nightly版,主要原因是想测试6.1最新的图形栈改动。如果你没有足够的排查耐心,我建议直接找稳定版。怎么区分?发布页上一般会标注版本号和构建日期,稳定版通常几个月才更新一次,Nightly版则可能每天都有新包。

找包时还要注意平台适配。同一套OpenHarmony 6.1源码,针对不同芯片、不同屏幕驱动会有不同的设备树配置,刷错包的结果通常是亮不了屏或根本无法引导。所以下载时一定认准“6T”或“sdm845平台通用”这样的标识,不要看到OpenHarmony 6.1就拿去刷。

为了直观一点,我把三个分支的适用场景列一下:

分支类型更新频率稳定性适合谁
稳定版数月一次高首次刷机、日常备用
Beta版数周一版中愿意尝鲜也能接受小bug
Nightly版每天或每周低有日志抓取和反馈条件的玩家

3.2 哈希校验和包体结构

社区包下载下来往往是一个压缩包,里面包含boot.img、init_boot.img、system.img、vendor.img、vbmeta.img、userdata.img等镜像文件,可能还带一个说明文档和刷机脚本。

拿到包的第一件事是校验哈希。发布者通常会在发布页上给出SHA-256校验值,在Linux或macOS下执行:

sha256sum openharmony-6.1-6t-nightly.zip

Windows下执行:

Get-FileHash openharmony-6.1-6t-nightly.zip -Algorithm SHA256

校验不一致的包坚决不刷,因为中途断流、服务器丢文件都可能导致镜像损坏,刷进去轻则系统起不来,麻烦一点可能把分区写坏。我自己有一次就遇到过下载到99%断网的情况,重新校验哈希对不上,果断重新下载,才避免了后续折腾。

压缩包解开后,我习惯先看一遍说明文档。有些包会要求先刷这个分区,再刷那个分区,顺序错一步就是黑屏。别嫌麻烦,花两分钟读一遍能省下后面两个小时排查问题。另外注意看一下脚本,如果包内自带flash.sh或flash.bat,可以直接使用,它通常已经包含了正确处理槽位、参数禁用的逻辑,比自己手动敲命令更不容易出错。

3.3 工具链:fastboot、hdc与USB驱动

刷入阶段用到两个工具:fastboot负责底层分区写,hdc负责系统启动后的调试和日志抓取。hdc是OpenHarmony自带的设备连接工具,作用类似于Android生态里的adb。fastboot直接由platform-tools提供。

我自己的操作环境是Linux,platform-tools是通过包管理器装的,版本比较新,能支持--disable-verity这类参数。如果你还在用Windows,建议去官方工具页面下载最新的platform-tools压缩包,不要用几年前的版本,否则后面刷vbmeta时会直接报“unknown option”。

USB连接建议用原装数据线,或者至少是支持数据传递的线,不是那种只充电不传数据的便宜线。我早期翻车就翻在这种线上,fastboot设备识别不出来,折腾半天以为是驱动问题。连接时如果系统无法识别,先检查USB接口是否直通主板,尽量不要经USB Hub,尤其是供电不稳定的Hub,刷机过程中断连非常危险。

4. 刷入OpenHarmony 6.1的分区操作与底层要点

4.1 关键知识点:分区映射与槽位写入

在fastboot模式下,6T的分区结构与公版sdm845基本一致,包括boot、init_boot、system、vendor、vbmeta、userdata等几个关键分区。OpenHarmony 6.1的手机适配通常要求把系统镜像刷入system槽位,同时把内核和ramdisk放入boot或init_boot分区。

看到这里你可能会问:为什么还要单独刷init_boot?这是后续内核引入的新机制,init_boot分区用来承载启动阶段的ramdisk,用于完成早期初始化。社区包里如果包含init_boot.img,就说明这个分区必须刷,不能省。漏刷init_boot的典型表现是手机亮屏后一直停在开机动画,内核反复重启。

槽位方面,我习惯先把当前活跃槽固定到a:

fastboot set_active a

这样后续所有刷写都写到a槽对应分区,避免出现ab两个槽位镜像不一致的情况。如果你刷完后发现开机总是自动回到b槽,多半是bootloader的槽位切换策略在作怪,重新set_active一下就行。还有一个细节:刷写之前最好先记下原来的slot状态,万一后悔想回滚原系统,至少知道原来是在哪个槽位启动的。

4.2 一步步刷入:从擦除到写入

进入fastboot模式后,刷入的常规顺序是:先刷vbmeta,再刷boot、init_boot、vendor、system,最后处理userdata。

一个典型的操作流程如下:

fastboot flash vbmeta vbmeta.img fastboot flash boot boot.img fastboot flash init_boot init_boot.img fastboot flash vendor vendor.img fastboot flash system system.img fastboot erase userdata

最后一条erase userdata不能省。从Android切换到OpenHarmony,文件系统格式和SELinux上下文都不一样,旧的userdata分区如果不清理,启动过程中会反复报挂载错误,甚至直接进入恢复模式。刷完这些后,不要急着断开USB,先执行:

fastboot reboot

观察手机有没有开始引导。第一次引导可能会比较慢,十几秒停在logo是正常现象,不用急着拔线。如果一分钟以上仍然没有任何变化,再考虑回到fastboot模式下检查分区刷写状态。

刷写过程中如果某一步报“Invalid image”或者“too large”,大概率是镜像与分区不匹配,或者包下载损坏。这时候不要继续往后面刷,先停下来校验哈希、确认镜像名是否对应分区。硬着头皮刷下去的结果通常是把一个已经正常的系统弄成半砖状态。

4.3 处理verity、recovery和userdata格式化的几个坑

这里有一个常见的坑:vbmeta分区里的verity和verification标志。原厂系统里这两个标志都是开启的,而社区镜像没有对应的签名,启动时会被bootloader拒之门外。所以刷vbmeta时,我使用带禁用参数的fastboot命令:

fastboot flash vbmeta vbmeta.img --disable-verity --disable-verification

注意,这个参数对fastboot版本有要求,太老的platform-tools根本不认识这两个参数。我用的是新版platform-tools实测是可以的。如果版本不够,建议先升级再刷,或者用社区包自带的刷机脚本,里面通常已经把fastboot命令封装好了。

另一个坑是recovery分区。OpenHarmony 6.1的镜像包里一般不带recovery分区镜像,因为它不像Android那样依赖Recovery做恢复。刷完OpenHarmony后,原来的Recovery可能变成摆设,如果再想进Recovery做备份,会直接失败。所以备份分区这件事,一定要在刷入OpenHarmony之前做完。这个顺序我前文反复强调过,因为一旦跨系统切换,很多底层工具就不通用了。

最后还有一个容易忽略的点:刷完OpenHarmony后,如果后续想从系统内直接重启到Recovery,不要用adb reboot recovery,OpenHarmony下这个命令不一定有效,它更习惯用hdc shell reboot recovery。不过真正管用的还是fastboot模式下的手动按键进入方式,把音量键和电源键的组合背熟,永远是最保险的做法。

5. 首次启动的问题排查:从黑屏到系统桌面

5.1 如果一直黑屏,先确认内核有没有跑起来

我第一次刷完重启后,屏幕直接黑着,手机顶部的指示灯倒是会亮。这看起来像是刷失败了,但事实是内核已经在跑,只是显示驱动还没初始化成功。

遇到这种情况,唯一的判断依据是看内核日志。如果手头有USB转串口线,可以连接主板的调试串口,能看到完整的内核启动输出。如果没有,就先连USB,等一会儿再用hdc试连:

hdc list targets

如果能列出设备,说明内核已经起来,问题基本锁定在显示链路。如果列表为空,说明连USB设备枚举都没完成,那就要往内核引导失败的方向排查,重新检查刷写的分区顺序。

还有一个更简单的判断技巧:黑屏状态下尝试按电源键、音量键,如果机器有震动反馈或者指示灯有变化,说明系统没有完全死掉,还值得继续调试。如果怎么按都没反应,那大概率是内核没起来,基本只能回到fastboot重刷。

5.2 屏幕、触摸与Wi-Fi驱动落地情况

6T这块屏幕和触摸方案比较特殊,适配包能亮屏不代表触摸一定能用。社区包为了兼容不同批次机器,往往会把多个触摸驱动编译进内核,再用设备树里的硬件ID去选择合适的驱动。如果你的机器批次比较偏,可能会出现亮屏但触摸无效的情况。

我遇到的最常见问题是触摸方向反了,这不是驱动没有,而是设备树里的坐标映射参数不对。解决办法一般是改dts中的触摸屏参数后重新编译内核。对普通用户来说,最靠谱的方式还是等社区同步修复,或者下载同批次机器验证过的稳定版本。

Wi-Fi和蓝牙通常由WCN模块驱动,6T的适配包里基本能做到Wi-Fi可连、蓝牙可搜到设备,但连续长时间传输时偶尔会掉线。这和Android下的驱动相比还有差距,不过对于轻度使用已经够用。我实测下来,刷入后第一次开机不连Wi-Fi,进入设置再打开Wi-Fi会更快完成扫码连接,可能是本地网络扫描服务初始化的问题,但影响不大。

5.3 用hdc连接设备并抓取hilog日志

系统正常起来后,hdc会成为唯一的调试入口。连接方式类似adb:

hdc shell

进入shell后可以查看进程、挂载点等基本信息。如果遇到应用崩溃、服务重启等问题,用hilog抓日志:

hdc hilog

hilog是OpenHarmony的日志系统,会输出内核态和用户态的关键日志。抓日志时建议先记录时间戳,方便和后端联系人确认问题发生点。如果hilog输出太密,可以先用hdc hilog -r清空缓冲区,再复现一次问题,这样拿到的日志信息更干净。

另外,OpenHarmony的hdc服务默认监听端口与adb不同,不要混用。如果在同一台电脑上既有adb又有hdc,注意别让两个服务抢设备端口,我遇到过hdc连不上,最后发现是adb服务占用了USB识别的情况。关闭adb服务进程,再重新执行hdc命令通常能解决。

6. 回滚方案与日常使用的现实提醒

6.1 保留原厂固件,随时准备回滚

刷完OpenHarmony不意味着一定要一条道走到黑。如果你的备份足够完整,回滚原厂系统并不算难。方法是在fastboot模式下,把之前备份的boot、system、vendor、vbmeta等分区镜像按原槽位刷回去,然后重启即可。

这里有个前提:备份时一定要包含原厂的vbmeta,否则重新启用verity校验时没有原始vbmeta,系统会卡在启动验证阶段。更进一步,如果后期想要彻底恢复,还可以用芯片厂商的底层烧录工具把整个flash导出再写入,但那个流程比较重,一般不推荐。

回滚之后建议再执行一次出厂设置,把分区结构恢复到官方状态,然后升级到最新官方版本,基本就和没刷过一样了。我在回滚测试时还发现一个问题:如果之前把userdata格式化成OpenHarmony的文件系统,回滚原系统后第一次开机会很慢,这是正常的,系统会在后台自动重建data分区,等几分钟即可,不要误以为卡死。

6.2 日常使用中的真实体验:哪些能用,哪些很勉强

我在6T上把OpenHarmony 6.1当备用机用了两周,说几个直观感受:

功能模块实际表现说明
电话短信基本可用信号强度和原厂系统差别不大
4G网络可用没有出现断网,切换基站时有轻微延迟
相机能调用但成像一般没有厂商调校,HDR和夜景基本不可用
指纹部分版本可用息屏状态下识别成功率一般
快充依赖社区包某些版本只能走普通慢充
应用生态偏少相比安卓生态还是差很多

这些限制不是系统本身不行,而是手机适配需要大量调校工作,单靠几个社区开发者很难在短时间内覆盖所有功能模块。如果你拿它当备用机,接打电话、查资料、看看视频还是可以的;但如果想完全替代原来的主力机,建议再等几个版本。

6.3 一点建议:先备份再折腾

折腾这类系统,我最大的体会是“备份永远不嫌多”。不仅是底层分区,原厂完整固件、桌面数据、甚至刷机工具版本,都值得存档。否则一旦刷到一半发现包不对,手头没有可回滚的东西,真的会非常被动。

如果你也是第一次拿老旗舰刷OpenHarmony,建议按顺序走:解锁前做数据备份,解锁后先刷临时Recovery备份底层分区,再从稳定版包开始,不要一上来就追求Nightly。等跑通一遍整套流程,你自然会知道哪些环节可以顺手跳过。

最后再分享一个我踩过的坑:Nightly包的构建日期和内核版本一定要记下来,同一个系统版本下,不同日期包的Wi-Fi驱动表现可能差很多。我一开始刷的某天Nightly包Wi-Fi频繁断流,后来换了两天后的新构建,问题就消失了。遇到问题时,先去反馈区看看有没有人提交过同样的日志,再决定要不要换包,不要盲目重刷浪费一晚上。

返回列表