【汇总】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 )
浙公网安备 33010602011771号