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 Version | API Level | Linux Version in AOSP | Header Version |
|---|---|---|---|
| 1.5 Cupcake | 3 | (2.6.27) | |
| 1.6 Donut | 4 | (2.6.29) | 2.6.18 |
| 2.0/1 Eclair | 5-7 | (2.6.29) | 2.6.18 |
| 2.2.x Froyo | 8 | (2.6.32) | 2.6.18 |
| 2.3.x Gingerbread | 9, 10 | (2.6.35) | 2.6.18 |
| 3.x.x Honeycomb | 11-13 | (2.6.36) | 2.6.18 |
| 4.0.x Ice Cream San | 14, 15 | (3.0.1) | 2.6.18 |
| 4.1.x Jelly Bean | 16 | (3.0.31) | 2.6.18 |
| 4.2.x Jelly Bean | 17 | (3.4.0) | 2.6.18 |
| 4.3 Jelly Bean | 18 | (3.4.39) | 2.6.18 |
| 4.4 Kit Kat | 19, 20 | (3.10) | 2.6.18 |
| 5.x Lollipop | 21, 22 | (3.16.1) | 3.14.0 |
| 6.0 Marshmallow | 23 | (3.18.10) | 3.18.10 |
| 7.0 Nougat | 24 | 3.18.48 4.4.0 | 4.4.1 |
| 7.1 Nougat | 25 | ? | 4.4.1 |
| 8.0 Oreo | 26 | 3.18.72 4.4.83 4.9.44 | 4.10.0 |
| 8.1 Oreo | 27 | 3.18.70 4.4.88 4.9.56 | 4.10.0 |
| 9.0 Pie | 28 | 4.4.146 4.9.118 4.14.61 | 4.15.0 |
| 10.0 Q | 29 | 4.9.191 4.14.142 4.19.71 | 5.0.3 |
| 11.0 R | 30 | 5.0.3 | |
| 12 | 31 | 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协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发)