【Android7.1.2源码解析系列】init.rc全流程注释

来源:互联网 发布:可视化布局系统 源码 编辑:程序博客网 时间:2024/06/13 07:03
# Copyright (C) 2012 The Android Open Source Project
#
# IMPORTANT: Do not create world writable files or directories.
# This is a common source of Android security bugs.
#


# 分析开始


# 第一步,导入其他的rc文件,这里先不管这些rc文件的内容,只对init.rc文件进行分析


import /init.environ.rc
import /init.usb.rc
import /init.${ro.hardware}.rc
import /init.${ro.zygote}.rc
import /init.trace.rc


# 第二步,动作片段1,在early-init触发器被触发时运行以下的命令
# 这里说明一下,early-init触发器不是init语法当中原本定义的触发器,但是可以在init.c的代码当中对此触发器进行触发
on early-init
    # Set init and its forked children's oom_adj.
# 直译,设置init进程以及它的子进程的oom_adj(内存清理优先级设置为最低,可以保证init永远不会被内存清理清除掉)
    write /proc/1/oom_score_adj -1000


    # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
# 直译,在mmap/mprotect调用时对可执行性严格支持SELinux检查
    write /sys/fs/selinux/checkreqprot 0


    # Set the security context for the init process.
    # This should occur before anything else (e.g. ueventd) is started.
# 直译,设置init进程的安全上下文
# 这应该在任何程序(比如ueventd)开启前发生。
    setcon u:r:init:s0


    # Set the security context of /adb_keys if present.
# 直译,设置/adb_keys的安全上下文
    restorecon /adb_keys


    start ueventd


    # create mountpoints
# 直译,创建挂载点
    mkdir /mnt 0775 root system


# 第三部分,动作片段2,在init触发器被触发时调用以下命令
on init
# 设置系统时钟
    sysclktz 0

# 设置日志等级
    loglevel 3


    # Backward compatibility
# 直译,增强兼容性
# 将system/etc链接到/etc,将sys/kernel/debug链接到/d
    symlink system/etc /etc
    symlink sys/kernel/debug /d


    # Right now vendor lives on the same filesystem as system,
    # but someday that may change.
# 直译,现在vendor和系统存在于同一个文件系统,不过也许某天会改变
    symlink system/vendor /vendor


    # Create cgroup mount point for cpu accounting
# 直译,为cpu的计算创建挂载点
    mkdir /acct
    mount cgroup none /acct cpuacct
    mkdir /acct/uid


    # Create cgroup mount point for memory
# 直译,为内存创建挂载点
    mount tmpfs none /sys/fs/cgroup mode=0750,uid=0,gid=1000
    mkdir /sys/fs/cgroup/memory 0750 root system
    mount cgroup none /sys/fs/cgroup/memory memory
    write /sys/fs/cgroup/memory/memory.move_charge_at_immigrate 1
    chown root system /sys/fs/cgroup/memory/tasks
    chmod 0660 /sys/fs/cgroup/memory/tasks
    mkdir /sys/fs/cgroup/memory/sw 0750 root system
    write /sys/fs/cgroup/memory/sw/memory.swappiness 100
    write /sys/fs/cgroup/memory/sw/memory.move_charge_at_immigrate 1
    chown root system /sys/fs/cgroup/memory/sw/tasks
    chmod 0660 /sys/fs/cgroup/memory/sw/tasks

# 创建system、data、cache、config文件夹
    mkdir /system
    mkdir /data 0771 system system
    mkdir /cache 0770 system cache
    mkdir /config 0500 root root


    # See storage config details at http://source.android.com/tech/storage/
# 直译,在http://source.android.com/tech/storage/查看更多的存储配置信息
# 创建存储目录
    mkdir /mnt/shell 0700 shell shell
    mkdir /mnt/media_rw 0700 media_rw media_rw
    mkdir /storage 0751 root sdcard_r


    # Directory for putting things only root should see.
