没有合适的资源?快使用搜索试试~ 我知道了~
Android启动流程分析总结.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 174 浏览量
2022-07-08
18:02:45
上传
评论
收藏 1.28MB DOC 举报
温馨提示
试读
13页
Android启动流程分析总结
资源推荐
资源详情
资源评论
保密级别: □绝密 □机密 ■秘密 □内部公开
第 1 页 共 13 页
Android启动流程分析
资料整理:XXX
保密级别: □绝密 □机密 ■秘密 □内部公开
第 2 页 共 13 页
先来看看Android操作系统在手机内存中是如何存储的,地址最低的地方存放的是Bootloade
r,然后放Linux
Kernel,接下来的三个区域分别放置编译源码生成的三个image文件(ranmdisk.img,system
.img和data.image),用户在使用过程中产生的文件等都是放在最后一个Data
image区域里(即/data/data/<package>),这部分区域的大小不固定,根据手机实际内存来
确定。
手机启动的时候从最低的地址开始执行,首先执行
Bootloader,Bootloader会去加载Linux Kernel,初始化硬件,然后挂载Ram Disk(Init
process放在这里面的),并启动一个初始化的进程,对应的初始化的源码为:system/core/init/
Init.c。
第一步:系统引导阶段BootLoader(bootable/bootloader/*)
从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。 另外,由于
Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1
和stage2 两大部分。
依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在
stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的;而
stage2则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性
和可移植性。
Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):
(1)硬件设备初始化。
(2)为加载 Boot Loader 的 stage2 准备 RAM 空间。
(3)拷贝 Boot Loader 的 stage2 到 RAM 空间中。
(4)设置好堆栈。
(5)跳转到 stage2 的 C 入口点。
Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序):
(1)初始化本阶段要使用到的硬件设备。
(2)检测系统内存映射(memory map)。
(3)将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。
(4)为内核设置启动参数。
(5)调用内核,调用 Linux 内核的方法是直接跳转到内核的第一条指令处。
第二步:内核Kernel(kernel/*)
由bootLoader引导加载kernel,kernel经自解压、初初化、载入build-
保密级别: □绝密 □机密 ■秘密 □内部公开
第 3 页 共 13 页
in驱动程序,完成启动。kernel启动后会创建若干内核线程(kernel
thread),之后装入并执行程序/sbin/init/*,载入init process,切换至user-
space。
init
进程如何由内核态转到用户态的
:系统允许一个进程创建新进程,新进
程即为
子进程
,子进
程还可
以创建
新的子
进程,
形成进程树结构模型。整个linux系统的所有进程也是一个树形结构。树根
是系统自动构造的,即在内核态下执行的0号进程,它是所有进程的祖先。由0
号进程创建1号进程(内核态),1号负责执行内核的部分初始化工作及进行系
统配
置,并创建若干个用于高速缓存和虚拟主存管理的内核线程。随后,1号进程调
用execve()运行可执行程序init,并演变成用户态1号进程,即
init进程。(一号内核进程调用execve()从文件/etc/inittab中加载可执行程序ini
t并执行,这个过程并没有使用调用do_fork(),因此两个进程都是1号进程。)
第三步:init进程启动(system/core/init/*)
Init进程是一个由内核启动的用户级进程,它是系统用户空间的第一个进程
,其进程PID是1,父进程为系统内核的0号进程。Init的源代码在文件:ANDRO
ID_DIR/system/core/init/init.c中。
init进程启动后,根据init.c和init.XXX.rc脚本文件来建立几个基本服务:Ser
viceManager、Zygote、Vold等。最后init进程并不退出,而是担当property
service的功能。
init的源代码在文件:./system/core/init/init.c 中,会一步步完成下面的任务
设备初始化,例如:在 /dev 下面创建所有设备节点
初始化log系统
解析/init.rc和/init.%hardware%.rc文件
执行 early-init action in the two files parsed in step 3.
初始化属性服务器,Actually the property system is working as a share
memory. Logically it looks like a registry under Windows system. K
执行 init action in the two files parsed in step 3.
开启 属性服务。
执行 early-boot and boot actions in the two files parsed in step 3.
执行 Execute property action in the two files parsed in step 3.
剩余12页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功