版权声明:如需转载请注明出处 https://blog.csdn.net/zhonglunshun/article/details/78625375
#import <filename>一个init配置文件,扩展当前配置。
import /init.recovery.${ro.hardware}.rc
# 触发条件early-init,在early-init阶段调用以下行
on early-init
# Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
write /sys/fs/selinux/checkreqprot 0
# write <path> <string> [ <string> ]*
# 打开路径为<path>的一个文件,并写入一个或多个字符串。
# Set the security context for the init process.
# This should occur before anything else (e.g. ueventd) is started.
setcon u:r:init:s0
#这段脚本的意思是init进程启动之后就马上调用函数setcon将自己的安全上下文设置为“u:r:init:s0”,即将init进程的domain指定为init。
start ueventd
#执行start ueventd的命令。ueventd是一个service后面有定义
start healthd
#看后面的定义可知healthd服务所在的进程为u:r:healthd:s0 位于root下的 /sbin/healthd下的pid为1的进程
# 触发条件init,在init阶段调用以下行
on init
#export <name> <value> //全局环境变量中设在环境变量 <name>为<value>。(这将会被所有在这命令之后运行的进程所继承)
export PATH /sbin:/system/bin
export ANDROID_ROOT /system
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
#symlink <target> <path> //创建一个指向<path>的软连接<target>。
symlink /system/etc /etc
#mkdir <path> [mode] [owner] [group] //创建一个目录<path>,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和root组。
mkdir /sdcard
mkdir /system
mkdir /data
mkdir /cache
#insmod <path> //加载<path>中的模块。安装一个驱动模块
insmod /sec.ko
#mknod命令用于创建Linux中的字符设备文件和块设备文件。
mknod /dev/sec c 182 0
#chmod <octal-mode> <path> //更改文件访问权限。
chmod 0660 /dev/sec
mkdir /sideload
#mount <type> <device> <dir> [ <mountoption> ] //在目录<dir>挂载指定的设备。<device> 可以是以 mtd@name 的形式指定一个mtd块设备。<mountoption>包括 "ro"、"rw"、"remount"、"noatime"、 ...
mount tmpfs tmpfs /tmp
#chown <owner> <group> <path> //文件的所有者和组。
chown root shell /tmp
chmod 0775 /tmp
chmod 666 /dev/jmt101
chown system media/dev/jmt101
write /proc/sys/kernel/panic_on_oops 1
write /proc/sys/vm/max_map_count 1000000
#触发器条件为fs
on fs
write /proc/bootprof "start mobicore (on fs)"
chmod 0600 /dev/mobicore
chown system system /dev/mobicore
chmod 0666 /dev/mobicore-user
chown system system /dev/mobicore-user
chmod 666 /dev/jmt101
chown system media/dev/jmt101
# MobiCore Daemon Paths
export MC_AUTH_TOKEN_PATH /efs
#开启服务 mobicore
start mobicore
write /proc/bootprof "start mobicore end (on fs)"
#创建一个目录 权限0770 并属于shell 用户和shell 组。
mkdir /dev/usb-ffs 0770 shell shell
mkdir /dev/usb-ffs/adb 0770 shell shell
# 试图在目录/dev/usb-ffs/adb挂载指定的设备adb 类型是functionfs 参数为uid=2000,gid=2000
mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 0BB4
write /sys/class/android_usb/android0/idProduct 0c01
write /sys/class/android_usb/android0/f_ffs/aliases adb
write /sys/class/android_usb/android0/functions adb
#触发条件为boot的Action
on boot
#ifup <interface>网络接口
ifup lo
#设置主机名为localhost
hostname localhost
#设置域名localdomain
domainname localdomain
#启动所有default服务类下的未运行服务。(和服务中的class对应)
class_start default
# Load properties from /system/ + /factory after fs mount.
on load_all_props_action
#从/system,/vendor加载属性。默认包含在init.rc
load_all_props
on firmware_mounts_complete
#删除/dev/.booting
rm /dev/.booting
# Mount filesystems and start core system services.
on late-init
#触发一个事件。用于将一个action与另一个 action排列。
trigger early-fs
trigger fs
trigger post-fs
trigger post-fs-data
# Load properties from /system/ + /factory after fs mount. Place
# this in another action so that the load will be scheduled after the prior
# issued fs triggers have completed.
trigger load_all_props_action
# Remove a file to wake up anything waiting for firmware
trigger firmware_mounts_complete
trigger early-boot
trigger boot
#当条件property:sys.powerctl=*满足时的action
on property:sys.powerctl=*
#用来应对sys.powerctl中系统属性的变化,用于系统重启
powerctl ${sys.powerctl}
service ueventd /sbin/ueventd
#表示这是一个关键设备服务.如果4分钟内此服务退出4次以上,那么这个设备将重启进入recovery模式
critical
#在执行该服务之前修改其安全上下文为u:r:ueventd:s0,默认是init程序的上下文
seclabel u:r:ueventd:s0
service healthd /sbin/healthd -r
critical
#在执行该服务之前修改其安全上下文为u:r:healthd:s0,默认是init程序的上下文
seclabel u:r:healthd:s0
service recovery /sbin/recovery
#在执行该服务之前修改其安全上下文为u:r:recovery:s0,默认是init程序的上下文
seclabel u:r:recovery:s0
service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
#这个服务不会同与他同trigger(触发器)下的服务自动启动。他必须被明确的按名启动。
disabled
#socket <name> <type> <perm> [ <user> [ <group> ] ] //创建一个Uinx域的名为/dev/socket/adbd 的套接字,并传递它的文件描述符给已启动的进程。<type> 必须是 "dgram"或"stream"。User 和 group默认为0。这里是system
socket adbd stream 660 system system
#在执行该服务之前修改其安全上下文为u:r:adbd:s0,默认是init程序的上下文
seclabel u:r:adbd:s0
# Always start adbd on userdebug and eng builds
# property:ro.debuggable=1时默认开启adb调试
on property:ro.debuggable=1
write /sys/class/android_usb/android0/enable 1
#启动adbd服务
start adbd
# Restart adbd so it can run as root
#以root形式重启adbd服务
on property:service.adb.root=1
write /sys/class/android_usb/android0/enable 0
restart adbd
write /sys/class/android_usb/android0/enable 1
# Start Daemon (Registry directories should already be present)
service mobicore /system/bin/mcDriverDaemon -r /system/app/mcRegistry/020f0000000000000000000000000000.drbin -r /system/app/mcRegistry/05120000000000000000000000000000.drbin -r /system/app/mcRegistry/070b0000000000000000000000000000.drbin
user system
group system
class core
oneshot