Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1830077
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类: 嵌入式

2011-01-17 15:50:10

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.

阅读(1562) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~