【汇总】Android rc开机启动文件说明

前言全局说明

Android rc开机启动文件说明


一、说明

1.1 环境:

Android 

二、rc 基础语法

2.1 注释

注释行以 “#” 号开头(允许以空格开头)。

2.2 多行

行末的反斜杠用于折行

2.2 带空格行

双引号也可用于防止字符串被空格分割成多个记号。

三、Actions 语句块,语法

语句块可以理解为函数,多个文件可以用一个rc文件,放到不同语句块里。
语句块又分为:Actions(行为)和 Commands(命令)、Services(服务)和 Options(选项)

3.1 Actions(行为)

语法:

on <trigger> [&& <trigger>]*
    <command1>
    <command2>
    <command3>
    ...

Trigger(触发器):trigger 又被细分为事件触发器(event trigger)和属性触发器(property trigger)

类型 说明 备注
boot init.rc 被装载后触发
device-added-<path> 指定设备被添加时触发
device-removed-<path> 指定设备被移除时触发
service-exited-<name> 在指定服务(service)退出时触发
early-init 初始化之前触发
late-init 初始化之后触发
init 初始化时触发(在 /init.conf(启动配置文件)被装载之后)进程会更新一些系统属性
init.action 等于当前正在执行的action,或者""若果没有的话。
init.command 等于当前正在执行的command,或者""如果没有的话。
init.svc.<name> 一个有名service的状态("stopped", "running", "restarting")
property 当属性值满足条件时触发
boot/charger 当系统启动/充电时触发

3.2 Commands(命令)

语法:

exec [ <seclabel> [ <user> [ <group>\* ] ] ] -- <command> [ <argument>\* ] 
新建一个子进程并运行一个带指定参数的命令。 
命令跟在 -- 后面,以便前面可以指定 seclabel(安全策略),
user(所有者),group(用户组)等选项。 直到这个命令运行完才可以运行其他命令。
seclabel 可以设置为 - 表示用默认值, argument 可以使用属性扩展形式 ${property}。 
直到子进程新建完毕,init进程才继续执行.

exec_background [ <seclabel> [ <user> [ <group>\* ] ] ] -- <command> [ <argument>\* ] 
与 exec 相似,差别在于 exec_background 不会阻塞 init 进程的运行。
命令 说明 备注
bootchart [start|stop] 启动/停止启动。这些文件存在于默认的init.rc文件中,但只有文件/ data / bootchart / enabled存在时,才会激活启动图; 否则bootchart start / stop是no-ops。
bootchart_init 初始化bootchart,用于获取开机过程的系统信息
chdir <directory> 改变工作文件夹
chmod <octal-mode> <path> 改变指定文件的读取权限
chown <owner> <group> <path> 改变指定文件的拥有都和组名的属性
chroot <directory> 改变进行的根文件夹
class_start 启动指定类属的全部服务,假设服务已经启动,则不再反复启动
class_stop <serviceclass> 停止指定类属的所有服务
class_reset <serviceclass> 重启服务
copy <src> <dst> 复制文件
domainname <name> 设置域名
exec <path> [ <argument> ]* 运行指定路径下的程序,并传递參数
export <name> <value> 设置全局环境參数。此參数被设置后对全部进程都有效
hostname <name> 设置主机名
ifup <interface> 使指定的网络接口"上线",相当激活指定的网络接口
import <filename> 导入一个额外的init配置文件
insmod <path> 安装模块到指定路径
load_all_props 加载所有的配置
load_persist_props 当data加密时加载一些配置
loglevel <level> 设置kernel log level
mkdir <path> [mode] [owner] [group] 用指定參数创建一个文件夹,在默认情况下,创建的文件夹读取权限为755
mount_all <fstab> [ <path> ] 挂载
mount <type> <device> <dir> [ <mountoption> ]* 类似于linux的mount指令
restart <service> 重启服务
restorecon <path> [ <path> ] 重置文件的安全上下文
restorecon_recursive <path> [ <path> ]* 一般都是selinux完成初始化之后又创建、或者改变的目录
rm <path> 删除文件
rmdir <path> 删除文件夹
username 为root,组名为root.
setenforce 0|1 设置SELinux系统范围的enfoucing状态。0 is permissive (i.e. log but do not deny), 1 is enforcing.
setkey TBD(To Be Determined), 待定
setprop <name> <value> 设置属性及相应的值
swapon_all <fstab> 在指定文件上调用 fs_mgr_swapon_all
setrlimit <resource> <cur> <max> 设置资源的rlimit(资源限制),不懂就百度一下rlimit
start <service> 假设指定的服务未启动,则启动它
stop <service> 假设指定的服务当前正在执行,则停止它
symlink <target> <path> 创建一个符号链接
sysclktz <mins_west_of_gmt> 设置系统基准时间
trigger <event> 触发一个事件,Used to queue an action from another action.
write <path> <string> [ <string> ]* 往指定的文件写字符串
verity_load_state 用于加载dm-verity状态的内部实现
verity_update_state <mount_point> 用于更新dm-verity状态并设置分区的内部实现细节,由于 fs_mgsr不能直接设置它们本身,所以通过使用adb remount来验证属性
wait <path> [ <timeout> ] 等待指定路径的文件创建出来,创建完成就停止等待,或者等到超时时间到。如果未指定超时时间,缺省是5秒。

