Android和Linux关系

需要明确三点:

  • 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

你可能感兴趣的:(android)