Android是基于Linux内核的操作系统,但是,运行在Android设备上的内核其实与Google选择的LTS版本Linux内核有很大不同。
在到达每一台Android设备前,内核会经历三个阶段的fork:Google会先选择某个LTS(长期支持)版本的Linux内核,打上Android操作系统的特定补丁,使其成为Android通用内核;紧接着,通用内核被交付给高通等SoC供应商,打上硬件补丁;最后,SoC内核再被移交至设备制造商,打上设备特定的各类元件补丁,这也就构成到每台设备中的设备内核。
这是一个及其漫长的过程,执行多重fork并处理数百万行代码大大减慢了整个开发速度。因此,Android设备使用的内核相较于Linux内核主线要滞后两到三年的时间。Google于10月份最新发布了Pixel 4,其Linux内核则是2017年11月发布的4.14 LTS版本。并且由于过大的工作量,Android设备通常不获取内核更新,它将永远停留在4.14版本上。
再者,各种设备的内核都不尽相同,一台设备的特定内核无法在其他设备上工作。于是,Google正试图缩小各Android设备内核与主线Linux内核间的差距,让设备内核更接近上游内核主线。
在今年的 Linux Plumbers Conference上,Android内核团队负责人Sandeep Patil表示,他们的目标是从根本上找到Android运行所需要的、但不必在给定的硬件上运行的东西,然后将其引入上游并尽可能接近主线。
Google的打算是复制其早期工作Project Treble以模块化Android。Project Treble用于在Android和HAL(硬件抽象层)之间创建稳定的接口。与此类似,Google计划稳定Linux的内核 ABI,从而提供一个稳定的写入接口,使硬件供应商可以轻松地插入代码,最终消除特定的设备内核。
Google的高级软件工程师MatthiasMännich展示了一幅预想中的内核体系结构图。”下一代Android设备“内核将由通用内核镜像(Generic Kernel Image,GKI)和多个 GKI 模块构成,特定硬件的驱动程序(可能是闭源驱动)将作为内核模块加载。总之在该设想中,所有东西都被模块化了。
考虑到Android生态系统的技术壁垒和多样性,这应该不是一件容易的事情。无论如何,将Android设备内核引入主线Linux内核肯定会使包括Android用户、手机制造商和Linux社区等在内的不少人受益。不过Google的计划刚刚开始,后续还有更多的工作要完成。