四、Services 语句块,语法

4.1 Services(服务)

语法:

service <name> <pathname> [ <argument> ]* <option> <option>
    <option>
    <option>
    <option>
    ...

以 service 开头,由 init 进程启动,一般运行与另外一个 init 的子程序,所以启动 service 前需要判断对应的可执行文件是否存在。
name:服务名;
pathname:当前服务设置的选项;
option:当抢服务设置的选项;
argument:可选参数;

4.2 option(选项)

options是Service的修订项。它们决定一个服务何时以及如何运行.

选项 说明 备注
animation animation class 主要包含为开机动画或关机动画服务的service
critical 据设备相关的关键服务,如果在4分钟内,此服务重复启动了4次,那么设备将会重启进入还原模式。
disabled 服务不会自动运行,必须显式地通过服务器来启动。
setenv 设置环境变量
socket [ [ ] ] 在/dev/socket/下创建一个unix domain的socket,并传递创建的文件描述符fd给服务进程.其中type必须为dgram或stream,seqpacket. 用户名和组名默认为0
user 指定服务运行的用户。在执行此服务之前先切换用户名。当前默认为root.
group [ ]* 指定服务运行的用户组。类似于user,切换组名
oneshot 当此服务退出时不会自动重启.
class 给服务指定一个类属,这样方便操作多个服务同时启动或停止.默认情况下为default.
onrestart 指定服务为一次性服务,服务启动后会立即停止。当服务重启时执行一条指令,
seclabel 指定服务的安全标签,用于 SELinux 安全策略。 seclabel u:r: shell:s0
mkdir 创建一个目录。 mkdir /data/my_directory 0770 root root
chown 更改文件或目录的所有者。 chown root:shell /data/my_file
chomod 更改文件或目录的权限。 chmod 0755 /system/bin/my_executable
setprop 设置系统属性。 setprop ro.my.custom.property "value"
getprop 获取系统属性的值。 getprop ro.product.model
exec 执行指定的命令。 exec /system/bin/my_script.sh
on property 定义在特定属性变化时执行的操作。 on property:sys.usb.state=connected start usb_service
on property:dev.bootcomplete=1
restart 重启指定的服务
stop 停止指定的服务。
setsebool 设置 SELinux 布尔值。 setsebool my_bool_value 1
import 导入其他 .rc 文件中的定义。 import /path/to/another.rc
service 定义一个服务的属性。
boot 在系统启动时执行的操作。 on boot start my_service


免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:
https://blog.51cto.com/u_16213717/8602460
https://blog.csdn.net/jx232515/article/details/127622326
Android中 .rc文件常用的操作说明 https://www.jianshu.com/p/6301cdaf49ae
https://www.jianshu.com/p/810d41959b62
https://blog.51cto.com/u_16213682/7106903
https://blog.51cto.com/u_16213717/8602460 (大量示例讲解)
https://blog.csdn.net/marshal_zsx/article/details/80272760 (animation )
https://www.jianshu.com/p/cb73a88b0eed
https://blog.csdn.net/xusiwei1236/article/details/41577231
《SE for Android 系列之整体概要(三)》https://blog.csdn.net/l173864930/article/details/17271957
https://www.cnblogs.com/gufanyuan/p/9350130.html (bootchart )



posted @ 2025-01-18 01:21  悟透  阅读(700)  评论(0)    收藏  举报