recovery下的init.rc语法解析

来源:互联网 发布:炸群软件 编辑:程序博客网 时间:2024/06/03 21:46
#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#触发器条件为fson 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的Actionon 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_propson 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=*满足时的actionon 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:s0service healthd /sbin/healthd -r    critical    #在执行该服务之前修改其安全上下文为u:r:healthd:s0,默认是init程序的上下文    seclabel u:r:healthd:s0service recovery /sbin/recovery     #在执行该服务之前修改其安全上下文为u:r:recovery:s0,默认是init程序的上下文    seclabel u:r:recovery:s0service 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