Android系统init.rc中socket详解

在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本.

(1)android启动文件系统后调用的第一个应用程序是/init,此文件的很重要的内容是解析了init.rc和init.xxx.rc
两个配置文件,然后执行解析出来的任务。相关代码在android源代码/system/core/init/init.c文件中,如下:
parse_config_file("/init.rc");

/* pull the kernel commandline and ramdisk properties file in */
qemu_init();
import_kernel_cmdline(0);

get_hardware_name();
snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
parse_config_file(tmp);

(2)从上面代码可以看到,第一个配置文件名称固定为init.rc,而第二个配置文件格式为init.xxx.rc,其中xxx部分的内容
是从内核读取的,具体是读取文件/proc/cpuinfo中的Hardware部分,然后截取其部分内容。
(3)从上面看init.xxx.rc中的xxx内容是取决平台的定义,例如:
parse_config_file(“init.qcom.rc”);

(4)配置文件的语法如下:
(a)配置文件的内容包含有4种:
动作(Action)
命令(Commands)
服务(Services)
选项(Options)
(b)动作和命令一起使用,形式如下:
on



其中trigger是触发条件,也就是说在满足触发条件的情况下执行1个或多个相应的命令,举例如下:
on property:persist.service.adb.enable=1
start adbd

(c)服务和选项一起使用,形式如下:
service [ ]*

sysclktz

设置系统时区(GMT为0)


class_start
启动指定类别的所有服务

class_stop
停止指定类别的所有服务

domainname
设置域名

insmod
加载路径为的内核模块

mkdir
创建路径为目录

mount [ ]*
挂载类型为的设备到目录,为挂载参数,距离如下:
mount ubifs ubi1_0 /data nosuid nodev

setkey
暂时未定义

setprop
设置名为的系统属性的值为

setrlimit
设置资源限制,

start
启动服务(如果服务未运行)

stop
停止服务(如果服务正在运行)

symlink
创建一个从指向的符号链接,举例:
symlink /system/etc /etc

write [ ]*
打开路径为的文件并将一个多这多个字符串写入到该文件中。

(g)系统属性(Property)
android初始化过程中会修改一些属性,通过getprop命令我们可以看到属性值,这些属性指示了某些动作或者服务的状态,主要如下:
init.action 如果当前某个动作正在执行则init.action属性的值等于该动作的名称,否则为""
init.command 如果当前某个命令正在执行则init.command属性的值等于该命令的名称,否则为""

init.svc. 此属性指示个名为的服务的状态("stopped", "running", 或者 "restarting").

你可能感兴趣的:(Android系统init.rc中socket详解)