(连载)Android 8.0 : 系统启动流程之 init 进程 (三)
bootchart [start|stop]
启动或终止 bootcharting. 这个出现在 init.rc 文件中, 但是只有在 / data/bootchart/enabled 文件存在的时候才有效, 否则不能工作
chmod
修改文件读写权限
chown
修改文件所有者或所属用户组
class_start
启动所有以 serviceclass 命名的未启动的 service(service 有一个 name, 也有个 class,
这里的 serviceclass 就是 class,class_start 和后面的 start 是两种启动方式, class_start 是 class 形式启动, start 是 name 形式启动)
class_stop
终止所有以 serviceclass 命名的正在运行的 service
class_reset
终止所有以 serviceclass 命名的正在运行的 service, 但是不禁用它们. 它们可以稍后被 class_start 重启
class_restart
重启所有以 serviceclass 命名的 service
copy
复制一个文件, 与 write 相似, 比较适合二进制或比较大的文件.
对于 src, 从链接文件 world-writable 或 group-writable 复制是不允许的.
对于 dst, 如果目标文件不存在, 则默认权限是 0600, 如果存在就覆盖掉
domainname
设置域名
enable
将一个禁用的 service 设置为可用.
如果这个 service 在运行, 那么就会重启.
一般用在 bootloader 时设置属性, 然后启动一个 service, 比如onproperty:ro.boot.myfancyhardware=1
enable my_fancy_service_for_my_fancy_hardware
exec[[[\*]]]--[\*]
新建子进程并运行一个带指定参数的命令. 这个命令指定了 seclabel(安全策略),user(所有者),group(用户组).
直到这个命令运行完才可以运行其他命令, seclabel 可以设置为 - 表示用默认值, argument 表示属性值.
直到子进程新建完毕, init 进程才继续执行.
exec_start
启动一个 service, 只有当执行结果返回, init 进程才能继续执行. 这个跟 exec 相似, 只是将一堆参数的设置改在在 service 中定义
export
设置环境变量 name-value. 这个环境变量将被所有已经启动的 service 继承
hostname
设置主机名
ifup
开启指定的网络接口
insmod [-f] []
安装 path 下的模块, 指定参数 options.
-f 表示强制安装, 即便是当前 Linux 内核版本与之不匹配
load_all_props
加载 / system, /vendor 等目录下的属性, 这个用在 init.rc 中
load_persist_props
加载 / data 下的持久化属性. 这个用在 init.rc 中
loglevel
设置日志输出等级, level 表示等级
mkdir [mode] [owner] [group]
创建一个目录, path 是路径, mode 是读写权限, 默认值是 755,owner 是所有者, 默认值 root,group 是用户组, 默认值是 root.
如果该目录已存在, 则覆盖他们的 mode,owner 等设置
mount_all [ ]\* [--]
当手动触发 "early" 和 "late" 时, 调用 fs_mgr_mount_all 函数, 指定 fstab 配置文件, 并导入指定目录下的. rc 文件
详情可以查看 init.rc 文件中的有关定义
mount
在 dir 目录下挂载一个名叫 device 的设备
_flag 包括 "ro", "rw", "remount", "noatime", ...
options 包括 "barrier=1", "noauto_da_alloc", "discard", ... 用逗号分开, 比如 barrier=1,noauto_da_alloc
restart
终止后重启一个 service, 如果这个 service 刚被重启就什么都不做, 如果没有在运行, 就启动
restorecon [ \* ]
恢复指定目录下文件的安全上下文. 第二个 path 是安全策略文件. 指定目录不需要必须存在, 因为它只需要在 init 中正确标记
restorecon_recursive [ \* ]
递归地恢复指定目录下的安全上下文, 第二个 path 是安全策略文件位置
rm
调用 unlink(2) 删除指定文件. 最好用 exec -- rm ... 代替, 因为这样可以确保系统分区已经挂载好
rmdir
调用 rmdir(2) 删除指定目录
setprop
设置属性 name-value
setrlimit
指定一个进程的资源限制
start
启动一个未运行的 service
stop
终止一个正在运行的 service
swapon_all
调用 fs_mgr_swapon_all, 指定 fstab 配置文件.
symlink
在 path 下创建一个指向 target 的链接
sysclktz
重置系统基准时间 (如果是格林尼治标准时间则设置为 0)
trigger
触发事件 event, 由一个 action 触发到另一个 action 队列
umount
卸载指定 path 的文件系统
verity_load_state
内部实现是加载 dm-verity 的状态
verity_update_state
内部实现是设置 dm-verity 的状态, 并且设置 partition.mount-point.verified 的属性. 用于 adb 重新挂载,
因为 fs_mgr 不能直接设置它
wait [ ]
查看指定路径是否存在. 如果发现则返回, 可以设置超时时间, 默认值是 5 秒
wait_for_prop
等待 name 属性的值被设置为 value, 如果 name 的值一旦被设置为 value, 马上继续
write
打开 path 下的文件, 并用 write(2) 写入 content 内容. 如果文件不存在就会被创建, 如果存在就会被覆盖掉
来源: http://www.jianshu.com/p/769c58285c22