猫史档案馆


【插件实验室】android启动过程(上)

用户:顺铂顺铂查看:1 回复:2 评论:1 创建时间:2018-12-08T17:32:26


我们以前发了一个关于linux的启动过程,获得了无数(liaoliao)好评!!

今天,我们准备踏着Linux的东风,来给大家讲解下android的启动过程。

板凳,瓜子,走起~~~

 

 

先贴张图,

 

 

深谈一下~~

Android启动大致分为几个过程:

1、uboot引导

2、Linuxkennel

3、init

4、deamon守护进程、代理进程启动

5、zygote

6、home activity

 

 

1、ubbot

关于uboot,先贴张图

这玩意有点儿深奥,涉及到汇编和c的知识。想了解的童鞋可以等待一会儿,我de《uboot精讲》很快就要出炉啦!!!

介个就不再细讲了

 

2、linuxkennel

没啥可说的,就是些硬件初始化罢了

 

3、init

init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。启动过程就是代码init.c中main函数执行过程:system\core\init\init.c

在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听……

下面看两个重要的过程:rc文件解析和服务启动。

1 rc文件解析

  .rc文件是Android使用的初始化脚本文件 (System/Core/Init/readme.txt中有描述:

four broad classes of statements which are ActionsCommandsServices, and Options.)

  其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是 linux 命令,

还有一些是 android 添加的,如:class_start <serviceclass>: 启动服务,class_stop <serviceclass>:关闭服务,等等。

  其中Options是针对 Service 的选项的。

系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。 具体看一下启动脚本:\system\core\rootdir\init.rc

       在解析rc脚本文件时,将相应的类型放入各自的List中:

  \system\core\init\Init_parser.c  :init_parse_config_file( )存入到

  action_queue、   action_list、 service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。

  这其中包含了服务:adbd、servicemanager、vold、ril-daemon、debuggerd、surfaceflinger、zygote、media……

2 服务启动

       文件解析完成之后将service放入到service_list中。

       遍历所有名称为classname,状态不为SVC_DISABLED的Service启动

 

未完待续~

 

 


回复

上一页1 页 / 共 1下一页
活动喵活动喵

恭喜奶思工作室发布编程一小时帖子/作品一篇,工作室积分+2,工作室积分累计截止到12月12日,请在12月12日之前不要删除帖子,否则新增积分失效哦~
再接再厉,活动喵相信你们工作室能成功拿下前六,获得工作室专属荣誉及奖品!

 

恭喜nice氖思发布编程一小时帖子/作品一篇,个人积分+2,个人积分累计截止到12月9日,活动详情请查看链接:https://www.codemao.cn/community/167979
再接再厉,活动喵相信你能成功带回个人奖品!

点赞0


评论


泡泡糖339泡泡糖339

字··我全都能看懂···

但是 句子几乎都不明白···

 

咋办···瓜子磕了··没学会··要给钱不?

不过,dalao要是能结合应用或者生活中常见的事儿来讲···那我搬个板凳来行不?

或者像隔壁帖子一样有个视频???就是别那么长···hhh

点赞0


评论