Android系统与Linux内核版本的对应关系

5,565 阅读5分钟

1.Linux概述

Linux 系统是类 UNIX 操作系统大家族中的一员。所谓类 Unix 系统,是指继承 UNIX 的设计风格演变出来的系统,比如自由/开源的 GNU/Linux、FreeBSD、OpenBSD等,以及商用的 macOS、Sun的 Solaris 等等。它们都相当程度地继承了原始 UNIX 的特性,有很多相似之处,并且都在一定程度上遵守 POSIX 规范(UNIX 可移植操作系统接口规范)。

Linux 几乎是最著名的一个类 UNIX 系统。其最吸引人的一个优点是它不是商业操作系统,它的源码在GNU(GNU's Not Unix)公共许可证(GPL)下是开放的,任何人都可以获得源代码并研究它。

2.Linux内核版本

在 Linux 内核2.5版本之前,是通过简单的编号来区别内核的稳定版和开发板。每个版本号用三个数字描述,并有原点分隔。前两个数字用来表示版本号,第三个数字用来表示发布号。第二位版本号表示内核的类型:偶数表示稳定的内核;否则表示开发中的内核。

内核版本2.6之后,版本编号规则发生了很大的改变,第二个数字不再用于表示内核是稳定版还是开发版。Linux 这种新的开发模式意味着两种内核具有相同的版本号,但却有不同的发布号,比如2.6.10和2.6.11 具有新发布号的内核可能潜藏着不稳定性和各种错误。为了解决这个问题,内核开发者可能还发布带有补丁程序的内核版本,并用了第四位数字表述,例如2.6.11.12。

Linux 内核使用的版本模型与标准 AOSP 版本大不相同。随着 2.6 内核在 2003 年 12 月发布,内核开发者社区从之前具有单独开发和稳定内核分支的模型迁移到“仅限稳定”的分支模型。

2.1 稳定内核版本(Stable Kernel Releases)

由于之前的内核开发模型(每 2-3 个月发布一次新版本)被认为无法满足大多数用户的需求,Linux 内核稳定版模型于 2005 年随之诞生。

稳定的内核版本直接基于 Linus Torvalds 的版本,一般每周发布一次,具体取决于各种外部因素(处于一年中的哪个时间、可用的补丁程序、维护人员的工作量等)。稳定版本的编号开头为内核版本编号,末尾再添加一个数字。例如,Linus 发布了 4.4 内核,则基于此内核的稳定内核版本编号为 4.4.1、4.4.2、4.4.3,依此类推。表示稳定内核版本树时,该序列号通常简写为 4.4.y。

2.2 长期稳定内核(Long-term stable kernels)

这种新的稳定版本流程在采用一年之后,很多不同的 Linux 用户都表示希望延长对内核的支持,而不只是几个月时间。因此,长期支持 (Long Term Supported) 内核版本应运而生,第一个 LTS 内核 (2.6.16) 在 2006 年发布。从那时起,每年都会选择一个新的 LTS 内核,并且内核社区会为该内核提供最少2年的维护支持。

3.Android通用内核(Android Common Kernels)

AOSP通用内核 (AOSP common kernels,也称为 Android 通用内核或 ACK)是 kernel.org 内核的下游,包含与 Android 社区相关但尚未合并到Linux主线内核或长期支持 (LTS) 内核的补丁程序。

android-mainline 是 Android 功能的主要开发分支。每当 Linus Torvalds 发布内核版本或候选内核版本时,Linux 主线内核就会合并到 android-mainline 中。在 2019 年之前,Android 通用内核是通过克隆最新声明的 LTS 内核并添加 Android 专用补丁程序来构建的。2019 年,这一过程变为从 android-mainline 中分支出新的 Android 通用内核。

更多的信息可以参考官网介绍:source.android.com/devices/arc…

以下列举了不同的 Android aosp 版本对应的 Linux 内核版本

Android VersionAPI LevelLinux Version in AOSPHeader Version
    1.5   Cupcake3(2.6.27)
    1.6   Donut4(2.6.29)2.6.18
    2.0/1 Eclair5-7(2.6.29)2.6.18
    2.2.x Froyo8(2.6.32)2.6.18
    2.3.x Gingerbread9, 10(2.6.35)2.6.18
    3.x.x Honeycomb11-13(2.6.36)2.6.18
    4.0.x Ice Cream San14, 15(3.0.1)2.6.18
    4.1.x Jelly Bean16(3.0.31)2.6.18
    4.2.x Jelly Bean17(3.4.0)2.6.18
    4.3   Jelly Bean18(3.4.39)2.6.18
    4.4   Kit Kat19, 20(3.10)2.6.18
    5.x   Lollipop21, 22(3.16.1)3.14.0
    6.0   Marshmallow23(3.18.10)3.18.10
    7.0   Nougat24 3.18.48 4.4.04.4.1
    7.1   Nougat25 ?4.4.1
    8.0   Oreo26 3.18.72 4.4.83  4.9.444.10.0
    8.1   Oreo27 3.18.70 4.4.88  4.9.564.10.0
    9.0   Pie28         4.4.146 4.9.118 4.14.614.15.0
   10.0   Q29                 4.9.191 4.14.142 4.19.715.0.3
   11.0   R30                 5.0.3
   1231                 5.0.3

表格数据来自于:
android.stackexchange.com/questions/5…

Bionic简介
Bionic是Android系统的C库,包括包括libc,libm,libdl,libstd++,libthread_db,以及Android特有的链接器linker。

android不完全开源,规避GPL协议 谷歌没有使用Linux的GUN Libc,很大一部分原因是因为GNU Libc的授权方式是GPL 授权协议有限制,因为一旦软件中使用了GPL的授权协议,该系统所有代码必须开源.

谷歌在BSD的C库上的基础上加入了一些Linux特性从而生成了Bionic

因为性能的原因,因为Bionic的核心设计思想就是"简单",所以Bionic中去掉了很多高级功能。这样Bionic库仅为200K左右,是GNU版本体积的一半,这意味着更高的效率和低内存的使用,同时配合经过优化的Java VM Dalvik才可以保证高的性能

备注:BSD(original BSD license、FreeBSD license、Original BSD license)是一个给于使用者很大自由的协议,BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发)