所有 Android Init Language 'triggers' 的列表是什么?

What is the list of all Android Init Language 'triggers'?

在 /init.rc 和其他 Android Init Language '.rc' 文件中,可以有 'actions' 部分开始: 'on ' 执行一系列当 init 进程中发生事件时发出命令。所有 'triggers' 的列表是什么?似乎看到了一些特定的关键字触发器,例如 'boot'、'init'、'fs'、'early-init' 和 'post-fs-data'。这是这些的完整列表吗?在某处的代码中? (除了关键字触发器,还有一些表达式触发器,见下文。)

我见过一些关键字触发器,如果​​知道何时以及为何调用它们会很高兴:

boot
early-init
init
fs
post-fs-data
charger
nonencrypted  

除了关键字,表达式的例子还包括:

property:ro.factory.tool=1     -- when a property is set to a value
device-added-<path>  -- Triggered when a node is added when the equipment
device-removed-<path>  -- When the device is removed to add nodes
service-exited-<name>

注意:在撰写本文时,所有链接都指向 AOSP android-5.1.1_r18

触发器可以由开发者(设备维护者)定义,所以我们不能指望找到一个完整的列表。但是,假设您对默认包含在 AOSP 中的那些最感兴趣,流程如下:

platform/system/core/init/init.c 中通过 action_for_each_trigger() 处理的操作:

  1. early-init
  2. init
  3. charger late-init

如果charger是最后遇到的触发器,那么这是AOSP定义列表的结尾。厂商可以从这里补充offmode充电的后续动作。

如果 late-init 是遇到的最后一个触发器,则 Android (platform/system/core/rootdir/init.rc) 中包含的默认 init.rc 会启动 运行 以下触发器:

# Mount filesystems and start core system services.
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.
    trigger load_all_props_action

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

    trigger early-boot
    trigger boot

您也可以使用 adb 在连接的 phone/模拟器上列出它:

$ adb shell dmesg | grep "processing action"
[    4.376074] init: processing action 0x35480 (init)
[    4.440537] init: processing action 0x38c58 (init)
[    4.450009] init: processing action 0x35708 (early-fs)
[    5.531812] init: processing action 0x39c38 (console_init)
[    5.575831] init: processing action 0x2de70 (fs)
[    5.597799] init: processing action 0x35890 (fs)
[    7.089157] init: processing action 0x2df58 (post-fs)
[    7.091550] init: processing action 0x38cb8 (post-fs)
[    7.091818] init: processing action 0x2e288 (post-fs-data)
[    7.100189] init: processing action 0x39c80 (property_service_init)
[    7.110080] init: processing action 0x39cc8 (signal_init)
[    7.110177] init: processing action 0x39d10 (check_startup)
[    7.110248] init: processing action 0x2ea18 (boot)
[    7.126205] init: processing action 0x397e0 (boot)
[    8.183090] init: processing action 0x39d58 (queue_property_triggers)
[    8.183232] init: processing action 0x2f8f8 (nonencrypted)
[    8.183810] init: processing action 0x2fd98 (property:ro.debuggable=1)
[    8.184463] init: processing action 0x328f8 (property:sys.usb.config=none)
[   14.438626] init: processing action 0x2ffd0 (property:sys.sensors=1)
[   28.192393] init: processing action 0x31860 (property:sys.boot_completed=1)

有几个关键字是每个人都知道的,但如果您想查看正在设置的属性列表(以及其他默认设置的属性),请尝试此 adb 命令:

