Android系统启动过程 (翻译自一篇英文Blog)

Android系统启动过程:

1.系统上电,此时CPU处于未初始化状态,内部时钟没有建立,可用的Memory只有internal RAM,当Power

supply稳定之后,会启动Boot Rom code, 一段集成在CPU芯片中的代码;
Boot Rom的代码会检测下一步的boot media,决定系统第一阶段的boot loader;

一旦boot media的动作运行起来之后,boot Rom会load检测到的loader到RAM中,之后Boot Rom的代码会做

个跳转,转到Boot loader继续执行;

Boot loader主要负责加载系统内核,这个类似于 GRUB或者嵌入式中的LinuxuBoot之类的;
但硬件设备厂商可能会使用自己的Boot loader,对于ARM系统的Boot loader相关说明

在/Documentation/arm中可以找到;

A.Boot Loader首先检测,并初始化外部RAM;
B.一旦外存有效,first boot loader调入main boot loader,将其置于外存;
c.第二阶段的Boot loader将运行起来第一个主程序,这部分代码主要初始化文件系统,额外存储,网络及

其他的部分。在一个移动phone上,这部分代码可能要做些初始化modem CPU并且建立底层内存保护以及安

全相关的Option的建立;
D.一些特定的任务完成之后,loader就会寻找Linux Kernel并且启动;从Boot media中load到内存,然后

启动。当然也会设置一些boot的参数给kernel;;
E:Boot load工作完成之后即Jump到kernel继续运行

Linux Kenel的执行,和一般我们了解的Linux kernel的职责是一样的,建立系统运行所需要的环境,初始

化中断控制器,内存保护,以及Scheduling(Timer)。
1.内存管理和cach机制初始化之后,系统就能够使用virtual memory,并且能够加载user空间的进程;
 系统会在root file system找到init 进程,加载它,并初始化用户进程空间;

The init process:
init process是所有系统的进程的 grandmother,所有其他的进程都是由该进程启动的,或者由该进程启动

的进程启动的;
A.intit process首先找一个文件叫做 init.rc,该文件描述了system services, 文件系统以及其他启动

需要的参数;init.rc放在system/core/rootdir下面;

Zygote 和 Dalvik :
Zygote是有init process启动的,他基本负责初始化和执行 Dalvik VM;

system server 是第一个运行在系统的Java模块,他将启动Android的 service例如电话管理以及蓝牙等。

启动所有直接写在system server run方法中的service; SytemServer的代码可以在

frameworks/base/services/java/com/android/server/SystemServer.java找到;

一旦system server建立起来之后,系统启动即完毕;系统启动完毕之后,会有一个BroadCast的intent发

出来,叫做ACTION_BOOT_COMPLETED. 想要启动自己的service,注册一个闹钟,或者其他的需要在系统启动

之后运行的应用,都需要注册并receive这个intent.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值