矗立的高楼大厦,依赖于牢固的基底才能屹立不倒。如果说智能手机上的操作系统也有基底,那一定是位于底层的内核。小到每一次指纹解锁,大到畅玩手游大作,内核就像一位称职的经理默默地在底层工作,协调软件和各式硬件。

Android系统的构成
内核是至关重要的系统组件,对于Android来说,更换内核却是一件不怎么稀罕的事——得益于Android生态的开放性,我们甚至可以像刷写第三方Recovery和定制ROM那样随意更换第三方内核,从底层着手为设备带来完全不同的使用体验。
那具体而言Android系统的第三方内核究竟能为我们的手机带来哪些改变,在支持的设备上我们又该如何选择和刷入一款第三方内核呢?
如何读懂第三方内核
以新鲜出炉的arter97kernel为例,Arter97作为一名负责的开发者,将能够解释的技术细节都罗列在了Detail(细节)一栏里(这样做的开发者并不多)。
我们不妨就以这个面向一加手机7/7Pro的内核为例进行讲解,了解第三方内核到底做了什么改动,进而更好地评估使用第三方内核带来的收益与风险。

arter97所附带的所有内核特性
1、「重制内核,只保留必要的来自一加的官方源码」
这款内核并不基于一加的原厂内核制作,而是在高通提供的内核代码基础上移植原厂内核中的必要部分,比如一些特定的设备驱动。这会减少内核中用于调试的代码,使得内核更加轻量;同时也去掉了原厂内核中大量依赖ZRAM的内存利用机制(开发者阅读代码后不太认可)。
如果你不知道什么是ZRAM,不妨查看我们的这篇文章了解Android系统中的相关参数。
2、「整合开源代码论坛(CAF)中来自高通的4.14内核版本源码」
CodeAuroraForum(CAF)是Linux基金会旗下的开源代码论坛,高通将会在这里发布基于Android通用内核的针对自己SoC(也就是常见的高通骁龙系列)修改的源码,一般来说会提供更好的优化,厂家制作内核时也往往会从中整合代码。而这款内核正是从CAF源码中整合来自高通提交的最新、最好的代码,即You'llbegettingthelatestandgreatestQualcommhastoofferwiththiskernel.

3、「更改配置:CONFIG_HZ=300」
CONFIG_HZ是Linux内核中的一个重要参数,决定了CPU主频的切换间隔,数值固定为100、300不等,越大则切换间隔越短。这个数值改为300可以将间隔从10ms降低为3.33ms,是Pixel一直以来都沿用的数值,也是Google建议开发商们采用的数值,可以使得手机更为顺滑(当然也会稍稍消耗更多电量)。
开发者认为,这个改动的意义甚至比屏幕的物理刷新率(90hz)更加重要。
4、「优化部分配置以节省电量」
对于玩机用户来说,常常会在查看内核信息时看到Goldcluster/Silvercluster这样的字眼,可以将这个「金银簇」理解为SoC的大小核心集。查看下图来自Anandtech的表格我们也能够发现这样的称呼,对于使用三丛集的855来说,就会拥有两个Goldcluster。

开发者从代码中发现一加工程师强制处理显示相关的进程使用Gold簇,也就是大核心,这意味着屏幕上每一帧的改动都会产生更多的能源消耗。因此这个第三方内核将这段代码改为了Google所推荐的配置,也就是使用Silvercluster来进行处理。结果就是极大地提升了续航,也没有明显的性能损失。

开发者在推上分享了这个改动所带来的显著续航提升
5、「将BBR算法作为默认的TCP网络拥塞控制算法」
BBR是由Google开发的TCP网络拥塞控制算法,早已经并入Linux主线,对于国人来说可能也并不陌生。开发者在自己的个人网站服务器上也是运行此算法,对于网络配置提升巨大。所以当这一代855芯片采用内核版本时,终于可以较为稳定地为其开启BBR了。开发者同时也从Linux主线中移植了部分针对BBR的优化。
6、「关闭ZRAM」
已经看过这篇文章的读者想必对ZRAM这个概念并不陌生,作为业界普遍用于提升手机物理内存使用效率的方案,ZRAM已经在几乎每一台手机上默认开启。但如果物理内存已经十分充裕,那么浪费CPU算力在压缩内存数据上便显得有些画蛇添足了。出于这样的考虑,开发者禁用了zram,同时也不建议潜在用户们去购买6GB内存版本的一加7/一加7Pro。
这六个点就是这款内核相较于原厂内核所做出的一些主要改进和技术细节,原帖还有许许多多的细节改进这里就不再赘述。从这些点我们不难发现:
第三方内核是开发者出于自己的内核理念、理解所制作的个人作品。
原厂内核的一些配置有时并不是最优解,来自Google和高通的方案最终效果可能更好。
第三方内核对比原厂内核有更新频率上的天然优势,结合开源社区能够更快追上最新提交的代码。
第三方内核可能会提供部分的内核自定义选项来供用户选择(下篇会详细提到)
又帮官方内核除虫优化,又整合来自上游的优化代码,难道第三方内核真就这么香?「实验性」、「最新」、「极为先进」这样的字眼,往往与「不稳定」挂钩,新生的事物往往需要好几代的更迭才能逐渐被证明为可靠、稳定的。不妨在Changelog(更新记录)搜索一下fix(修复)这个字眼,看一看有多少更新是为了修复引入最新优化所带来的bug。

