文章目录
Android基于Linux
Android是架构在 Linux之上的,但也对它做了大量的修改。其中包括部分地打破了 Linux主流版本间的兼容性。
Android 内核源码树大概是在 2.6.27 版本中从 Linux 内核主线上分离出来的。但到了Android3.3 又开始回归
Linux 内核主线了。
相似性
在用户模式上,谷歌在一个独立的完整代码仓库中,维护着各种框架(framework)和AOSP(Android 开源项目,Android Open SourceProject)的运行时。从高级视角出发,尽管很难非常准确地说出这两个操作系统之间到底有多少不同,但是大致的估算 Android 和 Linux 在内核层上有 95%的相似之处,而在用户模式下有约65%的相似性。
区别
这一估算的依据是:考虑到在内核级别上,除了少数一些区别之外(ARM 处理器及一些硬件的驱动是非加不可的),内核源码的剩余部分并没有被修改过。这些不同(包括 IPC、内存以及日志增强)归在一起,统称为“Android 特有的特性”。
不过到目前为止,其中的大多数事实上已经被合并到 Linux 主线上去了。有些替换了内核中类似的功能,有些被放在了drivers/staging/android目录中。
两个全新的组件: Dalvik 虚拟机运行时和硬件抽象层(Hardware Abstraction Layer)
而在用户态这一级上,由于引入了两个全新的组件 Dalvik 虚拟机运行时和硬件抽象层(Hardware Abstraction Layer)。再加上替换了 Bionic 的 glibc,以及提供了一个定制版本的 init(系统启动守护进程),Android 和 Linux 的分歧就大多了。
不过尽管是这样,操作系统更多底层的大部分组件仍然没有被修改过,那些原生二进制可执行文件以及进程和线程的行为仍然和它们在 Linux 系统中时一模一样。
Linux已有但是没有发布的特性
Android还更巧妙地使用了一些 Linux 中已有的特性,这些特性大多存在于 Linux 桌面发布版本中,但往往还没有被使用。这些特性包括控制组 (control group)、内存不足时的应对方案(Linux 中也有OOM,但Android 把它扩展成了它自己的内存不足时的进程清理器)以及些安全特性–权能和SELinux。
一些开源项目
Android 中也使用了一些开源项目,这些项目在 Linux 中并不怎么流行,但却是支持 Android的特性的骨干柱石。这些项目(位于 AOSP 的extermal/目录中)主要是负责实现 Android 的网络功能的,包括racoon (vpn)、mdns (服务发现和 Wi-Fi Direct)、dnsmasq、hostapd (tethering和Wi-Fi Direct)和 wpa_supplicant (Wi-Fi)。
图:Android和主流Linux架构比较
图:谷歌官方架构图
参考
《最强Android书:架构大剖析》
https://developer.android.com/guide/platform?hl=zh-cn