init进程——从kernel Log查看

init.rc —— 从kernel Log查看

  Android是基于Linux内核的系统,因此Android的启动过程是分为两个阶段的:

  • 第一个阶段就是Linux内核的启动
  • 第二个阶段就是Android框架的启动(包括核心服务和程序)。

看了Android系统启动init进程 – 干了啥事有点感觉,还是云里雾里,现在查看实际Log印证一下


获取kernel Log日志

在这里插入图片描述
获取权限问题,通过 adb bugreport 获取 bugreport-XXXXX-2021-01-04-15-28-49.zip包

init main 几个阶段

在这里插入图片描述
init进程 – 干了啥事对照,FirstStageMain(argc, argv) -> SetupSelinux(argv) -> SecondStageMain(argc, argv)

LoadBootScripts相关init.rc解析执行

Log比较少,还是可以看到 rc 文件加载,以及service启动等,关键Log可查看init:
在这里插入图片描述
确实Log少的可怜,一般公司都会添加调试Log
在这里插入图片描述

触发器的执行顺序为on early-init -> init -> late-init

Log 没有 init.rc 相关触发执行相关节点日志,从 init.rc 文件查看一下🙈
调试查看重启on nonencrypted触发class_start main启动zygote服务的class main

# Cgroups are mounted right before early-init using list from /etc/cgroups.json
on early-init
    # ...... ......
    start ueventd
    # ...... ......
    # Mount tracefs
    mount tracefs tracefs /sys/kernel/tracing

# Run boringssl self test for each ABI so that later processes can skip it. http://b/139348610
on early-init && property:ro.product.cpu.abilist32=*
    exec_start boringssl_self_test32
on early-init && property:ro.product.cpu.abilist64=*
    exec_start boringssl_self_test64

# ...... ......
# ...... ......

on init
    # ...... ......
    mkdir /mnt/user 0755 root root
    mkdir /mnt/user/0 0755 root root
    mkdir /mnt/user/0/self 0755 root root
    mkdir /mnt/user/0/emulated 0755 root root
    mkdir /mnt/user/0/emulated/0 0755 root root
    # ...... ......
    # Symlink to keep legacy apps working in multi-user world
    symlink /storage/self/primary /mnt/sdcard
    symlink /mnt/user/0/primary /mnt/runtime/default/self/primary
    # ...... ......
    # Start logd before any other services run to ensure we capture all of their logs.
    start logd
    # Start lmkd before any other services run so that it can register them
    chown root system /sys/module/lowmemorykiller/parameters/adj
    chmod 0664 /sys/module/lowmemorykiller/parameters/adj
    chown root system /sys/module/lowmemorykiller/parameters/minfree
    chmod 0664 /sys/module/lowmemorykiller/parameters/minfree
    start lmkd

    # Start essential services.
    start servicemanager
    start hwservicemanager
    start vndservicemanager

# ...... ......
# ...... ......

# Mount filesystems and start core system services.
on late-init
    trigger early-fs

    # Mount fstab in init.{$device}.rc by mount_all command. Optional parameter
    # '--early' can be specified to skip entries with 'latemount'.
    # /system and /vendor must be mounted by the end of the fs stage,
    # while /data is optional.
    trigger fs
    trigger post-fs

    # Mount fstab in init.{$device}.rc by mount_all with '--late' parameter
    # to only mount entries with 'latemount'. This is needed if '--early' is
    # specified in the previous mount_all command on the fs stage.
    # With /system mounted and properties form /system + /factory available,
    # some services can be started.
    trigger late-fs

    # Now we can mount /data. File encryption requires keymaster to decrypt
    # /data, which in turn can only be loaded when system properties are present.
    trigger post-fs-data

    # Load persist properties and override properties (if enabled) from /data.
    trigger load_persist_props_action

    # Should be before netd, but after apex, properties and logging is available.
    trigger load_bpf_programs

    # Now we can start zygote for devices with file based encryption
    trigger zygote-start

    # Remove a file to wake up anything waiting for firmware.
    trigger firmware_mounts_complete

    trigger early-boot
    trigger boot

# ...... ......
# ...... ......
on boot
    # ...... ......
    # limit discard size to 128MB in order to avoid long IO latency
    # for filesystem tuning first (dm or sda)
    # Note that, if dm-<num> is used, sda/mmcblk0 should be tuned in vendor/init.rc
    write /sys/devices/virtual/block/${dev.mnt.blk.data}/queue/discard_max_bytes 134217728
    # ...... ......
    # Start standard binderized HAL daemons
    class_start hal

    class_start core

    # Requires keystore (currently a core service) to be ready first.
    exec -- /system/bin/fsverity_init

on nonencrypted
    class_start main
    class_start late_start

on property:sys.init_log_level=*
    loglevel ${sys.init_log_level}

on charger
    class_start charger

on property:vold.decrypt=trigger_load_persist_props
    load_persist_props
    start logd
    start logd-reinit

on property:vold.decrypt=trigger_post_fs_data
    trigger post-fs-data
    trigger zygote-start

on property:vold.decrypt=trigger_restart_min_framework
    # A/B update verifier that marks a successful boot.
    exec_start update_verifier
    class_start main

on property:vold.decrypt=trigger_restart_framework
    # A/B update verifier that marks a successful boot.
    exec_start update_verifier
    class_start_post_data hal
    class_start_post_data core
    class_start main
    class_start late_start
    setprop service.bootanim.exit 0
    start bootanim
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值