# 直译,一个只有root用户可见的用来放置文件的目录
    mkdir /mnt/secure 0700 root root


    # Directory for staging bindmounts
# 直译,用于绑定挂载的目录
    mkdir /mnt/secure/staging 0700 root root


    # Directory-target for where the secure container
    # imagefile directory will be bind-mounted
# 包文件目录---安全文件的包含者---的目标目录会被绑定挂载
    mkdir /mnt/secure/asec  0700 root root


    # Secure container public mount points.
# 安全文件包含者的公共挂载点
    mkdir /mnt/asec  0700 root system
    mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000


    # Filesystem image public mount points.
# 文件系统包的公共挂载点
    mkdir /mnt/obb 0700 root system
    mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000


    # memory control cgroup
# 内存控制组
    mkdir /dev/memcg 0700 root system
    mount cgroup none /dev/memcg memory


    write /proc/sys/kernel/panic_on_oops 1
    write /proc/sys/kernel/hung_task_timeout_secs 0
    write /proc/cpu/alignment 4
    write /proc/sys/kernel/sched_latency_ns 10000000
    write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
    write /proc/sys/kernel/sched_compat_yield 1
    write /proc/sys/kernel/sched_child_runs_first 0
    write /proc/sys/kernel/randomize_va_space 2
    write /proc/sys/kernel/kptr_restrict 2
    write /proc/sys/vm/mmap_min_addr 32768
    write /proc/sys/net/ipv4/ping_group_range "0 2147483647"
    write /proc/sys/net/unix/max_dgram_qlen 300
    write /proc/sys/kernel/sched_rt_runtime_us 950000
    write /proc/sys/kernel/sched_rt_period_us 1000000


    # reflect fwmark from incoming packets onto generated replies
# 直译,将fwmark从输入的包中映射到生成的依赖中
    write /proc/sys/net/ipv4/fwmark_reflect 1
    write /proc/sys/net/ipv6/fwmark_reflect 1


    # set fwmark on accepted sockets
# 直译,设置fwmark到可接受的socket
    write /proc/sys/net/ipv4/tcp_fwmark_accept 1


    # Create cgroup mount points for process groups
# 直译,为进程组创建控制组的挂载节点
    mkdir /dev/cpuctl
    mount cgroup none /dev/cpuctl cpu
    chown system system /dev/cpuctl
    chmod 0660 /dev/cpuctl
    chown system system /dev/cpuctl/tasks
    chmod 0666 /dev/cpuctl/tasks
    write /dev/cpuctl/cpu.shares 1024
    write /dev/cpuctl/cpu.rt_runtime_us 800000
    write /dev/cpuctl/cpu.rt_period_us 1000000


    mkdir /dev/cpuctl/bg_non_interactive
    chown system system /dev/cpuctl/bg_non_interactive/tasks
    chmod 0666 /dev/cpuctl/bg_non_interactive/tasks
    # 5.0 %
# 5.0加入
# 重设cpu运行数据
    write /dev/cpuctl/bg_non_interactive/cpu.shares 52
    write /dev/cpuctl/bg_non_interactive/cpu.rt_runtime_us 700000
    write /dev/cpuctl/bg_non_interactive/cpu.rt_period_us 1000000


    # qtaguid will limit access to specific data based on group memberships.
    #   net_bw_acct grants impersonation of socket owners.
    #   net_bw_stats grants access to other apps' detailed tagged-socket stats.
# 直译,qtaguid会限制基于组成员的特定数据权限。
# net_bw_acct记录了授权给socket拥有者进行模拟
# net_bw_stats记录了给其他app细节化的已标记的socket统计表
    chown root net_bw_acct /proc/net/xt_qtaguid/ctrl
    chown root net_bw_stats /proc/net/xt_qtaguid/stats


    # Allow everybody to read the xt_qtaguid resource tracking misc dev.
    # This is needed by any process that uses socket tagging.
