service dms_server /vendor/bin/dms --flagfile=/vendor/bin/dms.flag
user root
oneshot
group root shell system inet
disable
on property:vendor.dms.enable=1
chmod 0777 /mnt/obb
touch /mnt/obb/raw_driver
chmod 0777 /mnt/obb/raw_driver
symlink /vendor/bin/dms_release /dms_release
start dms_server
service <name><pathname> [ <argument> ]*
<option>
<option>
参数 | 含义 |
---|---|
name | 表示此服务的名称 |
pathname | 此服务所在路径因为是可执行文件,所以一定有存储路径。 |
argument | 启动服务所带的参数 |
option | 对此服务的约束选项 |
选项 | 描述 |
---|---|
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 | 当服务重启时执行一条指令, |
service dms_server /vendor/bin/dms --flagfile=/vendor/bin/dms.flag
user root //给服务指定一个类属,这样方便操作多个服务同时启动或停止
oneshot //当此服务退出时不会自动重启
group root shell system inet
disable //服务不会自动运行
on <trigger> ## 触发条件
<command> ##执行命令
<command1> ##可以执行多个命令
on < trigger > 表示当什么条件满足的时候触发动作。
格式 | 含义 |
---|---|
on early-init | 在初始化早期阶段触发 |
on init | 在初始化阶段触发 |
on late-init | 在初始化晚期阶段触发 |
on boot/charger | 当系统启动/充电时触发 |
on property | 当属性值满足条件时触发 |
命令 | 描写叙述 |
---|---|
exec < path> [ < argument> ]* | 运行指定路径下的程序,并传递參数. |
export < name> < value> | 设置全局环境參数。此參数被设置后对全部进程都有效. |
ifup < interface> | 使指定的网络接口"上线",相当激活指定的网络接口 |
import < filename> | 导入一个额外的init配置文件. |
hostname < name> | 设置主机名 |
chdir < directory> | 改变工作文件夹. |
chmod < octal-mode> < path> | 改变指定文件的读取权限. |
chown < owner> < group> < path> | 改变指定文件的拥有都和组名的属性. |
chroot < directory> | 改变进行的根文件夹. |
class_start < serviceclass> | 启动指定类属的全部服务,假设服务已经启动,则不再反复启动. |
class_stop < serviceclass> | 停止指定类属的所胡服务. |
domainname < name> | 设置域名 |
insmod < path> | 安装模块到指定路径. |
mkdir < path> [mode] [owner] [group] | 用指定參数创建一个文件夹,在默认情况下,创建的文件夹读取权限为755.username为root,组名为root. |
mount < type> < device> < dir> [ < mountoption> ]* | 类似于linux的mount指令 |
setkey | TBD(To Be Determined) |
setprop < name> < value> | 设置属性及相应的值. |
setrlimit < resource> < cur> < max> | 设置资源的rlimit(资源限制),不懂就百度一下rlimit |
start < service> | 假设指定的服务未启动,则启动它. |
stop < service> | 假设指定的服务当前正在执行。则停止它. |
symlink < target> < path> | 创建一个符号链接. |
sysclktz < mins_west_of_gmt> | 设置系统基准时间. |
trigger < event> | Trigger an event. Used to queue an action from another action. 这名话没有理解,望高手指点. |
write < path > < string> [ < string> ]* | 往指定的文件写字符串. |
on property:vendor.dms.enable=1 // 当属性vendor.dms.enable 为1时触发
chmod 0777 /mnt/obb //改变/mnt/obb 操作权限
touch /mnt/obb/raw_driver //创建raw_driver文件
chmod 0777 /mnt/obb/raw_driver
symlink /vendor/bin/dms_release /dms_release //给 /vendor/bin/dms_release 创建软链接
start dms_server //启动定义的服务
参考:
Android init.rc文件浅析
init.rc深入学习
作为 Android 安全模型的一部分,Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。
SELinux 可以在各种模式下实现:
宽容模式 - 仅记录但不强制执行 SELinux 安全政策。
强制模式 - 强制执行并记录安全政策。如果失败,则显示为 EPERM 错误。
在选择强制执行级别时只能二择其一,您的选择将决定您的政策是采取操作,还是仅允许您收集潜在的失败事件。宽容模式在实现过程中尤其有用。
在开发环境可以通过:
setenforce 0 //宽容模式
setenforce 1 // 强制模式
SELinux 依靠标签来匹配操作和政策。标签用于决定允许的事项。套接字、文件和进程在 SELinux 中都有标签。SELinux 在做决定时需参照两点:一是为这些对象分配的标签,二是定义这些对象如何交互的政策。
在 SELinux 中,标签采用以下形式:user:role:type:mls_level
u:object_r:dms_exec:s0
政策规则采用以下形式:allow domains types:classes permissions;,其中:
allow appdomain app_data_file:file rw_file_perms;
// file_context
#dms
/vendor/bin/dms u:object_r:dms_exec:s0
//dms.te
type dms,domain;
type dms_exec,exec_type,file_type,vendor_file_type;
init_daemon_domain(dms)
net_domain(dms)
AOSP-安全性-功能
Android.mk 用预编译,将可执行文件加入系统中。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dms
LOCAL_SRC_FILES := dms
LOCAL_INIT_RC := dms.rc
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXcECUTABLES)
include $(BUILD_PREBUILT)
Android mk 引用 jar 包、so 库、aar 包,系统签名
Android系统开发进阶-Android编译系统介绍
1.
setprop vendor.dms.enable 1 //通过条件触发
or
start dms_server //启动dms_server
2.
logcat -b all -s init // 查看init进程log
3.
ps -ef | grep dms //查看dms进程id