云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > android系统开机启动流程分析

android系统开机启动流程分析

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 13:47:10

一, 系统引导bootloader

加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内

核。还有ramdisk】 二, 内核kernel

bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成

启动。

内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init

process,切换至用户空间(user-space)

内核zImage解压缩

head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包

裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境 (内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。

三, Init进程启动

【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到

service.list中【system/core/init/init_parser.c】。

建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作

1、

初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个文件解析步骤2时执行“early-init”行动】

2、 3、

初始化设备【在/dev下创建所有设备节点,下载firmwares】 初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

4、 开启属性服务【在两个文件解析步骤2时执行“early-boot”和“boot”行动;在两个文件解析步骤2时执行“excecute property”行动】

5、 进入一个无限循环【等待device/property set/child进程退出事件】

四, Servicemanager

【Servicemanager属于Native Service。在执行init.rc时就会启动,与Zygote一样】

通知binder设备,把自己变成context_manager

【service servicemanager/system/bin/servicemanager,从main(…)开始】 进入循环,不停的去读binder设备,看是否有对service的请求

如果有,调用svcmar_handler函数回调处理请求

【在Servicemanager中的svcmar_handler负责处理android中所有有

关service的请求响应】

有增加服务请求时,由Servicemanager负责注册各项服务。【注册后,

会将该service加入svcList中,svcList中存了各个注册过的service的name和handler。当接收到获取service的请求时,Servicemanager会去查找该service,如果存在,则把返回数据写入reply,返回给客户。】 【处理服务注册和监听】

五, Zygote

【Servicemanager和Zygote进程奠定了android的基础,Zygote这个进程起来才会立起真正的android运行空间,初始化建立的service都是Native service.rc在脚本文件中Zygote的描述,Zygote是用于初始化虚拟机的进程,它会监听请求创建虚拟机实例的socket】 建立java runtime【Zygote从main(…)开始 frameworks/base/cmds/app_main.cpp】 创建Dalvik java虚拟机,JNI_Createjava VM() 注册Android Runtime中的JNI接口给虚拟机

呼叫Java类com.android.internal.os.ZygoteInit中的main函数【AndroidRuntime::start(…)

frameworks/base/core/jni/AndroidRuntime.cpp】 登记Listen端口,用来接受请求【registerZygoteSocket()】

加载preloaded class、resource用来加快启动速度,【preloadClasses()】 启动System Server【startSystemServer()】

进入Zygote服务框架,经过以上步骤Zygote就建立完成,利用socket通信,接受ActivityManagerService的请求,fork应用程序。

六, System server

【System Server作为Zygote的第1个子进程,是Android Framework的核心,它主要负责Android系统初始化并启动其他服务。其它的Android服务都由SystemServer启动并运行在该进程空间】 Fork出独立的进程,名称为“system-server”

System service启动原生服务,包括Surface Flinger和Audio Flinger

【system_main.cpp的main函数调用system_init.cpp的system_init函数。然后调用SystemServer.java的SystemServer:Init2,启动新线程】 原生system service向service manager注册为IPC服务目标。【比如AudioFlinger.cpp的instantiate函数】

System service开始Android managed services。 Android managed services向service manager注册 System server加载所有的服务后,系统初始化完成

七, Home启动

使用xxx.systemReady()通知各个服务,系统已经就绪。 特别对于ActivityManagerService.systemReady(回馈)

Widget.wallpaper.imm(输入法)等ready通知

启动Launcher

搜索更多关于: android系统开机启动流程分析 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

一, 系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二, 内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境 (内存等),调用de

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com