一款内核更新到稳定期,往往需要大量fix
那么,这样一款充满着极客硬核意味的第三方内核,是如何步步成型,最后被我们玩机用户所获取到呢?
一款第三方内核是如何诞生的?
首先是厂商释出内核源码。
Android使用Linux作为系统的内核,根据其开源协议,厂商需要放出每款设备的内核源码。内核的开源确保了厂商对于操作系统的核心构建是对于公众开放可见的,任何开发者都可以阅读其代码来判断质量的好坏。而对于有能力的开发者来说,他们可以在厂商提供的内核源代码基础上开发第三方内核进行修补,甚至是锦上添花。
对于注重国际声誉的厂商来说,在机型发布后立即释出对应的内核源码已经是一项惯例。一个反面例子是,小米A1在推出后迟迟不释出源码,被媒体和开发者几近口诛笔伐。或许是这份压力的缘故,近年来小米的内核释出速度已经有所改观。

Franco内核开发者的指责
其次是厂商提供Bootloader解锁渠道。
Bootloader是厂商为了确保系统固件的官方可靠所设定的小软件。刷写第三方内核与第三方ROM类似,同等于对手机的操作系统进行修改,需要Bootloader解锁方可进行。可以说,解锁Bootloader是大部分玩机操作的第一步,无论是玩机用户还是第三方内核开发者,拿到设备的第一件事,很可能就是先行解锁Bootloader。
当然内核开发者也需要拥有相关设备。
除了能获取到内核源码外,第三方内核开发者还需要在手机上亲自测试内核,这就需要他们至少拥有这款机型或是其衍生机型。可想而知,在海外销售得越火爆的机型,活跃的第三方开发者就越多,尤其是一加、小米的PocoPhone系列这些主打高性价比的品牌。
与此同时,厂商也乐于拥抱繁荣开放的第三方开发生态,一加、小米、华硕还会将新发售的手机通过XDA等论坛将设备赠送给开发者,加速第三方开发的进程。
如果你和曾经的我一样,是一位喜爱刷第三方内核的玩机用户,那么在购买设备的时候就应该想好最好是认准小米、一加、Pixel等对于解锁较为友好的厂商,然后挑选几个机型,去对应的XDA论坛逛一逛寻找是否有现成的第三方内核,最后才是购买设备。
至于第三方内核如何寻找、XDA论坛该怎么逛,那就是我们接下来要讲的了。
找第三方内核不应该是大海捞针
「工欲善其事,必先利其器」,而能利其器的,或许就是一位好工匠。按照这样的思路来看,其实寻找好用的第三方内核,可以先从寻找优秀的第三方内核开发者入手。在如何塑造一款第三方内核上,不同的开发者其实也有着自己独特的理解和思考。
Sultan:原先主要是提供各个一加手机的第三方LineageOS以及第三方内核所需的上游代码,在购买Pixel2XL后开始推出自己的SultanKernel。针对Pixel系列的多任务性能自己写了低内存管理算法SLMK,挽救4GB于水火。内核设计目的是代替原厂内核,因此自定义选项非常少,主要是深层优化。
Franco:老牌内核开发者,开发有主打轻量省电的FrancoKernel,支持有Pocophone、一加系列等设备。同时是Naptime、FKKernelManager等一系列备受好评应用的开发者。
Flar2:老牌内核开发者,开发有主打稳定性的ElementXKernel,支持有Pixel、一加系列设备,主要是在原厂内核上添加固定的优化和自定义选项。同时是EXKernelManager、DevCheck的开发者。
Arter97:年轻的出色内核开发者,开发有精心优化后的arter97Kernel,支持开发arkTube这款app,同时也是ParanoidROM团队开发者之一。
部分内核开发者或知名度较高,或能力强悍,甚至还有自己的内核测试小组,有的甚至还自己开发了一套测试内核的工具。如果是他们制作的内核,开发质量就得到了一定的保证,可以放心试用。除此之外,我们也可以通过综合以下几个指标来判断一款第三方内核是否可被依赖。
1、内核开发者的头衔、感谢数。顺着上面寻找优质开发者的思路,开帖的内核开发者可能会有RecognizedDeveloper(认证开发者)等头衔,这份认可也同样可以从他一共得到的Thanks(感谢)数感受到,一些开发者甚至已经被感谢过好几万次。

