Android启动脚本init.rc
16lz
2022-01-07
阅读更多 Android启动脚本init.rc
在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容:
Commands:命令
Actions: 动作
Triggers:触发条件
Services:服务
Options: 选项
Propertise:属性
所有这些都是以行为单位的,各种记号由空格来隔开。C语言风格的反斜杠号可用于在记号间插入空格。双引号也可用于防止字符串被空格分割成多个记
注释行以井号(#)开头(允许以空格开头)。
Actions和Services声明一个新的分组。所有的命令或选项都属于最近申明的分组。位于第一个分组之前的命令或选项将会被忽略。
Actions和Services有唯一的名字。如果有重名的情况,第二个申明的将会被作为错误忽略。( ???我们是否应该以覆盖来代替忽略)
(1) Commands是一些基本的操作,
----------
exec [ ]*
创建和执行一个程序()。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec ,它可能会引起init卡
export
在全局环境变量中设在环境变量为。(这将会被所有在这命令之后运行的进程所继承)
ifup
启动网络接口
import
解析一个init配置文件,扩展当前配置。
hostname
设置主机名。
chmod
更改文件访问权限。
chown
更改文件的所有者和组。
class_start
启动所有指定服务类下的未运行服务。
class_stop
停止指定服务类下的所有已运行的服务。
domainname
设置域名。
insmod
加载中的模块。
mkdir [mode] [owner] [group]
创建一个目录 ,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755 ,并属于root用户和 root组。
mount [ ]*
试图在目录挂载指定的设备。 可以是以 mtd@name 的形式指定一个mtd块设备。包括 "ro"、"rw"、"re
setkey
待完成 ...... (暂时不可用)
setprop
设置系统属性 为 值 .
setrlimit
设置的rlimit (资源限制)。
start
启动指定服务(如果此服务还未运行)。
stop
停止指定服务(如果此服务在运行中)。
symlink
创建一个指向的软连接。
sysclktz
设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)
trigger
触发一个事件。用于将一个action与另一个 action排列。(?????)
write [ ]*
打开路径为的一个文件,并写入一个或多个字符串。
例如:
mkdir /sdcard 0000 system system
mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
这些命令在init可执行程序中被解析,然后调用相关的函数来实现。
(2) Actions(动作)表示一系列的命令,通常在Triggers(触发条件)中调用,
----------
动作和触发条件的形式为:
on < trigger>
< command>
< command>
< command>
动作的使用示例如下:
on init
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
mkdir /system
init表示一个触发条件,这个触发事件发生后,进行设置环境变量和建立目录的操作称为一个“动作”
(3)Triggers (触发器)是一个用于匹配特定事件类型的字符串 ,用于使Actions (行动)发生。
----------
boot
这是init执行后的第一个被触发的Triggers (触发器)。(在 /init.conf (启动配置文件)被装载之后)
=
这种形式的Triggers (触发器)会在属性被设置为指定的时被触发。
device-added-
device-removed-
这种形式的Triggers (触发器)会在一个设备节点文件被增删时触发。
service-exited-
这种形式的Triggers (触发器)会在一个特定的服务退出时触发。
(4) Services(服务)通常表示启动一个可执行程序,Options(选项)是服务的附加内容,用于配合服务使用。
----------
Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services (服务)的形式如下:
service [ ]*
在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容:
Commands:命令
Actions: 动作
Triggers:触发条件
Services:服务
Options: 选项
Propertise:属性
所有这些都是以行为单位的,各种记号由空格来隔开。C语言风格的反斜杠号可用于在记号间插入空格。双引号也可用于防止字符串被空格分割成多个记
注释行以井号(#)开头(允许以空格开头)。
Actions和Services声明一个新的分组。所有的命令或选项都属于最近申明的分组。位于第一个分组之前的命令或选项将会被忽略。
Actions和Services有唯一的名字。如果有重名的情况,第二个申明的将会被作为错误忽略。( ???我们是否应该以覆盖来代替忽略)
(1) Commands是一些基本的操作,
----------
exec
创建和执行一个程序(
export
在全局环境变量中设在环境变量
ifup
启动网络接口
import
解析一个init配置文件,扩展当前配置。
hostname
设置主机名。
chmod
更改文件访问权限。
chown
更改文件的所有者和组。
class_start
启动所有指定服务类下的未运行服务。
class_stop
停止指定服务类下的所有已运行的服务。
domainname
设置域名。
insmod
加载
mkdir
创建一个目录
mount
试图在目录
setkey
待完成 ...... (暂时不可用)
setprop
设置系统属性
setrlimit
设置
start
启动指定服务(如果此服务还未运行)。
stop
停止指定服务(如果此服务在运行中)。
symlink
创建一个指向
sysclktz
设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)
trigger
触发一个事件。用于将一个action与另一个 action排列。(?????)
write
打开路径为
例如:
mkdir /sdcard 0000 system system
mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
这些命令在init可执行程序中被解析,然后调用相关的函数来实现。
(2) Actions(动作)表示一系列的命令,通常在Triggers(触发条件)中调用,
----------
动作和触发条件的形式为:
on < trigger>
< command>
< command>
< command>
动作的使用示例如下:
on init
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
mkdir /system
init表示一个触发条件,这个触发事件发生后,进行设置环境变量和建立目录的操作称为一个“动作”
(3)Triggers (触发器)是一个用于匹配特定事件类型的字符串 ,用于使Actions (行动)发生。
----------
boot
这是init执行后的第一个被触发的Triggers (触发器)。(在 /init.conf (启动配置文件)被装载之后)
这种形式的Triggers (触发器)会在属性
device-added-
device-removed-
这种形式的Triggers (触发器)会在一个设备节点文件被增删时触发。
service-exited-
这种形式的Triggers (触发器)会在一个特定的服务退出时触发。
(4) Services(服务)通常表示启动一个可执行程序,Options(选项)是服务的附加内容,用于配合服务使用。
----------
Services (服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services (服务)的形式如下:
service