一、init.rc是什么
init.rc是Android启动后,用来设置系统环境以及需要执行的进程的配置文件。使用的语音叫android初始化语言。
与init.rc相应的,还有init.{hardware}.rc,它的作用与init.rc类似。init.rc所在目录为/system/core/rootdir。
二、Android初始化语言的语法介绍
android初始化语言包括四种类型的语句,包括:行为Action、命令Command、服务Service、选项Option。
所有语句都是按行分解的,并且以空格分隔每行所包含的若干token。
android初始化语言有如下规则:
①反斜杠+空格来表示token中的空格;
②双引号中的空格不会被分割;
③一行最后一个字符为反斜杠表示续行;
④#开头表示注释;
⑤action或service 隐式定义了一个段(section),所有Command或Option属于最近定义的section。在第一个section之前的Command或Option将被忽略;
⑥Action和Service有唯一的名字。如果有第二个Action或Service定义为和一个已存在的(Action或Service)同名,它将被作为错误忽略掉。
ACTION:Action是有名字的一系列命令,Actiong=触发器(tirgger)+commands。tirgger(触发器)用于决定该Action应在何时执行。当一个事件发生并匹配了一个Action的trigger,相应的Action将被添加到即将执行(to-be-executed)队列的尾部。每个action在队列中顺序排列,每个action中的command将会顺序执行。init在执行command的过程中还有执行其他活动(设备节点的创建/销毁,属性设置,进程重启)。Action格式如下:
on <tirgger>
<command>
<command>
<command>
...
SERVICE:服务是init进程启动的程序,当服务退出时init进程会视情况重启服务。service格式如下:
service <name> <pathname> [<argument>]*
<option>
<option>
…
OPTION:选项是服务的约束条件,定义了init进程何时以及如何启动服务。比如onshot,退出后不再重启。
TIRGGER:规定了commands什么条件下被触发,比如service-exited-表示指定的service退出时被触发。
COMMAND:执行的动作,比如export 设置环境变量。
关于android初始化语言的详细资料参考点击打开链接
各种daemons、servicemanager、mediaserver、zygote这些进程都是通过解析init.rc启动的。
另外,console_init函数中的load_565rle_image函数中打印“android”的logo。如需修改开机的这个界面,则要将/device/fsl/imx5x/initlogo.rle替换掉,initlogo.rle的拷贝过程定义在imx5x.mk中。