init.rc介绍
- init.rc(system/core/rootdir/init.rc)是由Android Init Language编写(init语言说明)
Android init语言关键字定义在system/core/init/keywords.h文件中
- init.rc编译到手机中,位于手机系统的根目录下。adb shell ll 可以看到init.rc
- The Android Init Language包含四种类型:Actions, Commands, Services, and Options.
Actions格式:
on <trigger> <command> <command> <command>
Services格式:
service <name> <pathname> [ <argument> ]* <option> <option> ...
Options是用来修饰services.他们会影响到service何时,如何去初始化,常见的Options包括:
critical:critical修饰的service是一个device-critical service,如果在4分钟内退出超过4次,设备就会重启到recovery模式 disabled:disabled修饰的service将不会自动启动,必须明确的已名字来启动. setenv <name> <value>:在启动过程中,给name变量设置value值 socket <name> <type> <perm> [ <user> [ <group> [ <context> ] ] ] user <username> group <groupname> [ <groupname> ]* seclabel <securitycontext> oneshot:当服务退出时,不会重新启动。 class <name>:为service指定一个class name。被指定的同一个类中的所有services可能会同时被启动和停止。如果没有指定name,那么默认为default。 onrestart:当service重启时,执行一个命令
Commands:
exec <path> [ <argument> ]* export <name> <value> ifup <interface> import <filename> hostname <name> chdir <directory> chmod <octal-mode> <path> chown <owner> <group> <path> chroot <directory> class_start <serviceclass> class_stop <serviceclass> domainname <name> enable <servicename> insmod <path> mkdir <path> [mode] [owner] [group] mount <type> <device> <dir> [ <mountoption> ]* restorecon <path> [ <path> ]* restorecon_recursive <path> [ <path> ]* setcon <securitycontext> setenforce 0|1 setkey setprop <name> <value> setrlimit <resource> <cur> <max> setsebool <name> <value> start <service> stop <service> symlink <target> <path> sysclktz <mins_west_of_gmt> trigger <event> wait <path> [ <timeout> ] write <path> <string> [ <string> ]*
eg:
# adbd is controlled via property triggers in init.<platform>.usb.rc service adbd /sbin/adbd class core socket adbd stream 660 system system disabled seclabel u:r:adbd:s0