# 直译,允许每个人读取xt_qtaguid资源的崩溃最小硬件指令集。
# 这是被任何使用socekt来标记的进程所需要的。
    chmod 0644 /dev/xt_qtaguid

    # Create location for fs_mgr to store abbreviated output from filesystem
    # checker programs.
# 直译,为fs_mgr创建位置来存储来自文件系统的简略输出
    mkdir /dev/fscklogs 0770 root system


    # pstore/ramoops previous console log
# 直译,pstore/ramoops的有价值的控制台日志
    mount pstore pstore /sys/fs/pstore
    chown system log /sys/fs/pstore/console-ramoops
    chmod 0440 /sys/fs/pstore/console-ramoops


# Healthd can trigger a full boot from charger mode by signaling this
# property when the power button is held.
# 直译,电池管理进程可以通过标记property:sys.boot_from_charger_mode=1来触发一个完整的开机进程
# 第四部分,动作片段3,是否是从充电模式打开
on property:sys.boot_from_charger_mode=1
    class_stop charger
    trigger late-init


# Load properties from /system/ + /factory after fs mount.
# 在文件系统挂载完成之后加载/system/与/factory中的所有属性
# 第五部分,动作片段4,加载/system/与/factory的属性
on load_all_props_action
    load_all_props


# Indicate to fw loaders that the relevant mounts are up.
# 直译,向fw加载器表明相关的挂载已经上传
# 第六部分,动作片段5,挂载完成后移除临时的booting文件
on firmware_mounts_complete
    rm /dev/.booting


# Mount filesystems and start core system services.
# 直译,挂载文件系统并且开启核心系统服务
# 第七部分,动作片段6,init的末尾,触发early-fs、fs、post-fs、post-fs-data
on late-init
    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.
# 直译,在fs挂载完成之后加载/system/和/factory的属性,将这个放到别的动作当中以至于加载动作可以在
# 优先执行的fs触发器完成后执行。
    trigger load_all_props_action


    # Remove a file to wake up anything waiting for firmware.
# 移除掉一个文件来唤醒所有等待firmware的程序
    trigger firmware_mounts_complete

    trigger early-boot
    trigger boot


# 第八部分,动作片段7, 当系统安装基本完成以后进行目录的重新挂载,将目录的权限设置为用户使用时的权限
# 粘贴文件系统
on post-fs
    # once everything is setup, no need to modify /
# 当所有文件都设置好之后,将根目录重挂载为只读
    mount rootfs rootfs / ro remount
    # mount shared so changes propagate into child namespaces
# 直译,挂载根目录为共享,所以改变可以扩展到子命名空间
    mount rootfs rootfs / shared rec


    # We chown/chmod /cache again so because mount is run as root + defaults
# 直译,我们修改了/cache的所有者以及他的权限,因为挂载器是运行在root与default权限下的
    chown system cache /cache
    chmod 0770 /cache
    # We restorecon /cache in case the cache partition has been reset.
# 我们递归的重配置/cache文件夹下的所有文件的权限
    restorecon_recursive /cache


    # This may have been created by the recovery system with odd permissions
# 直译,这可能会在临时权限下的恢复系统创建
    chown system cache /cache/recovery
    chmod 0770 /cache/recovery


    # change permissions on vmallocinfo so we can grab it from bugreports
# 修改vmallocinfo(内存分配信息)的权限所以我们可以通过bug报告获取它
    chown root log /proc/vmallocinfo
    chmod 0440 /proc/vmallocinfo

# 修改slab内存分配算法的权限以至于我们可以获取bug报告
    chown root log /proc/slabinfo
    chmod 0440 /proc/slabinfo


    # change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks
# 直译,改变kmsg(系统内核日志)以及sysrq-trigger(系统响应触发器)的权限所以bug报告可以抓取内核线程的栈状态
    chown root system /proc/kmsg
    chmod 0440 /proc/kmsg
    chown root system /proc/sysrq-trigger
    chmod 0220 /proc/sysrq-trigger
    chown system log /proc/last_kmsg
    chmod 0440 /proc/last_kmsg

    # make the selinux kernel policy world-readable
