Android系统中init.rc文件用来初始化系统,启动服务,挂载文件系统等工作.
Init进程启动后,就会去解析init.rc.
Init.rc有其语法规则.
关键字
和其他机器语言类似,init.rc语法也定义了关键字,具体有三种类型的关键字:
1.1 Option 类型关键字
用来修饰service
有以下几种:
Class : 标识service属于哪个类
Console : 标识service是否需要控制台
Critical : service在4分钟内重启4次,系统进入recovery模式
Disabled : service默认是关闭的,需要显示调用start启动,或者通过ctr.start属性启动
Oneshot : service只能启动一次
Onrestart : 服务重启时,需要执行的命令
Group : 标识service所属组
User : 标识service所属用户
Socket : 启动service时,创建socket并传递fd给service
Ioprio :设置service io 优先级
1.2 Command类型关键字
:可执行语句
常用的有如下:
Write,exec,export ,mkdir, mount,insmod,rm,rmdir,setenv, chown,chmod,mknod,copy,
Symlink,
Class_start :启动类中的所有service 如语句:Class_start core //启动类core中的所有service
Class_stop :停止类中的所有service
Restart : 重启service
Start :启动service
Stop :停止service
1.3 Section 类型关键字 :
用来描述一段语句 ,有 on ,import,service关键字
On 和service 的语段由option和comand组成,
On : trigger
Command
Command…
其中trigger分为两种,第一种为无条件出发,第二种为带条件触发,一个on语段就是一个action. 此action是否执行,由trigger来决定.
无条件触发的trigger有:
Early_init, init, early-fs , post-fs, post-fs-data ,boot
如 on eary_init
Write 1 > /dev/wmtWifi
则无条件执行write 命令
带条件触发的tirgger有:
Fs_property, early-property, property ,也就是系统中的prop值为tirgger指定的值时,才执行action,列如:
On property : ro.build.mode=eng
Write 1 > /dev/mwtWifi
当ro.build.mode的值为eng时才执行write命令
执行顺序如下:
early_init->init->fs_property->early-fs->fs->post-fs->post-fs-data->
early-property->early-boot->boot->service
service的语段组成也类似
service filename_for_exctution
command
option
filename_for_exctution :为可执行文档的路径
其中command只能为onrestart,表示进程重启时,需要执行的指令
Option用于修饰service。
如:service servicemanager /system/bin/servicemanager
class core
user system //用户是系统
group system //组事系统
critical // 为关键service
/*当服务重启时,执行以下指令*/
onrestart restart healthd
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
onrestart restart bwc
2. 总结
2.1 服务名的命名规则
service 的名字长度不能超过16个字节
service 的名字只能是字母,数字和'-','_'
2.2 系统组
system/core/include/private/android_filesystem_config.h中的android_ids定义了系统中所有进程的gid值
"root" AID_ROOT
"system" AID_SYSTEM
2.3 系统中propertey属性
可以在makefile中用宏PRODUCT_DEFAULT_PROPERTY_OVERRIDES定义缺省的property
系统中有PROP_PATH_SYSTEM_BUILD和PROP_PATH_SYSTEM_DEFAULT
system/build.prop;
system/default.prop
system.prop
并且init 进程创建了/dev/socket/property_service socket去监听 设置prop的请求.
2.4 service的启动
执行完on boot以后,就会依次启动core,main,defualt类中的服务
最终init进程通过执行fork创建进程
2.5 init进程
所有的service都是init进程的子进程,当init进程执行完init.rc以后,就会监听所有service的退出状态,propertery的设置。