内核是至关重要的系统组件,对于Android来说,更换内核却是一件不怎么稀罕的事——得益于Android生态的开放性,我们甚至可以像刷写第三方Recovery和定制ROM那样随意更换第三方内核,从底层着手为设备带来完全不同的使用体验。
那具体而言Android系统的第三方内核究竟能为我们的手机带来哪些改变,在支持的设备上我们又该如何选择和刷入一款第三方内核呢?
我们不妨就以这个面向一加手机7/7Pro的内核为例进行讲解,了解第三方内核到底做了什么改动,进而更好地评估使用第三方内核带来的收益与风险。
1、「重制内核,只保留必要的来自一加的官方源码」
这款内核并不基于一加的原厂内核制作,而是在高通提供的内核代码基础上移植原厂内核中的必要部分,比如一些特定的设备驱动。这会减少内核中用于调试的代码,使得内核更加轻量;同时也去掉了原厂内核中大量依赖ZRAM的内存利用机制(开发者阅读代码后不太认可)。
2、「整合开源代码论坛(CAF)中来自高通的4.14内核版本源码」
CAF的首页,标注了三类人群:制造商、开发者、Makers
3、「更改配置:CONFIG_HZ=300」
CONFIG_HZ是Linux内核中的一个重要参数,决定了CPU主频的切换间隔,数值固定为100、300不等,越大则切换间隔越短。这个数值改为300可以将间隔从10ms降低为3.33ms,是Pixel自发布以来一直沿用的数值,也是Google建议开发商们采用的数值,可以使得手机更为顺滑。
开发者认为,这个改动的意义甚至比屏幕的物理刷新率(90hz)更加重要。
4、「优化部分配置以节省电量」
对于玩机用户来说,常常会在查看内核信息时看到Goldcluster/Silvercluster这样的字眼,可以将这个「金银簇」理解为SoC的大小核心集。查看下图来自Anandtech的表格我们也能够发现这样的称呼,对于使用三丛集的855来说,就会拥有两个Goldcluster。
5、「将BBR算法作为默认的TCP网络拥塞控制算法」
BBR是由Google开发的TCP网络拥塞控制算法,早已经并入Linux主线,对于国人来说可能也并不陌生。开发者在自己的个人网站服务器上也是运行此算法,对于网络配置提升巨大。所以当这一代855芯片采用内核Linux4.14版本时,终于可以较为稳定地为其开启BBR了。开发者同时也从Linux主线中移植了部分针对BBR的优化。
6、「关闭ZRAM」
这六个点就是这款内核相较于原厂内核所做出的一些主要改进和技术细节,原帖还有许许多多的细节改进这里就不再赘述。从这些点我们不难发现:
又帮官方内核除虫优化,又整合来自上游的优化代码,难道第三方内核真就这么香?「实验性」、「最新」、「极为先进」这样的字眼,往往与「不稳定」挂钩,新生的事物往往需要好几代的更迭才能逐渐被证明为可靠、稳定的。不妨在Changelog(更新记录)搜索一下fix(修复)这个字眼,看一看有多少更新是为了修复引入最新优化所带来的bug。
第三方内核往往也需要经过版本迭代、反复测试来进入一个发挥较为稳定的时期,且与原厂内核由专业工程师进行反复测试不同,第三方内核的反馈修复过程依赖于论坛中的玩机用户或是开发者本人,效率偏低。因此暂时不建议在日常使用的手机(dailydriverphone)上刷入第三方内核。
那么,这样一款充满着极客硬核意味的第三方内核,是如何步步成型,最后被我们玩机用户所获取到呢?
首先是厂商释出内核源码。
Android使用Linux作为系统的内核,根据其开源协议,厂商需要放出每款设备的内核源码。内核的开源确保了厂商对于操作系统的核心构建是对于公众开放可见的,任何开发者都可以阅读其代码来判断质量的好坏。而对于有能力的开发者来说,他们可以在厂商提供的内核源代码基础上开发第三方内核进行修补,甚至是锦上添花。
其次是厂商提供Bootloader解锁渠道。
Bootloader是厂商为了确保系统固件的官方可靠所设定的小软件。刷写第三方内核与第三方ROM类似,同等于对手机的操作系统进行修改,需要Bootloader解锁方可进行。可以说,解锁Bootloader是大部分玩机操作的第一步,无论是玩机用户还是第三方内核开发者,拿到设备的第一件事,很可能就是先行解锁Bootloader。
除了能获取到内核源码外,第三方内核开发者还需要在手机上亲自测试内核,这就需要他们至少拥有这款机型或是其衍生机型。可想而知,在海外销售得越火爆的机型,活跃的第三方开发者就越多,尤其是一加、小米的PocoPhone系列这些主打高性价比的品牌。
如果你和曾经的我一样,是一位喜爱刷第三方内核的玩机用户,那么在购买设备的时候就应该想好最好是认准小米、一加、Pixel等对于解锁较为友好的厂商,然后挑选几个机型,去对应的XDA论坛逛一逛寻找是否有现成的第三方内核,最后才是购买设备。
至于第三方内核如何寻找、XDA论坛该怎么逛,那就是我们接下来要讲的了。
「工欲善其事,必先利其器」,而能利其器的,或许就是一位好工匠。按照这样的思路来看,其实寻找好用的第三方内核,可以先从寻找优秀的第三方内核开发者入手。在如何塑造一款第三方内核上,不同的开发者其实也有着自己独特的理解和思考。
Sultan:原先主要是提供各个一加手机的第三方LineageOS以及第三方内核所需的上游代码,在购买Pixel2XL后开始推出自己的SultanKernel。针对Pixel系列的多任务性能自己写了低内存管理算法SLMK,挽救4GB于水火。内核设计目的是代替原厂内核,因此自定义选项非常少,主要是深层优化。
Flar2:老牌内核开发者,开发有主打稳定性的ElementXKernel,支持有Pixel、一加系列设备,主要是在原厂内核上添加固定的优化和自定义选项。同时是EXKernelManager、DevCheck的开发者。
1、内核开发者的头衔、感谢数。顺着上面寻找优质开发者的思路,开帖的内核开发者可能会有RecognizedDeveloper(认证开发者)等头衔,这份认可也同样可以从他一共得到的Thanks(感谢)数感受到,一些开发者甚至已经被感谢过好几万次。
2、帖子的活跃程度。进入某一机型的论坛,最为醒目的便是机型Banner横幅下的MOSTACTIVEXXXTOPICS,如果其中的帖子带有「Kernel」(内核)字样,可以试着进入看看。
如果看完了上面的文字,依然还是对于某款第三方内核跃跃欲试,那么是时候来看一下如何刷入一款第三方内核了。
解锁Bootloader是前文已经提到的刷入内核的大前提,另外也得要找好对应的内核包(已经少有.img格式的第三方内核包了,大多为.zip包),老生常谈的adb调试桥已经也已经在桌面端安装完毕。
第三方内核的开发者往往会一并给出内核安装方法,请优先使用此法。我们也会给出比较通用的两种刷入内核的方法。操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
作为比较通用常见,且已经沿用多年的玩机工具,刷内核这件小事对于TWRP来说只是小菜一碟。TWRP是一个开源的、社区性的玩机工具,是一个可以安装在Android设备上的自定义恢复模式,小到Mgaisk模块、第三方内核,大到第三方ROM,都可以用TWRP刷入。
如果你的设备有官方TWRP支持,那么我更建议你用这种方法。
以上终端指令均忽略文件目录和内核名称,请各位用户自行定位目录、对应内核包名称。
内核管理器一直能够备份内核、刷入开发者所开发的内核,但去年Flash内核开发者和Franco内核/FK内核管理器开发者联合提交了一种能够升级内核且保留magisk的办法后,内核管理器刷内核变得更加开放通用,还可以刷入一些体积较小的.zip文件。
如今,主流的内核管理器如EX内核管理器、FK内核管理器均已经支持刷入各种第三方内核。
接下来刷内核的步骤就像平时使用app那样稀疏平常,打开内核管理器刷入,然后等待完成后重启即可。
除非开发者有明确说明刷入内核可以保留Magisk,一般情况下我们都需要在刷入内核后重新刷入一次Magisk,如果有这个需求,不妨在刷入内核后转去MagiskManager重新刷入一次Magisk,再执行重启。
另外需要注意的是,由于金丝雀版本的Magisk改换了Root原理,导致无法使用内核管理器刷入内核。
操作不当可能会造成设备损坏,请确认机型对应并按照开发者要求的步骤进行刷入。
在系统OTA更新时需要将内核切换回原厂内核,可以借助MagiskManager手动回滚,也可以提前在TWRP制作原厂内核的备份。
如果想更换另一款第三方内核,而当前又已经刷写了一款第三方内核,在更换之前需要回滚一次当前系统/ROM的原厂/自带内核,以防出错。