需要明确三点:
Android是在Linux内核基础之上,Linux提供核心服务:安全
,内存管理
,进程管理
,网络
和驱动模型
等。Android按移动设备需求,在文件系统
,内存管理
,进程管理通讯
和电源管理
进行修改,添加了驱动相关新功能。
Android系统层和Linux内核之间,加了Dalvik的Java虚拟机。Dalvik可执行文件(.dex),Java文件.class
通过dx
工具转化为.dex
格式文件。
Android Binder是基于OpenBinder框架一个驱动。IPC通讯,/drivers/staging/android/binder.c
。
Android 电源管理是基于Linux电源系统轻量级Android电源管理驱动,针对嵌入式设备做了优化。利用锁和定时器来切换系统装态,控制设备不同状态下功耗,以达到节能的目的。
kernel/power/earlysuspend.c
kernel/power/consolerealysuspend.c
kernel/power/fbearlysuspend.c
kernel/power/wakelock.c
kernel/power/userwakelock.c
Android中低内存管理和Linux标准OOM(Out of Memory)相比,机制更加灵活,可以根据需要杀死进程类释放需要的内存。Low Memory Killer
代码非常简单,里面关键函数lowmem_shrinker()
,作为一个模块初始化调用register_shrinke
注册一个low_shrinker()
,会被vm在内存紧张时候调用。lowmem_shrinker
完成具体操作,简单寻找一个最合适进程杀死,从而释放它的占用内存。drivers/staging/android/lowmemorykiller.c
匿名共享内存为进程间提供大块共享内存,同时为内核提供回收和管理的内存机制。如果一个程序访问一个释放了后的内存块,收到一个错误提示,然后重新分配并重载数据。mm/ashmem.c
。
PMEM用于向用户提供连续的物理内存区域,DSP和某些设备只能工作在连续物理内存上。驱动提供了mmap,open,release和ioctl等接口.drivers/misc/pmem.c
Android Logger是一个轻量级日志设备,用于抓取Android 系统各种日志。
drivers/staging/android/logger.c
Android Alarm提供了一个定时器,用于把设备从睡眠状态唤醒,同时提供一个即使在设备睡眠也会运行的时钟基准。driver/rtc/alarm.c,driver/rtc/alarm-dev.c
此驱动是一个基于标准Linux USB gadget驱动框架设备驱动,Android 的USB驱动基于gadget框架的.
drivers/usb/gadget/android.c
drivers/usb/gadget/f_abd.c
drivers/usb/gadget/f_mass_storage.c
为了提供调试功能Android 允许调试日志信息写入一个称为RAM Console设备里,它是一个基于RAM的Buffer.
drivers/staging/android/ram_console.c
Android timed device提供对设备进行定时控制的功能,目前仅支持vibrator和LED设备。drivers/staging/android/timed_output.c(time_gpio.c)
Android系统采用Yaffs2作为MTD nand flash 文件系统。Yaffs2使用更小内存来保存运行状态,占用内存小,垃圾回收非常简单切快速.
/fs/yaffs2