init.c(system/core/init/init.c)
Linux系统中用户空间的第一个进程,main函数中主要解析了两个配置文件,init.rc和硬件相关的配置文件,解析调用的是 init_parse_config_file,在Ueventd_Parser.c的Parse_config进行解析,首先找到配置文件的section,不同的section使用不同的方式去解析, section为当symbol为on或者service的时候表示section,4.3加入了import关键字,在init.rc中
on init : on关键字,对应的section名字是init
分析init.rc文件
1、section的内容从标识开始,到下一个section结束
2、boot和init在on这个section中,
解析service section:
init.h中使用service结构体,通过Initparse.c中的parse_service和parse_line_service将配置文件的内容填充于service结构体中。
init控制Service:
1、启动zygote,当init进程执行到do_class_start时,即启动service,因为zygote的classname为default,因此在init.rc中 #class_start 为 default,在init.c中zygote
通过fork(创建子线程)和execve(执行新的service)共同创建。
2、重启zygote,在init.rc中 poll事件中有个SVC_RESTARTING标识,设置了它,执行service中的onrestart命令,在init.c的for循环中,执 行restart_processes,重启所有标识为SVC_RESTARTING的service。
属性服务(property service),类似于注册表,重启后键值依然存在
1、属性服务的初始化,init_property_aera()初始化存储空间,PA_SIZE 32768个字节,PA_INFO_START(1024)个字节存储头部信息
2、由init创建在共享内存上,而共享内存可以跨进程,(init_workspace),客户端可以直接读取属性空间,只有读权限。
3、客户端想要设置属性,需要通过属性服务器来交互,客户端通过property_set发送请求,init进程由start_property_service启动服务,创建 了一个用来接收请求的socket,收到后调用handle_property_set_fd进行处理,检查是否有权限,如果有,调用property_set修改属性值。
相关文章
- 10-13Android 高级进阶之深入剖析消息机制
- 10-13深入了解架构组件之ViewModel,android高级面试题汇总
- 10-13千里马Android Framework实战开发-binder通信之Messenger介绍
- 10-13FrameWork内核解析之Handler消息机制(二),android学习视频
- 10-13Android Framework实战开发-Binder专题讲解之aidl文件的详细分析
- 10-13Android Framework------之Keyguard 简单分析
- 10-13android多线程-AsyncTask之工作原理深入解析(下)
- 10-13android多线程-AsyncTask之工作原理深入解析(上)
- 10-13Android 官方命令深入分析之android
- 10-13Android官方命令深入分析之绘制9-patch