recovery下的init.rc语法解析

#import 一个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   [  ]*
    #  打开路径为的一个文件,并写入一个或多个字符串。
    
    # 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     //全局环境变量中设在环境变量 。(这将会被所有在这命令之后运行的进程所继承)
    export PATH /sbin:/system/bin
    export ANDROID_ROOT /system
    export ANDROID_DATA /data
    export EXTERNAL_STORAGE /sdcard

	#symlink      //创建一个指向的软连接。
    symlink /system/etc /etc

	#mkdir  [mode] [owner] [group]   //创建一个目录,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和root组。
    mkdir /sdcard
    mkdir /system
    mkdir /data
    mkdir /cache
    #insmod    //加载中的模块。安装一个驱动模块
    insmod /sec.ko
    #mknod命令用于创建Linux中的字符设备文件和块设备文件。
    mknod /dev/sec c 182 0
    #chmod    //更改文件访问权限。
    chmod 0660 /dev/sec
    mkdir /sideload
    #mount    [  ]   //在目录挂载指定的设备。 可以是以 mtd@name 的形式指定一个mtd块设备。包括 "ro"、"rw"、"remount"、"noatime"、 ...
    mount tmpfs tmpfs /tmp

	#chown      //文件的所有者和组。
    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 网络接口
    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    [  [  ] ]   //创建一个Uinx域的名为/dev/socket/adbd  的套接字,并传递它的文件描述符给已启动的进程。 必须是 "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

你可能感兴趣的:(系统定制)