版权归原作者所有,如有侵权,请联系我们

[科普中国]-Linux内核层

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

Android 的核心系统服务基于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。Linux内核同时也作为硬件和软件栈之间的抽象层。

简介Android是在Linux内核的基础上构建的,Android的内核属于Linux内核的一个分支,它并不GNU/Linux,因为一般在GNU/Linux中被支持的功能,在Android大多没有被支持。众所周知,Linux是一个开源的操作系统,由非营利的组织——Linux基金会所管理。虽然Linux是开源的,但是Android必须在GNU GPL(用于保护开源软件的一个授权规范)的许可下使用Linux的源码,才可以商用。所以为了达到商业应用的目的,Android必须去除被GNU GPL所约束的部分。Android去除了Cairo、X11、Alsa、FFmpeg、GTK、Pango和Glibc等,并以Bionic取代Glibc、以Skia取代Cairo、以Opencore取代FFmpeg等。Android并没有用户空间驱动,而是将所有的驱动都放在内核空问中,并以HAL隔开版权问题。
目前,Android的Linux内核层包括安全管理、内存管理、进程管理、网络阶议栈、驱动程序模型和电源管理等,这些都依赖于Linux内核。由于Linux内核全部使用C语言编写,所以Android的Linux内核层也全部是用C语言编写的。1

Linux内核层的主要功能硬件驱动Linux内核层提供了几乎所有手机、平板电脑相关设备的驱动程序,实现系统与各种硬件的通信,如显示屏、摄像头、内存、键盘、无线网络、音频设备、电源等组件。2

主要的驱动如下所示:

1、显示驱动(DisplayDriver):基于Linux的帧缓冲(FrameBuffer)驱动。
2、键盘驱动(KeyBoardDriver):作为输入设备的键盘驱动。
3、Flash内存驱动(FlashMemoryDriver):基于MTD的Flash驱动程序。
4、照相机驱动(CameraDriver):常用的基于Linux的v4l2(VideoforLinux)驱动。
5、音频驱动(AudioDriver):常用的基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动。
6、蓝牙驱动(BluetoothDriver):基于IEEE802.15.1标准的无线传输技术。
7、WiFi驱动:基于IEEE802.11标准的驱动程序。
8、Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
9、PowerManagement(电源管理):比如电池电量等。

内存管理
Linux内核层还提供系统内存管理,实现对所有可用的内存进行统一编码管理,定义一整套内存定位,使用与回收的策略,提供了低内存管理器(Low Memory Killer)策略,Android系统可以根据系统运行资源情况,自动决定是否需要杀死进程来释放所需要的内存。Linux内核层还提供了匿名共享内存(ashmem)机制,系统为进程间提供大块共享内存,同时为内核提供回收和管理内存机制。另外,针对DSP和某些设备只能工作在连续的物理内存要求,系统内核层提供了Android PMEM机制解决了向用户空间提供连续的物理内存区域的问题。2

系统进程管理实现管理进程的创建与销毁,管理进程间的通信,解决与避免死锁问题等。Android系统的进程间通信基于Binder机制实现,一个进程可以非常方便地实现跨进程调用一个进程所提供的功能,并获取返回的执行结果。2

文件系统管理Android平台采用Yaffs2作为MTD nand flash文件系统,Yaffs2使用更小的内存来保存它的运行状态,其垃圾回收机制非常简单快速,在大容量的NAND Flash上性能表现尤为突出。2

电源管理Android电源管理,一个基于标准Linux电源管理系统的轻量级的Android电源管理驱动,针对嵌入式设备做了很多优化。2

USB管理Android的USB驱动是基于Gaeget框架的,USB Gadget驱动是一个基于标准Linux USB gadget驱动框架的设备驱动。2

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所