矗立的高楼大厦,依赖于牢固的基底才能屹立不倒。如果说智能手机上的操作系统也有基底,那一定是位于底层的内核。小到每一次指纹解锁,大到畅玩手游大作,内核就像一位称职的经理默默地在底层工作,协调软件和各式硬件。
内核是至关重要的系统组件,对于 Android 来说,更换内核却是一件不怎么稀罕的事——得益于 Android 生态的开放性,我们甚至可以像刷写第三方 Recovery 和定制 ROM 那样随意更换第三方内核,从底层着手为设备带来完全不同的使用体验。
那具体而言 Android 系统的第三方内核究竟能为我们的手机带来哪些改变,在支持的设备上我们又该如何选择和刷入一款第三方内核呢?
如何读懂第三方内核
以新鲜出炉的 arter97 kernel 为例,Arter97 作为一名负责的开发者,将能够解释的技术细节都罗列在了 Detail(细节)一栏里(这样做的开发者并不多)。
我们不妨就以这个面向一加手机 7/7 Pro 的内核为例进行讲解,了解第三方内核到底做了什么改动,进而更好地评估使用第三方内核带来的收益与风险。
1、「重制内核,只保留必要的来自一加的官方源码」
这款内核并不基于一加的原厂内核制作,而是在高通提供的内核代码基础上移植原厂内核中的必要部分,比如一些特定的设备驱动。这会减少内核中用于调试的代码,使得内核更加轻量;同时也去掉了原厂内核中大量依赖 ZRAM 的内存利用机制(开发者阅读代码后不太认可)。
如果你不知道什么是 ZRAM,不妨查看我们的 这篇文章 了解 Android 系统中的相关参数。
2、「整合开源代码论坛(CAF)中来自高通的 4.14 内核版本源码」
Code Aurora Forum(CAF)是 Linux 基金会旗下的开源代码论坛,高通将会在这里发布基于 Android 通用内核的针对自己 SoC(也就是常见的高通骁龙系列)修改的源码,一般来说会提供更好的优化,厂家制作内核时也往往会从中整合代码。而这款内核正是从 CAF 源码中整合来自高通提交的最新、最好的代码,即 You'll be getting the latest and greatest Qualcomm has to offer with this kernel.
3、「更改配置:CONFIG_HZ = 300」
CONFIG_HZ 是 Linux 内核中的一个重要参数,决定了 CPU 主频的切换间隔,数值固定为 100、300 不等,越大则切换间隔越短。这个数值改为 300 可以将间隔从 10ms 降低为 3.33ms,是 Pixel 一直以来都沿用的数值,也是 Google 建议开发商们采用的数值,可以使得手机更为顺滑(当然也会稍稍消耗更多电量)。
开发者认为,这个改动的意义甚至比屏幕的物理刷新率(90hz)更加重要。
4、「优化部分配置以节省电量」
对于玩机用户来说,常常会在查看内核信息时看到 Gold cluster / Silver cluster 这样的字眼,可以将这个「金银簇」理解为 SoC 的大小核心集。查看下图来自 Anandtech 的表格我们也能够发现这样的称呼,对于使用三丛集的 855 来说,就会拥有两个 Gold cluster。
开发者从代码中发现一加工程师强制处理显示相关的进程使用 Gold 簇,也就是大核心,这意味着屏幕上每一帧的改动都会产生更多的能源消耗。因此这个第三方内核将这段代码改为了 Google 所推荐的配置,也就是使用 Silver cluster 来进行处理。结果就是极大地提升了续航,也没有明显的性能损失。
5、「将 BBR 算法作为默认的 TCP 网络拥塞控制算法」
BBR 是由 Google 开发的 TCP 网络拥塞控制算法,早已经并入 Linux 主线,对于国人来说可能也并不陌生。开发者在自己的个人网站服务器上也是运行此算法,对于网络配置提升巨大。所以当这一代855 芯片采用内核 Linux 4.14 版本时,终于可以较为稳定地为其开启 BBR 了。开发者同时也从 Linux 主线中移植了部分针对 BBR 的优化。
6、「关闭 ZRAM」
已经看过 这篇文章 的读者想必对 ZRAM 这个概念并不陌生,作为业界普遍用于提升手机物理内存使用效率的方案,ZRAM 已经在几乎每一台手机上默认开启。但如果物理内存已经十分充裕,那么浪费 CPU 算力在压缩内存数据上便显得有些画蛇添足了。出于这样的考虑,开发者禁用了 zram,同时也不建议潜在用户们去购买 6GB 内存版本的一加 7/一加 7 Pro。
这六个点就是这款内核相较于原厂内核所做出的一些主要改进和技术细节,原帖还有许许多多的细节改进这里就不再赘述。从这些点我们不难发现:
又帮官方内核除虫优化,又整合来自上游的优化代码,难道第三方内核真就这么香?「实验性」、「最新」、「极为先进」这样的字眼,往往与「不稳定」挂钩,新生的事物往往需要好几代的更迭才能逐渐被证明为可靠、稳定的。不妨在 Changelog (更新记录)搜索一下 fix (修复)这个字眼,看一看有多少更新是为了修复引入最新优化所带来的 bug。
第三方内核往往也需要经过版本迭代、反复测试来进入一个发挥较为稳定的时期,且与原厂内核由专业工程师进行反复测试不同,第三方内核的反馈修复过程依赖于论坛中的玩机用户或是开发者本人,效率偏低。因此暂时不建议在日常使用的手机(daily driver phone)上刷入第三方内核。
那么,这样一款充满着极客硬核意味的第三方内核,是如何步步成型,最后被我们玩机用户所获取到呢?
一款第三方内核是如何诞生的?
首先是厂商释出内核源码。
Android 使用 Linux 作为系统的内核,根据其开源协议,厂商需要放出每款设备的内核源码。内核的开源确保了厂商对于操作系统的核心构建是对于公众开放可见的,任何开发者都可以阅读其代码来判断质量的好坏。而对于有能力的开发者来说,他们可以在厂商提供的内核源代码基础上开发第三方内核进行修补,甚至是锦上添花。
对于注重国际声誉的厂商来说,在机型发布后立即释出对应的内核源码已经是一项惯例。一个反面例子是,小米 A1 在推出后迟迟不释出源码,被 媒体 和 开发者 几近口诛笔伐。或许是这份压力的缘故,近年来小米的内核释出速度已经有所改观。
其次是厂商提供 Bootloader 解锁渠道。
Bootloader 是厂商为了确保系统固件的官方可靠所设定的小软件。刷写第三方内核与第三方 ROM 类似,同等于对手机的操作系统进行修改,需要 Bootloader 解锁方可进行。可以说,解锁 Bootloader 是大部分玩机操作的第一步,无论是玩机用户还是第三方内核开发者,拿到设备的第一件事,很可能就是先行解锁 Bootloader。
当然内核开发者也需要拥有相关设备。
除了能获取到内核源码外,第三方内核开发者还需要在手机上亲自测试内核,这就需要他们至少拥有这款机型或是其衍生机型。可想而知,在海外销售得越火爆的机型,活跃的第三方开发者就越多,尤其是一加、小米的 PocoPhone 系列这些主打高性价比的品牌。
与此同时,厂商也乐于拥抱繁荣开放的第三方开发生态,一加、小米、华硕 还会将新发售的手机通过 XDA 等论坛将设备赠送给开发者,加速第三方开发的进程。
如果你和曾经的我一样,是一位喜爱刷第三方内核的玩机用户,那么在购买设备的时候就应该想好最好是认准小米、一加、Pixel 等对于解锁较为友好的厂商,然后挑选几个机型,去对应的 XDA 论坛逛一逛寻找是否有现成的第三方内核,最后才是购买设备。
至于第三方内核如何寻找、 XDA 论坛该怎么逛,那就是我们接下来要讲的了。
找第三方内核不应该是大海捞针
「工欲善其事,必先利其器」,而能利其器的,或许就是一位好工匠。按照这样的思路来看,其实寻找好用的第三方内核,可以先从寻找优秀的第三方内核开发者入手。在如何塑造一款第三方内核上,不同的开发者其实也有着自己独特的理解和思考。
Sultan:原先主要是提供各个一加手机的第三方 Lineage OS 以及第三方内核所需的上游代码,在购买 Pixel 2 XL 后开始推出自己的 Sultan Kernel。针对 Pixel 系列的多任务性能自己写了低内存管理算法 SLMK,挽救 4GB 于水火。内核设计目的是代替原厂内核,因此自定义选项非常少,主要是深层优化。
Franco:老牌内核开发者,开发有主打轻量省电的 Franco Kernel,支持有 Pocophone、一加系列等设备。同时是 Naptime、FK Kernel Manager 等一系列备受好评应用的开发者。
Flar2:老牌内核开发者,开发有主打稳定性的 ElementX Kernel,支持有 Pixel 、一加系列设备,主要是在原厂内核上添加固定的优化和自定义选项。同时是 EX Kernel Manager 、DevCheck 的开发者。
nathanchance:注重 Linux 上游代码的老牌内核开发者,开发有主打流畅度的 Flash Kernel,支持设备不多且大多已经 EOL,但是他对代码的理解和评论仍旧值得关注,(可以标注上他在推上对代码发表的一系列评论)
Arter97:年轻的出色内核开发者,开发有精心优化后的 arter97 Kernel,支持开发 arkTube 这款 app,同时也是 Paranoid ROM 团队 开发者之一。
部分内核开发者或知名度较高,或能力强悍,甚至还有自己的内核测试小组,有的甚至还自己开发了一套 测试内核的工具。如果是他们制作的内核,开发质量就得到了一定的保证,可以放心试用。除此之外,我们也可以通过综合以下几个指标来判断一款第三方内核是否可被依赖。
1、内核开发者的头衔、感谢数。顺着上面寻找优质开发者的思路,开帖的内核开发者可能会有 Recognized Developer (认证开发者)等头衔,这份认可也同样可以从他一共得到的 Thanks (感谢)数感受到,一些开发者甚至已经被感谢过好几万次。
2、帖子的活跃程度。进入某一机型的论坛,最为醒目的便是机型 Banner 横幅下的 MOST ACTIVE XXX TOPICS,如果其中的帖子带有「Kernel」(内核)字样,可以试着进入看看。
3、帖子的回复数与阅读量。从某种程度上来说,帖子的回复数代表了有多少论坛用户关注、反馈、评论了这款内核的更新迭代,而阅读量则代表了一款内核长期以来的影响力。参与内核反馈的论坛用户越多,意味着这款内核经受的测试越多、越可靠。
4、是否仍在更新、维护。只要设备的系统还在维护、固定收到 月份安全更新,那么第三方内核就有必要跟进更新,覆盖包含新的安全代码。一旦一款内核在标题标注了 EOL (End of Life)或是许久没有更新,就已经失去了刷入的价值。
如何刷入一款第三方内核?
如果看完了上面的文字,依然还是对于某款第三方内核跃跃欲试,那么是时候来看一下如何刷入一款第三方内核了。
解锁 Bootloader 是前文已经提到的刷入内核的大前提,另外也得要找好对应的内核包(已经少有 .img 格式的第三方内核包了,大多为 .zip 包),老生常谈的 adb 调试桥已经也已经在桌面端安装完毕。
第三方内核的开发者往往会一并给出内核安装方法,请优先使用此法。我们也会给出比较通用的两种刷入内核的方法。操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
TWRP刷入法
作为比较通用常见,且已经沿用多年的玩机工具,刷内核这件小事对于 TWRP 来说只是小菜一碟。TWRP 是一个开源的、社区性的玩机工具,是一个可以安装在 Android 设备上的自定义恢复模式,小到 Mgaisk 模块、第三方内核,大到第三方 ROM,都可以用 TWRP 刷入。
如果你的设备有官方 TWRP 支持,那么我更建议你用这种方法。
TWRP 可以在其 官方网站 下载到,也可以在 xda 等各大论坛中找到官方版本或是其修改版本,下载后主要是一个 .img 包文件。在以往我们常常会将 TWRP.img 刷入到恢复模式所在的分区,随着 AB 分区的普及,我更推荐使用 fastboot boot 命令来临时启动使用,这一点业已在 Magisk 刷入篇 中提到:
以上终端指令均忽略文件目录和内核名称,请各位用户自行定位目录、对应内核包名称。
内核管理器刷入法
内核管理器一直能够备份内核、刷入开发者所开发的内核,但去年 Flash 内核开发者和 Franco 内核/ FK 内核管理器开发者联合提交了一种能够升级内核且保留 magisk 的办法后,内核管理器刷内核变得更加开放通用,还可以刷入一些体积较小的 .zip 文件。
如今,主流的内核管理器如 EX 内核管理器、FK 内核管理器均已经支持刷入各种第三方内核。
但是,使用内核管理器刷入内核需要授予内核管理器 root 权限,这就需要我们至少能够 利用 magisk 获取到临时 root 权限。
接下来刷内核的步骤就像平时使用 app 那样稀疏平常,打开内核管理器刷入,然后等待完成后重启即可。
除非开发者有明确说明刷入内核可以保留 Magisk,一般情况下我们都需要在刷入内核后重新刷入一次 Magisk,如果有这个需求,不妨在刷入内核后转去 Magisk Manager 重新刷入一次 Magisk,再执行重启。
另外需要注意的是,由于金丝雀版本的 Magisk 改换了 Root 原理,导致无法使用内核管理器刷入内核。
操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
回滚
在系统 OTA 更新时需要将内核切换回原厂内核,可以借助 Mgaiks Manager 手动回滚,也可以提前在 TWRP 制作原厂内核的备份。
如果想更换另一款第三方内核,而当前又已经刷写了一款第三方内核,在更换之前需要回滚一次当前系统/ ROM 的原厂/自带内核,以防出错。
勤快一些的内核开发者可能会几天一个更新,或是放出一个 beta 版本供测试,进入维护期的稳定内核可能仅仅是在月度更新后才发布新版本。但是无论如何还是请尽量保持关注,跟上最新的版本。
如果刷了第三方内核出了问题,不妨查看这篇文章中的步骤提取 log 日志文件,带上日志文件的话一般都能很快接近问题推出更新,有时甚至只需要几分钟。