Android源代码版本:4.0.3
static void parse_config(const char *fn, char *s)函数在Android的init程序启动过程中用于解析init.rc文件。init.rc文件是安卓系统的初始化文件,其中的内容可以分为三大类:
1. Action:一个action表示一个动作,以关键字on作为开头,并加上action的名称,接下来的是对应于这个action的各种command,而command就是一些基本点linux命令。一个action可以包含有多个command,每个command被独立的执行。
init.rc文件中一条action的格式如下:
on early-init
write /proc/1/oom_adj -16
setcon u:r:init:s0
start ueventd
setsebool debugfs 1
上述信息配置了一个名称为early-init的action,包含了4条command。在安卓源码中,action的对应的结构体如下:
struct action {
/* node in list of all actions */
struct listnode alist;
/* node in the queue of pending actions */
struct listnode qlist;
/* node in list of actions for a trigger */
struct listnode tlist;
unsigned hash;
const char *name; /* action名称 */
struct listnode commands;/* 所有command组成的链表 */
struct command *current;/* 当前执行的command,方便定位 */
};
2. Service:一个service代表一个服务,以service作为关键字开头,代表一个守护进程,例如zygote、sysmon、servicemanager等都会在init.rc文件中配置。
init.rc中的一条service的格式如下:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
o