$ adb shell getprop
[alsa.mixer.capture.headset]: [Capture]
[alsa.mixer.capture.master]: [Capture]
[alsa.mixer.playback.headset]: [Headphone]
[alsa.mixer.playback.master]: [Playback]
[alsa.mixer.playback.speaker]: [Playback]
[back_camera_name]: [ov5640_mipi]
[back_camera_orient]: [0]
[camera.disable_zsl_mode]: [1]
[dalvik.vm.dexopt-flags]: [m=y]
[dalvik.vm.heapgrowthlimit]: [64m]
[dalvik.vm.heapmaxfree]: [8m]
[dalvik.vm.heapminfree]: [512k]
[dalvik.vm.heapsize]: [384m]
[dalvik.vm.heapstartsize]: [8m]
[dalvik.vm.heaptargetutilization]: [0.75]
[dalvik.vm.jniopts]: [warnonly]
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
[debug.egl.hw]: [1]
[debug.force_rtl]: [0]
[debug.sf.enable_hgl]: [1]
[debug.sf.showfps]: [0]
[dev.bootcomplete]: [1]
[dhcp.eth0.result]: [failed]
[front_camera_name]: [ov5642_camera,ov5640_camera]
[front_camera_orient]: [0]
[gsm.current.phone-type]: [1]
[gsm.network.type]: [Unknown]
[gsm.operator.alpha]: []
[gsm.operator.iso-country]: []
[gsm.operator.isroaming]: [false]
[gsm.operator.numeric]: []
[gsm.ril.delay]: [15]
[gsm.sim.state]: [NOT_READY]
[hwc.enable_dither]: [1]
[hwc.stretch.filter]: [1]
[init.svc.adbd]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.console]: [running]
[init.svc.debuggerd]: [running]
[init.svc.dhcpcd_eth0]: [stopped]
[init.svc.drm]: [running]
[init.svc.fuse_extsd]: [running]
[init.svc.healthd]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.media]: [running]
[init.svc.netd]: [running]
[init.svc.sdcard]: [running]
[init.svc.servicemanager]: [running]
[init.svc.surfaceflinger]: [running]
[init.svc.ueventd]: [running]
[init.svc.uim]: [stopped]
[init.svc.vold]: [running]
[init.svc.wifi_mac]: [stopped]
[init.svc.zygote]: [running]
[media.omxgm.enable-player]: [1]
[media.omxgm.enable-record]: [1]
[media.omxgm.enable-scan]: [1]
[net.bt.name]: [Android]
[net.change]: [net.qtaguid_enabled]
[net.hostname]: [android-c49d34ff0fbd9f6]
[net.qtaguid_enabled]: [1]
[net.tcp.buffersize.default]: [4096,87380,110208,4096,16384,110208]
[net.tcp.buffersize.edge]: [4093,26280,35040,4096,16384,35040]
[net.tcp.buffersize.ethernet]: [524288,2097152,4194304,524288,2097152,4194304]
[net.tcp.buffersize.evdo]: [4094,87380,262144,4096,16384,262144]
[net.tcp.buffersize.gprs]: [4092,8760,11680,4096,8760,11680]
[net.tcp.buffersize.hsdpa]: [4094,87380,262144,4096,16384,262144]
[net.tcp.buffersize.hspa]: [4094,87380,262144,4096,16384,262144]
[net.tcp.buffersize.hspap]: [4094,87380,1220608,4096,16384,1220608]
[net.tcp.buffersize.hsupa]: [4094,87380,262144,4096,16384,262144]
[net.tcp.buffersize.lte]: [524288,1048576,2097152,262144,524288,1048576]
[net.tcp.buffersize.umts]: [4094,87380,110208,4096,16384,110208]
[net.tcp.buffersize.wifi]: [524288,1048576,2097152,262144,524288,1048576]
[persist.service.bdroid.bdaddr]: [22:22:12:0c:fb:0d]
[persist.sys.dalvik.vm.lib]: [libdvm.so]
[persist.sys.profiler_ms]: [0]
[persist.sys.usb.config]: [mtp,adb]
[qemu.hw.mainkeys]: [1]
[ro.FSL_AAC_PARSER]: [1]
[ro.FSL_ASF_PARSER]: [0]
[ro.FSL_AVI_PARSER]: [1]
[ro.FSL_FLAC_PARSER]: [1]
[ro.FSL_FLV_PARSER]: [1]
[ro.FSL_MKV_PARSER]: [1]
[ro.FSL_MPG2_PARSER]: [1]
[ro.FSL_REAL_PARSER]: [0]
[ro.adb.secure]: [1]
[ro.allow.mock.location]: [1]
[ro.baseband]: [unknown]
[ro.board.platform]: [imx6]
[ro.boot.bootdev]: [mmcblk3]
[ro.boot.hardware]: [freescale]
[ro.boot.serialno]: [19b80271c6]
[ro.bootloader]: [unknown]
[ro.bootmode]: [unknown]
[ro.build.characteristics]: [tablet]
[ro.build.date.utc]: [1484264053]
[ro.build.date]: [Thu Jan 12 17:34:13 CST 2017]
[ro.build.description]: [nitrogen6x-eng 4.4.3 2.0.1-ga 20160816 dev-keys]
[ro.build.display.id]: [nitrogen6x-eng 4.4.3 2.0.1-ga 20160816 dev-keys]
[ro.build.fingerprint]: [boundary/nitrogen6x/nitrogen6x:4.4.3/2.0.1-ga/20160816:eng/dev-keys]
[ro.build.host]: [fbd-HP-ZBook-15]
[ro.build.id]: [2.0.1-ga]
[ro.build.product]: [nitrogen6x]
[ro.build.tags]: [dev-keys]
[ro.build.type]: [eng]
[ro.build.user]: [fbd]
[ro.build.version.codename]: [REL]
[ro.build.version.incremental]: [20160816]
[ro.build.version.release]: [4.4.3]
[ro.build.version.sdk]: [19]
[ro.carrier]: [unknown]
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
[ro.config.notification_sound]: [OnTheHunt.ogg]
[ro.crypto.state]: [unencrypted]
[ro.debuggable]: [1]
[ro.factorytest]: [0]
[ro.hardware]: [freescale]
[ro.kernel.android.checkjni]: [1]
[ro.opengles.version]: [196608]
[ro.product.board]: []
[ro.product.brand]: [boundary]
[ro.product.cpu.abi2]: [armeabi]
[ro.product.cpu.abi]: [armeabi-v7a]
[ro.product.device]: [nitrogen6x]
[ro.product.locale.language]: [en]
[ro.product.locale.region]: [US]
[ro.product.manufacturer]: [boundary]
[ro.product.model]: [NITROGEN6X]
[ro.product.name]: [nitrogen6x]
[ro.revision]: [405522]
[ro.ril.wake_lock_timeout]: [300]
[ro.runtime.firstboot]: [582594834]
[ro.secure]: [0]
[ro.serialno]: [19b80271c6]
[ro.sf.hwrotation]: [0]
[ro.sf.lcd_density]: [160]
[ro.tether.denied]: [false]
[ro.wifi.channels]: []
[ro.zygote.disable_gl_preload]: [true]
[rw.VIDEO_RENDER_NAME]: [video_render.surface]
[service.bootanim.exit]: [1]
[sys.boot_completed]: [1]
[sys.emulated.battery]: [1]
[sys.interactive]: [active]
[sys.sysctl.extra_free_kbytes]: [12000]
[sys.usb.config]: [mtp,adb]
[sys.usb.state]: [mtp,adb]
[system_init.startsurfaceflinger]: [0]
[vold.post_fs_data_done]: [1]
[wifi.ap.interface]: [wlan0]
[wifi.interface]: [wlan0]
[wlan.interface]: [wlan0]

