Android 支持主线 Linux 内核指日可待?
整理 | 郭芮
作为当前市场上唯一能与 iOS 抗衡的移动操作系统,基于 Linux 开发的 Android 系统重要性不言而喻。但是为了使其更加适应智能手机的需求,华为、三星以及谷歌自己等 OEM 厂商,乃至高通和联发科等芯片厂商,其实都在 Android 系统的底层方面进行了大量的修改。这也就不可避免地带来了系统安全性、维护性等诸多问题,从而备受开发者吐槽。
为什么 Android 设备总是运行古老的内核?
如果你对手机有一定的了解,那么你肯定知道谷歌的 Android 系统是基于 Linux 内核的操作系统,但是,运行在 Android 设备上的内核其实与 Google 选择的 LTS 版本 Linux 内核有很大不同。
通常来说,Android 设备使用的内核会经历三次 fork:
首先是 Google 选择一个 LTS 版本,将其转变成 Android Common 内核——即打上了 Android OS 特有的补丁;
Android Common 随后提供给 SoC 供应商如高通,经历第二次 fork,打上高通硬件补丁变成 SoC 内核;
该内核之后提供给设备制造商经历第三次 fork ,打上支持设备不同元件的内核补丁变成设备内核,这个内核才是最后随手机提供给客户的。
在去年的 Linux Plumbers 大会上,谷歌工程师 Sandeep Patil 也曾就这个问题详细介绍过。他表示:
Android 内核起初是一个来自主线的长期稳定(LTS)版本,这些版本结合 Android 核心的专有代码构成了 Android 公共内核版本。供应商选择一个公共内核,然后添加更多的树外代码,从而创建一个特定于片上系统(SoC)的内核,并提供给设备制造商。
最终,这些 SoC 内核中的其中一个被冻结,可能加入了另外一些树外代码,作为一个特定设备模型的内核。现在,只需要几周就可以把一个 LTS 版本合并到 Android 公共内核中,但它仍然需要几年才能成为设备内核。
这就是为什么 Android 设备总是运行古老的内核。
以 Google 10 月份最新发布的旗舰手机 Pixel 4 为例,其使用的是 Linux kernel 4.14 LTS,这个版本是在 2017 年 11 月发布的,而且在可预见的未来,该型号的手机会一直停留在 4.14——总之,Android 内核的开发和管理方式从一开始就消除了使用 Linux 带来的许多优势:内核更新缓慢,大量树外代码的使用使得要合并新的稳定更新变得极为困难。
为减少这样的代码、提升系统的安全性,同时也为了更方便地维护系统,谷歌已经投入了大量的资源,并试图缩小各 Android 设备内核与主线 Linux 内核间的差距,让设备内核更接近上游内核主线。
模块化的未来?
在今年的 Linux Plumbers Conference 大会上,谷歌工程师在公司如何使 Android 系统底层更加接近主流 Linux 内核方面做了演讲。
其表示,具体方法是模块化:谷歌计划稳定 Linux 的内核 ABI,Android 内核将由 Generic Kernel Image (GKI) 和多个 GKI 模块构成,以模块化方式加载所需的硬件驱动或其它补丁,从而提供一个稳定的写入接口,使硬件供应商可以轻松地插入代码,最终消除特定的设备内核。
总之在该设想中,所有东西都将被模块化。
随着 Linux 内核的演变,目前的 Linux 内核与以往相比更加适合在移动设备当中使用,因此谷歌已经不需要对目前主流的系统内核进行很大的改动。谷歌表示,计划的第一步是将在 Android 内核方面的修改更多地回归到主流 Linux 内核上。截至 2018 年 2 月,与 Linux 4.14.0 内核相比,Android 通用内核插入了 32000 行代码,并且删除了 1500 多行代码。与几年前 60000 行代码的插入量相比,谷歌已经大幅度减少了对内核代码的修改程度。
此外,根据谷歌的计划,目前处于开发阶段的 Fuchsia 系统将在未来代替目前主流的 Android 系统。这款采用自定义内核的系统,可以更好地消除与 Linux 系统有关的技术障碍。对于芯片制造商与 OEM 商场的修改,谷歌将驱动程序和应用程序与 Android 内核区分开,从而保持系统内核的纯净度——其 2017 年推出的 Project Treble 项目也是谷歌计划的一部分。
这也意味着,虽然在 Android 设备上运行主线内核的梦想还没有实现,但谷歌的动作可能会让这一天来得比想象中更快。
写在最后
无论如何,将 Android 设备内核引入主线 Linux 内核肯定会是大势所趋的未来,包括 Android 用户、手机制造商和 Linux 社区等在内的不少人都将受益。在引导 Android 内核尽可能接近主线的路上,谷歌也一直在努力。但是考虑到 Android 生态系统的技术壁垒和多样性,这应该不是一件容易的事情。
不过谷歌的计划刚刚开始,后续的工作就留待继续完成了。
参考链接:
https://arstechnica.com/gadgets/2019/11/google-outlines-plans-for-mainline-linux-kernel-support-in-android/
https://www.solidot.org/story?sid=62680
https://blog.csdn.net/weixin_33725270/article/details/89167718
【End】
热 文 推 荐
☞Google 是如何做 Code Review 的?| 原力计划
☞腾讯程序员失业 3 个月,靠送外卖谋生:职场半坡,生存事大!