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