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

本文详细介绍了Android 4.0.3版本中,init程序如何使用parse_config函数解析init.rc配置文件。init.rc文件包含Action、Service和Import三大类,分别对应系统动作、服务和导入其他文件。parse_config函数根据遇到的数据类型进行不同处理,如遇到EOF、TEXT或NEWLINE,分别进行结束、保存单词或开始新段落的操作。当检测到新section(如import、on、service)时,会调用parse_new_section进一步处理。
最低0.47元/天 解锁文章
3256

被折叠的 条评论
为什么被折叠?



