Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522737
  • 博文数量: 114
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 733
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-24 13:40
文章分类
文章存档

2014年(5)

2013年(14)

2012年(95)

分类:

2012-07-19 09:00:22

原文地址:Android启动过程概要 作者:icymoon

0. 总体启动过程
BootRom->Boot Loader
kernel
Init
Zygote
System Server

1. 加电和boot Rom的执行
最初上电时,时钟还未设置,没有任何初始化,只有Memory可用;
供电稳定后,从固化在CPU ASIC中的Boot ROM代码开始执行。这段代码会检测启动设备,并找到boot loader的第一阶段。然后,加载第一阶段的boot loader到internal RAM并jump执行boot loader。

2. boot loader阶段
GPL的boot loader uboot. 一般硬件厂商会出OEM的boot loader,不公开。
第一阶段的boot loader会检测并建立external RAM,然后会将第二阶段的boot loader(boot loader的主要部分)加载到external RAM,第二阶段的boot loader。
第二阶段的boot loader是第一个run起来的主要程序,可能包括:建立文件系统, 额外的内存管理、网络支持和其他功能。在移动设备或手机上,也负责加载modem CPU的代码并且设置内存保护和一些安全选项。boot loader执行完这些后,就要加载内核扔到RAM里,并会传递一些参数给内核(传递方式是把内核参数写入内存等内核启动时读取)。
这些都做好后,就跳至内核执行,通常是解压内核的代码。内核阶段会假设系统一切都正常。

3. 内核
内核启动就和PC机上的差不多了,这里就不详细写了。
等MMU可用(Mips没有MMU, ARM有 -_-b),cache初始化后,虚存就可用了,这时候也就能启动用户态进程了。init从此开始(system/core/init)。

4. Init
找init.rc(system/core/rootdir)

5. Zygote & Dalvik
init进程加载了zygote,zygote初始化Dalvik

6. system server
第一个java程序,它负责启动Android服务,frameworks/base/services/java/com/android/server/SystemServer.java

7.启动完成
广播ACTION_BOOT_COMPLETED.

阅读(1141) | 评论(0) | 转发(0) |
0

上一篇:Android编译

下一篇:Android 移植

给主人留下些什么吧!~~