# 直译,使得selinux的内核策略全局可读
    chmod 0444 /sys/fs/selinux/policy


    # create the lost+found directories, so as to enforce our permissions
# 创建lost+found的目录,以便于设置我们的权限
    mkdir /cache/lost+found 0770 root root


# 第九部分,动作片段8,文件系统复制完成后,处理文件系统的数据
# 粘贴文件数据
on post-fs-data
    # We chown/chmod /data again so because mount is run as root + defaults
# 直译,我们修改了/data的所有者和权限,因为挂载操作是默认运行在root状态的
    chown system system /data
    chmod 0771 /data
    # We restorecon /data in case the userdata partition has been reset.
# 直译,一旦用户数据的分区被设置好,我们就对/data目录下的文件(夹)进行权限设置
    restorecon /data


    # Avoid predictable entropy pool. Carry over entropy from previous boot.
# 直译,避免避免可预见的熵池。将熵推迟到开机之前
    copy /data/system/entropy.dat /dev/urandom


    # Create dump dir and collect dumps.
    # Do this before we mount cache so eventually we can use cache for
    # storing dumps on platforms which do not have a dedicated dump partition.
# 直译,创建回收站目录并且回收垃圾。
# 在我们挂载cache文件夹之前进行这个命令,这样我们就可以使用cache来
# 存储还没有创建一个垃圾分区的平台的垃圾。
    mkdir /data/dontpanic 0750 root log


    # Collect apanic data, free resources and re-arm trigger
# 直译,收集未知异常数据、空闲资源以及重用的触发器
    copy /proc/apanic_console /data/dontpanic/apanic_console
    chown root log /data/dontpanic/apanic_console
    chmod 0640 /data/dontpanic/apanic_console


    copy /proc/apanic_threads /data/dontpanic/apanic_threads
    chown root log /data/dontpanic/apanic_threads
    chmod 0640 /data/dontpanic/apanic_threads


    write /proc/apanic_console 1


    # create basic filesystem structure
# 直译,创建基本的文件系统结构
    mkdir /data/misc 01771 system misc
    mkdir /data/misc/adb 02750 system shell
    mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack
    mkdir /data/misc/bluetooth 0770 system system
    mkdir /data/misc/keystore 0700 keystore keystore
    mkdir /data/misc/keychain 0771 system system
    mkdir /data/misc/net 0750 root shell
    mkdir /data/misc/radio 0770 system radio
    mkdir /data/misc/sms 0770 system radio
    mkdir /data/misc/zoneinfo 0775 system system
    mkdir /data/misc/vpn 0770 system vpn
    mkdir /data/misc/shared_relro 0771 shared_relro shared_relro
    mkdir /data/misc/systemkeys 0700 system system
    mkdir /data/misc/wifi 0770 wifi wifi
    mkdir /data/misc/wifi/sockets 0770 wifi wifi
    mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
    mkdir /data/misc/ethernet 0770 system system
    mkdir /data/misc/dhcp 0770 dhcp dhcp
    mkdir /data/misc/user 0771 root root
    # give system access to wpa_supplicant.conf for backup and restore
# 直译,授予wpa_supplicant系统权限来进行备份和重载
    chmod 0660 /data/misc/wifi/wpa_supplicant.conf
    mkdir /data/local 0751 root root
    mkdir /data/misc/media 0700 media media


    # For security reasons, /data/local/tmp should always be empty.
    # Do not place files or directories in /data/local/tmp
