天天看点

android8.1系统启动过程(三) init.rc

在init进程中    parser.ParseConfig("/init.rc");

init.rc  AOSP/system/core/rootdir/init.rc   

    android初始化语言

//部分代码截取
...
import /init.${ro.hardware}.rc
import /vendor/etc/init/hw/init.${ro.hardware}.rc
import /init.usb.configfs.rc
import /init.${ro.zygote}.rc

on early-init
    # Set init and its forked children's oom_adj.
    write /proc/1/oom_score_adj -1000
...
           

主要包含5中类型语句    Action、Command、Service、Option、Import

[Import]  Import:导入脚本

[Action]  on:  on early-init、on early-boot、on boot、on init、on trigger 

on  <trigger>  [&& <trigger>]*  //设置触发器

    <command> 

    <command>                   //触发后执行的命令
           
on property:sys.boot_from_charger_mode=1
    class_stop charger
    trigger late-init
           

[Service]  Service:创建service      

service  <name>  <pathname>  [<arg>]*    //service名字  执行程序路径  传递参数

  <option>

  <option>
  ...

  //例子
  user root     //用户

  group  root readproc     //用户组

  oneshot/disable     //只启动一次/服务是关闭的
           
//这里以 init.zygote64.rc  为例

service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
    class main
    priority -20
    user root                                         
    group root readproc                                
    socket zygote stream 660 root system
    onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on
    ...
           

[setprop]  

setprop net.tcp.default_init_rwnd 60
           
generic_x86_64:/ # get prop
/system/bin/sh: get: not found
127|generic_x86_64:/ # get proc                                                
/system/bin/sh: get: not found
127|generic_x86_64:/ # getproc                                                 
/system/bin/sh: getproc: not found
127|generic_x86_64:/ # getprop                                                 
[dalvik.vm.appimageformat]: [lz4]
[dalvik.vm.dex2oat-Xms]: [64m]
[dalvik.vm.dex2oat-Xmx]: [512m]
[dalvik.vm.dexopt.secondary]: [true]
[dalvik.vm.heapsize]: [192m]
[dalvik.vm.image-dex2oat-Xms]: [64m]
[dalvik.vm.image-dex2oat-Xmx]: [64m]
           
generic_x86_64:/ # getprop | grep "sys.sysctl.extra_free_kbytes"               
[sys.sysctl.extra_free_kbytes]: [4500]
           

值得注意的是Android8.0  中对init.rc做了拆分每一个服务对应一个rc文件,例如Zygote启动脚本在  init.zygoteXX.rc中定义

init.zygote64.rc    AOSP/system/core/rootdir/init.rc

service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
    class main
    priority -20
    user root
    group root readproc
    socket zygote stream 660 root system
    onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on
    onrestart restart audioserver
    onrestart restart cameraserver
    onrestart restart media
    onrestart restart netd
    onrestart restart wificond
    writepid /dev/cpuset/foreground/tasks
           

代码分析

通知init进程创建zygote进程 

进程执行程序的路径为  /system/bin/app_process64  

后面传递进去的参数  -Xzygote /system/bin --zygote --start-system-server

class name:  指的是zygote进程的classname为main