认证开发者头衔、感谢数
2、帖子的活跃程度。进入某一机型的论坛,最为醒目的便是机型Banner横幅下的MOSTACTIVEXXXTOPICS,如果其中的帖子带有「Kernel」(内核)字样,可以试着进入看看。


一个机型的论坛里面往往带有好几个板块,如果是寻找内核,则需要进入固定板块
4、是否仍在更新、维护。只要设备的系统还在维护、固定收到月份安全更新,那么第三方内核就有必要跟进更新,覆盖包含新的安全代码。一旦一款内核在标题标注了EOL(ofLife)或是许久没有更新,就已经失去了刷入的价值。

一款第三方内核已经终止了它的生命,好在开发者还推荐了另一款内核
如何刷入一款第三方内核?
如果看完了上面的文字,依然还是对于某款第三方内核跃跃欲试,那么是时候来看一下如何刷入一款第三方内核了。
解锁Bootloader是前文已经提到的刷入内核的大前提,另外也得要找好对应的内核包(已经少有.img格式的第三方内核包了,大多为.zip包),老生常谈的adb调试桥已经也已经在桌面端安装完毕。
第三方内核的开发者往往会一并给出内核安装方法,请优先使用此法。我们也会给出比较通用的两种刷入内核的方法。操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
TWRP刷入法
作为比较通用常见,且已经沿用多年的玩机工具,刷内核这件小事对于TWRP来说只是小菜一碟。TWRP是一个开源的、社区性的玩机工具,是一个可以安装在Android设备上的自定义恢复模式,小到Mgaisk模块、第三方内核,大到第三方ROM,都可以用TWRP刷入。
如果你的设备有官方TWRP支持,那么我更建议你用这种方法。
TWRP可以在其官方网站下载到,也可以在xda等各大论坛中找到官方版本或是其修改版本,下载后主要是一个.img包文件。在以往我们常常会将刷入到恢复模式所在的分区,随着AB分区的普及,我更推荐使用fastbootboot命令来临时启动使用,这一点业已在Magisk刷入篇中提到:
在电脑终端执行adbrebootbootloader进入Bootloader界面
在电脑终端执行进入临时TWRP,如果是第一次,会询问你是否允许修改系统,选择允许。
在TWRP中输入手机密码来顺利解锁data分区,然后进入install来找到已经存储的第三方内核,选择并刷入。如果你想一并刷入magisk或是TWRP,请注意内核开发者标注出的刷入顺序。
如果你正在使用测试版的AndroidQ,而TWRP还未及时更新支持新系统的data分区解密(也就是无法正确读取手机的内置存储空间),其实也可以利用adbsideload指令来进行内核刷入。在TWRP中选取advanced(高级),激活adbsideload,然后在电脑上下载内核.zip包,在终端中输入即可进行刷入。
重启进入系统,若是顺利开机,可在关于本机中查看内核版本以验证是否成功刷入。
以上终端指令均忽略文件目录和内核名称,请各位用户自行定位目录、对应内核包名称。

一次完整的刷写过程,在终端其实并不需要太多指令
内核管理器刷入法
内核管理器一直能够备份内核、刷入开发者所开发的内核,但去年Flash内核开发者和Franco内核/FK内核管理器开发者联合提交了一种能够升级内核且保留magisk的办法后,内核管理器刷内核变得更加开放通用,还可以刷入一些体积较小的.zip文件。
如今,主流的内核管理器如EX内核管理器、FK内核管理器均已经支持刷入各种第三方内核。
两款内核管理器的刷入内核功能
但是,使用内核管理器刷入内核需要授予内核管理器root权限,这就需要我们至少能够利用magisk获取到临时root权限。
接下来刷内核的步骤就像平时使用app那样稀疏平常,打开内核管理器刷入,然后等待完成后重启即可。
除非开发者有明确说明刷入内核可以保留Magisk,一般情况下我们都需要在刷入内核后重新刷入一次Magisk,如果有这个需求,不妨在刷入内核后转去MagiskManager重新刷入一次Magisk,再执行重启。
另外需要注意的是,由于金丝雀版本的Magisk改换了Root原理,导致无法使用内核管理器刷入内核。
操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
回滚
在系统OTA更新时需要将内核切换回原厂内核,可以借助MgaiksManager手动回滚,也可以提前在TWRP制作原厂内核的备份。
如果想更换另一款第三方内核,而当前又已经刷写了一款第三方内核,在更换之前需要回滚一次当前系统/ROM的原厂/自带内核,以防出错。
如果刷了第三方内核出了问题,不妨查看这篇文章中的步骤提取log日志文件,带上日志文件的话一般都能很快接近问题推出更新,有时甚至只需要几分钟。