# 直译,为了保证安全,/data/local/tmp应该永远为空。
# 不要将文件(夹)放到/data/local/tmp目录下
# 创建了data目录下app相关文件结构
    mkdir /data/local/tmp 0771 shell shell
    mkdir /data/data 0771 system system
    mkdir /data/app-private 0771 system system
    mkdir /data/app-asec 0700 root root
    mkdir /data/app-lib 0771 system system
    mkdir /data/app 0771 system system
    mkdir /data/property 0700 root root


    # create dalvik-cache, so as to enforce our permissions
# 直译,创建dalvik缓存,以便于实行我们的权限
    mkdir /data/dalvik-cache 0771 root root
    mkdir /data/dalvik-cache/profiles 0711 system system


    # create resource-cache and double-check the perms
# 直译,创建资源缓存以及双重检查权限
    mkdir /data/resource-cache 0771 system system
    chown system system /data/resource-cache
    chmod 0771 /data/resource-cache


    # create the lost+found directories, so as to enforce our permissions
# 直译,创建lost+found目录,以便于实施我们的权限
    mkdir /data/lost+found 0770 root root


    # create directory for DRM plug-ins - give drm the read/write access to
    # the following directory.
# 直译,为DRM(数字权限管理器)插件创建目录
# 给数字权限管理器对于该目录读写的权限
    mkdir /data/drm 0770 drm drm


    # create directory for MediaDrm plug-ins - give drm the read/write access to
    # the following directory.
# 直译,为媒体数字权限管理器插件创建目录
# 给数字权限管理器对于以下目录的读写权限
    mkdir /data/mediadrm 0770 mediadrm mediadrm


    mkdir /data/adb 0700 root root


    # symlink to bugreport storage location
# 直译,链接将bug报告器的存储位置
    symlink data/com.android.shell/files/bugreports /data/bugreports


    # Separate location for storing security policy files on data
# 直译,为存储安全策略文件在/data目录下分出分区
    mkdir /data/security 0711 system system


    # Reload policy from /data/security if present.
# 直译,在当前从/data/security重新加载策略
    setprop selinux.reload_policy 1


    # Set SELinux security contexts on upgrade or policy update.
# 将SELinux的安全上下文进行升级或者策略进行升级
# 即对于/data目录下的文件(夹)进行递归
    restorecon_recursive /data


    # If there is no fs-post-data action in the init.<device>.rc file, you
    # must uncomment this line, otherwise encrypted filesystems
    # won't work.
    # Set indication (checked by vold) that we have finished this action
    #setprop vold.post_fs_data_done 1

# 直译,如果在init过程中没有fs-post-data动作,你必须要将此行解除注释,否则
# 加密的文件系统不会工作。设置明确的标志(通过vold来检查)来明确我们已经结束了该动作
# 需要解除注释的目录:setprop vold.post_fs_data_done 1


# 第十部份,动作片段9,init完成后的开机动作
on boot
    # basic network init
# 直译,基本网络初始化
    ifup lo
    hostname localhost
    domainname localdomain


    # set RLIMIT_NICE to allow priorities from 19 to -20
# 直译,设置权限限制来设置优先级由19到-20
    setrlimit 13 40 40


    # Memory management.  Basic kernel parameters, and allow the high
    # level system server to be able to adjust the kernel OOM driver
    # parameters to match how it is managing things.
# 直译,内存管理器。基本的内核参数,允许高级的系统服务来调整内核内存溢出驱动器参数
# 来匹配管理程序的方式
    write /proc/sys/vm/overcommit_memory 1
    write /proc/sys/vm/min_free_order_shift 4
    chown root system /sys/module/lowmemorykiller/parameters/adj
    chmod 0220 /sys/module/lowmemorykiller/parameters/adj
    chown root system /sys/module/lowmemorykiller/parameters/minfree
    chmod 0220 /sys/module/lowmemorykiller/parameters/minfree


    # Tweak background writeout
# 直译,微调后台输出
    write /proc/sys/vm/dirty_expire_centisecs 200
    write /proc/sys/vm/dirty_background_ratio  5


    # Permissions for System Server and daemons.
