免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 795 | 回复: 0
打印 上一主题 下一主题

Android启动过程概要 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-17 15:50 |只看该作者 |倒序浏览
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.

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP