频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
android 4.3 framework之init深入
2014-03-11 11:38:00         来源:android 4.3 framework之init深入  
收藏   我要投稿

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修改属性值。


点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:Android* 的唤醒锁
下一篇:Android自学笔记-10-Sqlite的简单使用
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站