Android Authority上的链接可能会为我们赚取佣金;了解更多信息。
花足够的时间在安卓系统,甚至PC上,最终你会遇到“Linux内核”这个词。安卓系统也使用Linux内核。事实上,它是手机工作方式中不可或缺的一部分,但它是什么?
Linux部分很容易理解——它是Linus和Unix之间的文字游戏,就像Linus Torvalds一样,他是我们称之为Linux的类Unix操作系统的原始创建者。但是内核呢?什么是计算机和其他设备的内核?我们所说的Linux内核是什么意思?让我们看看
简而言之,内核是管理手机CPU资源、系统内存和系统设备(包括文件系统和网络)的核心程序。它还负责管理智能手机上运行的所有流程或任务。这意味着当你启动一个应用程序时,是内核将应用程序加载到内存中,创建所需的进程,并启动应用程序运行。当应用程序需要内存时,是内核分配内存。当应用程序需要联网时,所有底层处理都由内核完成。
蓝牙等设备的驱动程序也在内核中。当应用程序希望在后台执行任务时,由内核处理后台线程。当应用程序关闭时,内核将清理应用程序使用的所有内存和其他资源。正如您所看到的,内核是确保您的Android手机真正实现预期功能的基本部分。
所有多任务操作系统都有一个不同形式的内核。Windows有一个内核,OSX有一个内核,iOS有一个内核,当然Android也有一个内核。但其中只有Android使用Linux内核。Windows有自己的内核,通常被称为NT内核,而OS X和iOS使用的内核被称为Darwin。
还有其他内核,包括FreeBSD、OpenBSD和NetBSD项目中类似Unix的内核;来自FreeRTOS等项目的实时内核;来自Zephyr等项目的嵌入式内核;甚至像Arm的mbed OS内核这样的低功耗内核。这意味着从物联网设备或可穿戴设备到超级计算机的任何计算设备都使用内核。
Linux内核是一个;复杂的软件。它包含数百万行源代码。这包括所有驱动程序(大部分代码)以及对不同系统架构(ARM、x86、RISC-V、PowerPC等)的支持。当内核是为一个特定的设备(比如智能手机)构建时,并不是所有的源代码都被使用,但是即使你去掉了一个特定构建不需要的东西,它仍然是复杂的。
与所有复杂的系统一样,在设计内核时可以使用不同的方法。Linux内核被称为单片内核。这意味着内核是一个使用一个内存空间的程序。主要的替代方法是微核方法。对于微内核,内核的基本要素被放在尽可能小的程序中,它们与作为独立服务器或服务运行的其他内核级程序交互。
早在1992年Linux早期,Linus Torvalds和Andrew Tanenbaum教授(他以操作系统设计和网络方面的书籍而闻名)进行了一次在线讨论(有人说是一场火焰战)关于单片内核设计与微内核的不同优点。Tanenbaum更喜欢微内核,Linus正在编写单片内核。这已经成为历史,因为Linux仍然是单片内核,Android中使用的内核也是如此。如果你对类Unix的微内核操作系统感兴趣,那么你应该看看Minix 3.
由于Linux是一个单片内核,因此需要有一种方法根据您的需要启用和禁用内核的某些部分。这是在编译时使用允许根据需要对内核进行调优、修剪和配置的系统来完成的。有些配置不仅仅是激活或停用某些功能-它们实际上改变了内核的行为。这在构建和更改智能手机硬件功能时非常有用。
因为Linux是开源的,而且由于Android开源项目(AOSP),Android的核心本身也是开源的,有一个为Android智能手机提供替代内核的开发者和爱好者社区。然而,它们的受欢迎程度和可用性取决于您的设备的确切品牌和型号。
从表面上看,Android是一个不错的启动器,一些应用程序如Chrome web浏览器或您的社交媒体应用程序,可能还有一些游戏。但是,在用户界面下面,有许多子系统、库和框架。
让应用程序运行(无论是本机运行还是在Java虚拟机中运行)Android为通知、位置服务、字体、web渲染、SSL、窗口管理等提供了大量的库和框架。还有一个特殊的服务叫做SurfaceFlinger,它负责将需要绘制到单个缓冲区中的所有不同内容合成到一个缓冲区中,然后在t屏幕。
在Android特定的库和框架下是Linux内核。除了管理进程、内存和电源管理,Linux内核还包含它支持的所有不同芯片架构和硬件驱动程序的代码。这些驱动程序包括摄像头、蓝牙、Wi-Fi、闪存、USB和音频驱动程序。
Android还为Linux内核添加了一些特殊功能,使其更适合于智能手机。这些功能包括低内存杀手(Low Memory Killer),该进程监视内存状态,并通过杀死最不重要的进程对高内存需求作出反应,从而保持系统运行,以及唤醒锁,一种应用程序告诉内核设备需要继续运行的方式。
安卓8.0引入了Project Treble,这是安卓的重新架构,在操作系统框架和特定于设备的低级软件之间创建了一个定义良好的接口。使用Linux内核模块,SoC和特定于主板的驱动程序从主内核中分离出来,这意味着智能手机制造商可以在不改变核心内核的情况下开发设备的特定功能。Treble的设计目的是让制造商更容易更新智能手机,而不必担心底层代码。
由于Android设备的多样性,每个品牌和型号上运行的内核将略有不同。SoC以及其他模块(如GPS、音频等)将有特定的驱动程序。各智能手机制造商将与SoC提供商(高通公司、联发科等)合作,以最理想的方式为任何特定型号配置内核。这意味着智能手机制造商通常会开发特定于设备的功能,覆盖常见的内核配置,并向Linux内核添加新的驱动程序。
CPU调度程序就是一个很好的例子;当内核需要决定下一步运行哪个任务以及在哪个CPU内核上运行时,它使用调度器。大多数Android智能手机都是异构多处理器(HMP)系统。这意味着并非处理器中的所有内核都是相等的。一些是高性能的,而另一些提供更高的能源效率。使用能量感知调度程序(EAS),内核可以预测其决策对CPU能耗的影响,以及可用的性能水平。
智能手机制造商可以调整EAS的参数,以便在使用更多能量的同时提高性能,或在节省电池的同时降低性能。智能手机制造商还可以选择用自己设计的调度器替换调度器。
每个智能手机制造商都努力以最佳方式配置内核,以实现所需的所有功能,同时以尽可能高的效率提供最佳性能。与SoC制造商一起,还有一些工程师致力于调整软件,以最大限度地利用硬件。
话虽如此,智能手机制造商在配置Linux内核的方式上并不仅仅是犯错误或做出错误的决定。众所周知,原始设备制造商在追求良好的电池寿命时使用了过于激进的设置。例如,OnePlus被发现限制OnePlus 9 Pro的性能以延长电池寿命,而其他人则被发现在基准测试运行时作弊并人为提高CPU性能。
Linux成功的一个消极方面是变化很快。为了提供一定程度的稳定性,内核的长期支持(LTS)版本已经支持了几年。Android通用内核(ACK)取自主Linux内核,包括特定于Android的补丁。
从Android 11开始,ACK用于创建通用内核映像(GKI)。如果SoC和驱动程序支持在供应商模块中实现,则这些64位Arm内核可用于任何设备。其思想是通过统一核心并将特定于SoC的部分移出内核并移入可加载模块来解决内核碎片问题。这反过来将减少OEM的内核维护负担,同时将特定于硬件的组件从核心内核中分离出来。
Android 12首次发布了一些带有GKI内核的设备。谷歌已承诺定期发布带有关键缺陷修复的签名引导映像。由于GKIs提供的二进制稳定性,这些映像可以在不更改供应商映像的情况下安装。
结果将改进Google发布新Linux内核供通用的方式,从而有助于提高安全性,并且有可能增加设备接收更新和修复的年数。祝你好运