因此,谷歌试图缩小Android设备内核与Linux主内核的差距,让设备内核更接近上游内核主线。为什么会出现这个问题?Android是一个基于Linux内核的操作系统,运行在Android设备上的内核实际上与Google选择的LTS Linux内核有很大的不同。

什么叫做微内核?与安卓系统有什么区别?

什么叫做微内核与安卓系统有什么区别

微内核微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。内核只提供最基础的服务,比如多进程调度、多进程通信(IPC)等。其中进程通信是作为连接应用与用户态系统服务的桥梁。安卓系统Android是宏内核的,也就是把所有系统服务都放到内核里,这样的内核是庞大的,Android 操作系统 1 亿行代码,内核一项就超过 2000 万行代码,非常复杂。

数据的交换和服务请求都在系统服务的代码之间完成,也是比较直接,高效的办法。与安卓系统的区别优点1.微内核,内核小,可以实现形式化验证,能显著提高安全2.系统服务模块化,可移植性高缺点1.通过进程通信的方式交换数据或者调用系统服务,而不是使用系统调用,造成额外的操作系统开销2.系统服务之间频繁收发数据,可能存在时延总结Android 操作系统未来转向 Chorm PC、平板,手表有 Android 的系统、IoT 有 IoT 系统,谷歌也在开发下一代操作系统,Fuchsia,它是微内核的,可适配各种各样硬件终端,但是 Fuchsia 还不是分布式设计,性能还不够好,但是是微内核架构,可以看到整个操作系统未来发展方向是微内核的。

Android的“内核控制流完整性防护”功能,到底有什么作用?

Android的“内核控制流完整性防护”功能,到底有什么作用

近日,Android 安全部门软件工程师 Sami Tolvanen 在开发者博客上撰写了一篇文章,透露了 Pixel 3 是首款部署了“LLVM 前沿控制流完整性(CFI)”的 Android 设备这一消息。该功能可以检查应用的一系列异常行为,表明攻击者试图利用程序中的漏洞、或者干扰其控制流。Android 开发团队一直致力于强化系统内核,现已开始采用基于编译器的安全缓解措施,以加强应对代码重用攻击的新方法。

【CFI 是“内核控制流完整性”的缩写,它能够斩断执行流的重定向,从而阻止恶意软件攻击】正如 Tolvanen 声明中解释的那样,攻击者可以通过覆盖在内存中存储的指针,利用执行内核代码的任意部分:为此,CFI 尝试通过添加额外的检查,来确认内核的控制流程停留在预先设计的版图中,以缓解这类攻击的影响。尽管这无法阻止攻击者利用一个已存在的 bug 获取写入权限,从而改变一个函数的指针。

但可以极大地限制可被其有效调用的目标,让攻击者在实践中利用漏洞的过程变得更加困难。谷歌为 Android 4.9 和 4.14 内核添加了对 LLVM 的 CFI 防护措施的支持。现在所有制造商都可以在自家设备上启用(借助通用的 Android 内核来实现)。Android 开发团队建议所有制造商,在它们基于 Android 9 的 arm64 设备上启用内核中的 CFI 特性,以便提供额外的内核漏洞防护。

谷歌系统升级,安卓将采用Linux内核,满足手机高性能需求,你怎么看?

谷歌系统升级,安卓将采用Linux内核,满足手机高性能需求,你怎么看

首先作为一个前资深的 Android 程序员,一定要纠正一下这个问题,不是谷歌系统升级,安卓「将」采用 Linux 内核。不是:「将」。而是 Android 一直就是采用的 Linux 内核。安卓(Android)本身就是一种基于 Linux 的自由及开放源代码的操作系统。系统内核Android 是运行于 Linux kernel 之上,但并不是 GNU/Linux。

因为在一般 GNU/Linux 里支持的功能,Android 大都没有支持,包括 Cairo、X11、Alsa、FFmpeg、GTK、Pango 及 Glibc 等都被移除掉了。Android 又以 Bionic 取代 Glibc、以 Skia 取代 Cairo、再以 opencore 取代 FFmpeg 等等。

Android 为了达到商业应用,必须移除被 GNU GPL 授权证所约束的部份,例如 Android 将驱动程序移到 Userspace,使得 Linux driver 与 Linux kernel 彻底分开。Bionic/Libc/Kernel/ 并非标准的 Kernel header files。

Android 的 Kernel header 是利用工具由 Linux Kernel header 所产生的,这样做是为了保留常数、数据结构与宏。Android 的 Linux kernel 控制包括安全(Security),存储器管理(Memory Management),程序管理(Process Management),网络堆栈(Network Stack), 驱动程序模型(Driver Model)等。

下载 Android 源码之前,先要安装其构建工具 Repo 来初始化源码。Repo 是 Android 用来辅助 Git 工作的一个工具。通过上述我们就可以看出 Android 就是运行在 Linux Kernel 之上的,基于授权版权等原因,它只不过是没有 GNU/Linux 功能那么全面。为什么会出现这个问题?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社区。所以,最近又有消息爆出,谷歌计划将Android内核统一到Linux内核主线上,后续还有很多工作要做。


文章TAG:内核  Android  提权  android  
下一篇