# 直译,系统服务和守护进程的权限
    chown radio system /sys/android_power/state
    chown radio system /sys/android_power/request_state
    chown radio system /sys/android_power/acquire_full_wake_lock
    chown radio system /sys/android_power/acquire_partial_wake_lock
    chown radio system /sys/android_power/release_wake_lock
    chown system system /sys/power/autosleep
    chown system system /sys/power/state
    chown system system /sys/power/wakeup_count
    chown radio system /sys/power/wake_lock
    chown radio system /sys/power/wake_unlock
    chmod 0660 /sys/power/state
    chmod 0660 /sys/power/wake_lock
    chmod 0660 /sys/power/wake_unlock


    chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
    chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_slack
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_slack
    chown system system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
    chown system system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
    chown system system /sys/devices/system/cpu/cpufreq/interactive/target_loads
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/target_loads
    chown system system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
    chown system system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
    chown system system /sys/devices/system/cpu/cpufreq/interactive/boost
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
    chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
    chown system system /sys/devices/system/cpu/cpufreq/interactive/input_boost
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
    chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
    chown system system /sys/devices/system/cpu/cpufreq/interactive/io_is_busy
    chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy


    # Assume SMP uses shared cpufreq policy for all CPUs
# 将标准管理器使用的cpu序列分享策略使用到所有的CPU
    chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq


    chown system system /sys/class/timed_output/vibrator/enable
    chown system system /sys/class/leds/keyboard-backlight/brightness
    chown system system /sys/class/leds/lcd-backlight/brightness
    chown system system /sys/class/leds/button-backlight/brightness
    chown system system /sys/class/leds/jogball-backlight/brightness
    chown system system /sys/class/leds/red/brightness
    chown system system /sys/class/leds/green/brightness
    chown system system /sys/class/leds/blue/brightness
    chown system system /sys/class/leds/red/device/grpfreq
    chown system system /sys/class/leds/red/device/grppwm
    chown system system /sys/class/leds/red/device/blink
    chown system system /sys/class/timed_output/vibrator/enable
    chown system system /sys/module/sco/parameters/disable_esco
    chown system system /sys/kernel/ipv4/tcp_wmem_min
    chown system system /sys/kernel/ipv4/tcp_wmem_def
    chown system system /sys/kernel/ipv4/tcp_wmem_max
    chown system system /sys/kernel/ipv4/tcp_rmem_min
    chown system system /sys/kernel/ipv4/tcp_rmem_def
    chown system system /sys/kernel/ipv4/tcp_rmem_max
    chown root radio /proc/cmdline


    # Define default initial receive window size in segments.
# 直译,定义段中默认的初始化接收窗口大小
    setprop net.tcp.default_init_rwnd 60


    class_start core


# 第十一部分,动作片段10,触发器为未加密,打开main和late_start组
on nonencrypted
    class_start main
    class_start late_start


# 第十二部分,动作片段11,判断vold.decrypt的值来开启默认加密片段
on property:vold.decrypt=trigger_default_encryption
    start defaultcrypto


# 第十三部分,动作片段12,判断vold.decrypt的值来开启surfaceflinger(界面管理器)和encrypt(加密器)
on property:vold.decrypt=trigger_encryption
    start surfaceflinger
    start encrypt


# 第十四部分,动作片段13,传递init程序的日志等级的变化
on property:sys.init_log_level=*
    loglevel ${sys.init_log_level}



# 第十五部分,动作片段14,充电时开启充电组的服务
on charger
    class_start charger


# 第十六部分,动作片段15,依然是判断vold.decrypt的值
on property:vold.decrypt=trigger_reset_main
    class_reset main


# 第十七部分,动作片段16,还是判断vold.decrypt的值来加载存留属性
on property:vold.decrypt=trigger_load_persist_props
    load_persist_props


# 第十八部分,动作片段17,判断是否为复制文件系统数据
on property:vold.decrypt=trigger_post_fs_data
    trigger post-fs-data


