android init socket,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 [ ]*

...

上面内容解释为:

service 服务名称 服务对应的命令的路径 命令的参数

选项

选项

...

举例如下:

service vold /system/bin/vold

socket vold stream 0660 root mount

service bootsound /system/bin/playmp3

user media

group audio

oneshot

vold和bootsound分别是两个服务的名称,/system/bin/vold和/system /bin/playmp3分别是他们所对应的可执行程序。

socket、user、group、oneshot就是配合服务使用的选项。其中oneshot选项表示该服务只启动一次,而如果没有oneshot选项,

这个可执行程序会一直存在--如果可执行程序被杀死,则会重新启动。

(d)选项是影响服务启动和运行的参数,主要的选项如下:

disabled 禁用服务,此服务开机时不会自动启动,但是可以在应用程序中手动启动它。

socket [ [ ] ]

套接字 类型 名称 权限 用户 组

创建一个名为/dev/socket/,然后把它的fd传给启动程序

类型type的值为dgram或者stream

perm表示该套接字的访问权限,user和group表示改套接字所属的用户和组,这两个参数默认都是0,因此可以不设置。

user

执行服务前切换到用户,此选项默认是root,因此可以不设置。

group [ ]*

执行服务前切换到组,此选项默认是root,因此可以不设置

capability [ ]+

执行服务前设置linux capability,没什么用。

oneshot

服务只启动一次,一旦关闭就不能再启动。

class

为服务指定一个类别,默认为"default",同一类别的服务必须一起启动和停止

(e)动作触发条件

boot 首个触发条件,初始化开始(载入配置文件)的时候触发

=

当名为的属性(property)的值为的时候触发

device-added-

路径为的设置添加的时候触发

device-removed-

路径为的设置移除的时候触发

service-exited-

名为的服务关闭的时候触发

(f)命令(Command)的形式

exec [ ]*

复制(fork)和执行路径为的应用程序,为该应用程序的参数,在该应用程序执行完前,此命令会屏蔽,

export

声明名为的环境变量的值为,声明的环境变量是系统环境变量,启动后一直有效。

ifup

启动名为的网络接口

import

加入新的位置文件,扩展当前的配置。

hostname

设置主机名

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").

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值