我在 Boundary Devices 的 Sabrelite 开发板上 运行 Android 4.4.2。有关详细信息,请参阅 link 获取 getprop adb 命令 here. See this blog

我知道这已经晚了,但如果有人仍然面临这个问题,我决定回答它。 早期初始化- 设置 init 及其分叉子项的 oom_adj 为所有 init 进程设置安全上下文。 在初始化时- 设置全局环境 创建挂载点 在 fs- 挂载 mtd 分区 在 post-fs- 更改系统目录的权限 在 post-fs-data- 更改 /data 文件夹和子文件夹的权限 开机时 - 基本网络初始化,内存管理 服务服务经理 启动系统管理器来管理所有本机服务,如位置、音频、共享首选项等。 服务受精卵- 以 app_process

启动 zygote

以上信息来源http://www.onsandroid.com/2014/10/in-depth-android-boot-sequence-process.html

找到所有这些标准触发器的最有效方法是对 system/core/rootdir directory.[=14 中的所有 *.rc 文件执行单词 "trigger" 的 grep =]

grep trigger rootdir/*

请参阅 AOSP 代码的 system/core/init 文件夹中的自述文件。您可以在此处找到有关 android init 的所有详细信息。

Link for Android O OS 自述文件:http://androidxref.com/8.0.0_r4/xref/system/core/init/README.md