# 第十九部分,动作片段18,还是判断设备加密情况
on property:vold.decrypt=trigger_restart_min_framework
    class_start main


# 第二十部分,动作片段19.判断加密情况
on property:vold.decrypt=trigger_restart_framework
    class_start main
    class_start late_start


# 第二十一部分,动作片段20,判断加密情况
on property:vold.decrypt=trigger_shutdown_framework
    class_reset late_start
    class_reset main


# 第二十二部分,动作片段21,当powerctl的值变化时,进行重启动作
on property:sys.powerctl=*
    powerctl ${sys.powerctl}


# system server cannot write to /proc/sys files,
# and chown/chmod does not work for /proc/sys/ entries.
# So proxy writes through init.
# 直译,系统服务不可以写入到/proc/sys文件中,
# 并且chown和chmod不可以在/proc/sys/实体中运行。
# 所以采用代理在初始化过程中写入。


# 第二十三部分,动作片段22,写入系统中的额外数据
on property:sys.sysctl.extra_free_kbytes=*
    write /proc/sys/vm/extra_free_kbytes ${sys.sysctl.extra_free_kbytes}


# "tcp_default_init_rwnd" Is too long!
# 直译,"tcp_default_init_rwnd"太长了
# 将最新的tcp的初始化值写入到对应文件当中
# 第二十四部分,动作片段23,写入tcp初始值
on property:sys.sysctl.tcp_def_init_rwnd=*
    write /proc/sys/net/ipv4/tcp_default_init_rwnd ${sys.sysctl.tcp_def_init_rwnd}




## Daemon processes to be run by init.
##
## 直译,被init所启动的守护进程


# 接下来主要是服务的部分,与动作不同,服务是多个条件下运行一个程序,动作是在一个条件下运行多个命令




# 第二十五部分,服务片段1,设置守护进程
service ueventd /sbin/ueventd
    class core
    critical
    seclabel u:r:ueventd:s0


# 第二十六部分,服务片段2,设置日志进程
service logd /system/bin/logd
    class core
    socket logd stream 0666 logd logd
    socket logdr seqpacket 0666 logd logd
    socket logdw dgram 0222 logd logd
    seclabel u:r:logd:s0


# 第二十七部分,服务片段3,设置电量进程
service healthd /sbin/healthd
    class core
    critical
    seclabel u:r:healthd:s0


# 第二十八部分,服务片段4,设置控制台进程
service console /system/bin/sh
    class core
    console
    disabled
#   user shell
    group shell log
    seclabel u:r:shell:s0


# 第二十九部分,动作片段24,判断debug标志来打开控制台进程
on property:ro.debuggable=1
    start console


# adbd is controlled via property triggers in init.<platform>.usb.rc
# 第三十部分,服务片段5,设置adb进程
service adbd /sbin/adbd --root_seclabel=u:r:su:s0
    class core
    socket adbd stream 660 system system
    disabled
    seclabel u:r:adbd:s0


# adbd on at boot in emulator
# 第三十一部分,动作片段25,在仿真器中adb会在开机时启动
on property:ro.kernel.qemu=1
    start adbd


# 第三十二部分,服务片段6,设置lmkd进程(low memory killer)
service lmkd /system/bin/lmkd
    class core
    critical
    socket lmkd seqpacket 0660 system system


# 第三十三部分,服务片段7,设置servicemanager进程,framework层运行的各个服务的管理者
service servicemanager /system/bin/servicemanager
    class core
    user system
    group system
    critical
    onrestart restart healthd
    onrestart restart zygote
    onrestart restart media
    onrestart restart surfaceflinger
    onrestart restart drm


# 第三十四部分,服务片段8,设置vold进程(管理外部存储器)
service vold /system/bin/vold
    class core
    socket vold stream 0660 root mount
    ioprio be 2


