android init.rc语法分析

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的设置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值