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

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

android系统开机启动流程分析

  • 62 次阅读
  • 3 次下载
  • 2025/12/10 9:54:04

一, 系统引导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

5771001803090012095 579036822859633082 5771001803090012386 576137399735760696 5771001803090013594 578077579902515512 5771001803090012387 577164982601818051 5771001803090012138 572131192158918326 5771001803090012359 579036822361076053 5771001803090012356 576135286143791742 5771001803090012355 575087869704693279 17088100343355274 101229944325833379 17088100343355275 101866732938832008 17088100343356107 101581152501500522 17088100343356108 101000180059871732 17088100343354295 101074194142687017 17088100343356184 101878660869628802 17088100343356185 101775831174086674 17088100343356109 101086014373572846 17088100343356110 101152207216014916 17088100343355237 101027041605702709 17088100343355238 101229364861425414 17088100343356169 101862204402635718 17088100343354928 101760654089788804

搜索更多关于: 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