# 第三十五部分,服务片段9,设置netd进程
service netd /system/bin/netd
    class main
    socket netd stream 0660 root system
    socket dnsproxyd stream 0660 root inet
    socket mdns stream 0660 root system
    socket fwmarkd stream 0660 root inet


# 第三十六部分,服务片段10,设置debuggerd进程
service debuggerd /system/bin/debuggerd
    class main


# 第三十七部分,服务片段11,设置debuggerd64进程
service debuggerd64 /system/bin/debuggerd64
    class main


# 第三十八部分,服务片段12,设置ril-daemon进程(ril的守护进程,守护了通话服务)
service ril-daemon /system/bin/rild
    class main
    socket rild stream 660 root radio
    socket rild-debug stream 660 radio system
    user root
    group radio cache inet misc audio log


# 第三十九部分,服务片段13,设置surfaceflinger进程(用以控制android手机界面)
service surfaceflinger /system/bin/surfaceflinger
    class core
#   user system
    group graphics drmrpc
    onrestart restart zygote


# 第四十部分,服务片段14,设置drm进程,digital rights manager
service drm /system/bin/drmserver
    class main
    user drm
    group drm system inet drmrpc


# 第四十一部分,服务片段15,设置media进程
service media /system/bin/mediaserver
    class main
    user media
    group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm
    ioprio rt 4


# 第四十二部分,服务片段16,设置defaultcrypto进程
# One shot invocation to deal with encrypted volume.
# 直译,单次运行处理加密声音
service defaultcrypto /system/bin/vdc --wait cryptfs mountdefaultencrypted
    disabled
    oneshot
# vold会设置vold.decrypt来启动trigger_restart_framework或者trigger_restart_min_framework
    # vold will set vold.decrypt to trigger_restart_framework (default
    # encryption) or trigger_restart_min_framework (other encryption)


# One shot invocation to encrypt unencrypted volumes
# 直译,单次运行以解密声音
# 第四十三部分,服务片段17,设置encrypt进程
service encrypt /system/bin/vdc --wait cryptfs enablecrypto inplace default
    disabled
    oneshot
    # vold will set vold.decrypt to trigger_restart_framework (default
    # encryption)


# 第四十四部分,服务片段18,设置bootanim进程
service bootanim /system/bin/bootanimation
    class core
    user graphics
    group graphics audio
    disabled
    oneshot


# 第四十五部分,服务片段19,设置installd进程
service installd /system/bin/installd
    class main
    socket installd stream 600 system system


# 第四十六部分,服务片段20,设置flash_recovery进程
service flash_recovery /system/bin/install-recovery.sh
    class main
    seclabel u:r:install_recovery:s0
    oneshot


# 第四十七部分,服务片段21,设置racoon进程(udp?)
service racoon /system/bin/racoon
    class main
    socket racoon stream 600 system system
    # IKE uses UDP port 500. Racoon will setuid to vpn after binding the port.
    group vpn net_admin inet
    disabled
    oneshot


# 第四十八部分,服务片段22,设置mtpd进程(媒体传输协议)
service mtpd /system/bin/mtpd
    class main
    socket mtpd stream 600 system system
    user vpn
    group vpn net_admin inet net_raw
    disabled
    oneshot


# 第四十九部分,服务片段23,设置keystore进程
service keystore /system/bin/keystore /data/misc/keystore
    class main
    user keystore
    group keystore drmrpc


# 第五十部分,服务片段24,设置dumpstate进程
service dumpstate /system/bin/dumpstate -s
    class main
    socket dumpstate stream 0660 shell log
    disabled
    oneshot


# 第五十一部分,服务片段25,设置mdnsd进程
service mdnsd /system/bin/mdnsd
    class main
    user mdnsr
    group inet net_raw
    socket mdnsd stream 0660 mdnsr inet
    disabled
    oneshot


# 第五十二部分,服务片段26,设置pre-recovery进程
service pre-recovery /system/bin/uncrypt
    class main
    disabled
    oneshot
1 0
原创粉丝点击