当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > Android内核和Linux内核的差别

Android内核和Linux内核的差别 时间:2018-09-27      来源:未知

Android系统的系统层面的底层是linux,中间加上了一个叫做Dalvik的Java虚拟机和ART运行环境,表面层上面是Android运行库。每个Android应用都运行在自己的进程上,享有ART和Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一个设备上高效运行,Dalvik被改写过。

Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)——该格式经过优化,以降低内存耗用到低。底层功能——例如线程和低内存管理方面,Dalvik虚拟机是依赖Linux内核的。由此可见,可以说Android是运行在Linux之上的操作系统,但是它本身不能算是Linux的某个版本。

Android内核和Linux内核的差别主要体现在11个方面,如下:

1、Android Binder

Android Binder的源代码位于 drivers/staging/android/binder.c

Android Binder是基于OpenBinder框架的一个驱动,用于提供Android平台的进程间通信(IPC)。

Linux内核系统上层应用的进程间通信主要是D-bus(Desktop bus),采用消息总线的方式来进行IPC。

2、Android电源管理(PM)

Android电源管理是一个基于标准Linux电源管理系统的轻量级的Android电源管理驱动,针对嵌入式设备做了很多优化。利用锁和定时器来切换系统状态,控制设备在不同状态下的功耗,以达到节能的目的。

Android电源管理的源代码分别位于如下位置:

kernel/power/earlysuspend.c

kernel/power/consoleearlysuspend.c

kerne/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

Android 5.0版本将引用JobScheduler调度程序,好处是增加设备续航时间,以达到节省电量的目的。

3、低内存管理器(Low Memory Killer)

Android中的低内存管理器和Linux标准的OOM相比,其机制更加灵活,他可以根据需要杀死进程来释放需要的内存。Low Memory Killer的代码很简单,关键的一个函数是Lowmem_shrinker.作为一个模块在初始化时调用register_shrinker注册了一个lowmem_shrinker,它会被vm在内存紧张的情况下调用。Lowmem_shrinker用来完成具体操作。简单的说就是寻找一个合适的进程杀死,从而释放它占用的内存。

低内存管理器的源代码位于drivers/staging/android/lowmenorykiller.c

4、匿名共享内存(Ashmem)

匿名共享内存为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。如果一个程序尝试访问Kernel释放的一个共享内存块,它将会收到一个错误提示然后重新分配内存并重载数据。

匿名共享内存的源代码位于mm/ashmem.c

5、Android PMEM

PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上。驱动中提供了mmap、open、release、ioctl等接口。

Android PMEM的源代码位于drivers/misc/pmem.c

6、Android Logger

Android Logger是一个轻量级的日志设备,用于抓取Android系统的各种日志,是Linux所没有的。

Android Logger的源代码位于drivers/staging/android/logger.c

7、Android Alarm

Android Alarm提供了一个定时器用于把设备从睡眠状态唤醒,同时它也提供了一个即使在设备睡眠时也会运行的时钟基准。

Android Alarm的源代码位于drivers/rtc/alarm.c 和 drivers/rtc/alarm-dev.c

8、USB Gadget驱动

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

USB Gadget驱动的源代码位于如下位置。

drivers/usb/gadget/android.c

drivers/usb/gadget/f_adb.c

drivers/usb/gadget/f_mass_storage.c

9、Android Console

为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备中,它是一个基于RAM的Buffer。

Android Ram Console的源代码位于 drivers/staging/android/ram_console.c

10、Android timed device

Android timed device 提供了对设备进行定时的控制功能,目前仅支持vibrator和LED设备。

Android timed device 的源代码位于drivers/staging/android/timed_output.c(timed_gpio.c)

11、Yaffs2文件系统

在Android系统中,采用Yaffs2作为MTD NAND Flash文件系统。Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,Yaffs2使用更小的内存来保存它的运行状态,因此占用内存小;Yaffs2的垃圾回收非常简单而且快速,因此能达到更好的性能;Yaffs2在大容量的NAND Flash上性能表现尤为明显,非常适合大容量的Flash存储。

Yaffs2文件系统位于fs/yaffs2/.

上一篇:Linux C下的命令行参数解析

下一篇:用U盘安装Centos6.5 + Win7 双系统

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部