矗立的高楼大厦,依赖于牢固的基底才能屹立不倒。如果说智能手机上的操作系统也有基底,那一定是位于底层的内核。小到每一次指纹解锁,大到畅玩手游大作,内核就像一位称职的经理默默地在底层工作,协调软件和各式硬件。
Android 系统的构成
内核是至关重要的系统组件,对于 Android 来说,更换内核却是一件不怎么稀罕的事——得益于 Android 生态的开放性,我们甚至可以像刷写第三方 Recovery 和定制 ROM 那样随意更换第三方内核,从底层着手为设备带来完全不同的使用体验。
那具体而言 Android 系统的第三方内核究竟能为我们的手机带来哪些改变,在支持的设备上我们又该如何选择和刷入一款第三方内核呢?
如何读懂第三方内核
以新鲜出炉的 arter97 kernel 为例,Arter97 作为一名负责的开发者,将能够解释的技术细节都罗列在了 Detail(细节)一栏里(这样做的开发者并不多)。
我们不妨就以这个面向一加手机 7/7 Pro 的内核为例进行讲解,了解第三方内核到底做了什么改动,进而更好地评估使用第三方内核带来的收益与风险。
arter97 所附带的所有内核特性
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.
CAF 的首页,标注了三类人群:制造商、开发者、Makers
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。
这六个点就是这款内核相较于原厂内核所做出的一些主要改进和技术细节,原帖还有许许多多的细节改进这里就不再赘述。从这些点我们不难发现:
第三方内核是开发者出于自己的内核理念、理解所制作的个人作品。原厂内核的一些配置有时并不是最优解android游戏开发论坛,来自 Google 和高通的方案最终效果可能更好。第三方内核对比原厂内核有更新频率上的天然优势,结合开源社区能够更快追上最新提交的代码。第三方内核可能会提供部分的内核自定义选项来供用户选择(下篇会详细提到)
又帮官方内核除虫优化,又整合来自上游的优化代码,难道第三方内核真就这么香?「实验性」、「最新」、「极为先进」这样的字眼,往往与「不稳定」挂钩,新生的事物往往需要好几代的更迭才能逐渐被证明为可靠、稳定的。不妨在 Changelog (更新记录)搜索一下 fix (修复)这个字眼,看一看有多少更新是为了修复引入最新优化所带来的 bug。
一款内核更新到稳定期,往往需要大量 fix
第三方内核往往也需要经过版本迭代、反复测试来进入一个发挥较为稳定的时期,且与原厂内核由专业工程师进行反复测试不同,第三方内核的反馈修复过程依赖于论坛中的玩机用户或是开发者本人,效率偏低。因此暂时不建议在日常使用的手机(daily driver phone)上刷入第三方内核。
那么,这样一款充满着极客硬核意味的第三方内核,是如何步步成型,最后被我们玩机用户所获取到呢?
一款第三方内核是如何诞生的?
首先是厂商释出内核源码。
Android 使用 Linux 作为系统的内核,根据其开源协议,厂商需要放出每款设备的内核源码。内核的开源确保了厂商对于操作系统的核心构建是对于公众开放可见的,任何开发者都可以阅读其代码来判断质量的好坏。而对于有能力的开发者来说,他们可以在厂商提供的内核源代码基础上开发第三方内核进行修补,甚至是锦上添花。
对于注重国际声誉的厂商来说,在机型发布后立即释出对应的内核源码已经是一项惯例。一个反面例子是,小米 A1 在推出后迟迟不释出源码,被 媒体 和 开发者 几近口诛笔伐。或许是这份压力的缘故,近年来小米的内核释出速度已经有所改观。
Franco 内核开发者的指责
其次是厂商提供 Bootloader 解锁渠道。
Bootloader 是厂商为了确保系统固件的官方可靠所设定的小软件。刷写第三方内核与第三方 ROM 类似,同等于对手机的操作系统进行修改,需要 Bootloader 解锁方可进行。可以说,解锁 Bootloader 是大部分玩机操作的第一步,无论是玩机用户还是第三方内核开发者,拿到设备的第一件事,很可能就是先行解锁 Bootloader。
当然内核开发者也需要拥有相关设备。
除了能获取到内核源码外,第三方内核开发者还需要在手机上亲自测试内核,这就需要他们至少拥有这款机型或是其衍生机型。可想而知,在海外销售得越火爆的机型android游戏开发论坛,活跃的第三方开发者就越多,尤其是一加、小米的 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」(内核)字样,可以试着进入看看。
论坛首页往往会推荐一些比较活跃的帖子