Android init进程解析

作为天字第一号进程,如果想学习深入解析Android源码觉得还是有必要了解一下init的,虽然我看的懵懵懂懂。

天字一号就是PID=1的进程,可以通过PS命令查看。
工作:

  • 创建文件,并挂载设备,Linux系统初始化类似
  • 解析init.rc配置文件
  • 通过读取/proc/cpuinfo/得到机器Hardware名,然后解析init.Hardware.rc文件
  • 执行动作,按时间分为四种:early-init,init,early-boot,boot;事件顺序由配置文件决定
  • 创建利用Uevent与Linux内核交互的socket
  • 初始化属性相关资源
解析配置文件

调用parse_config()方法解析
查找配置文件的section,然后针对不同的section使用不同的解析函数来解析。

section定义在keywords.h中,当symbol为on或service的时候表示section
zygote 也是一个service section

解析service
parse_service() //该函数只是搭建了一个service的架子
parse_line_service() //填充内容
Android init进程解析_第1张图片
zygote解析
init控制Service

** 启动zygote 服务**
init.rc中有这样一句话

#class_start 是一个COMMAND,对应的函数为do_class_start
class_start default

当init执行到

//将boot section 节的command加入到执行队列
action_for_each_trigger("boot",action_add_queue_tail);
//执行队列里的命令,class是一个COMMAND,多以它对应的是do_class_start会被执行

重启zygote

drain_action_queue(); //poll函数返回后,会进入下一轮的循环
restart_processes(); //这里会重启flag标志为SVC_RESTARTING的service.
属性服务

相当于windows下的注册表,系统重启或应用程序重启,可以根据注册表中属性,进行相应的初始化组工作。
查看属性

$ adb shell
$ getprop

property_init(); //属性初始化
property_set_fd = start_property_service(); //属性设置

当然init还有很多功能,比如说

  • 设置开机界面
  • 初始化/dev/keychord设备
    等等

参考书籍:
《深入解析Android 卷I》

你可能感兴趣的:(Android init进程解析)