之前整理过Android 7的初始化顺序,已经过时了,基于Android 11重新整理下并发布,方便查看与rc里初始化顺序有关的问题和bug.
初始化语言可看/system/core/init/README.md
或者https://blog.csdn.net/u010753159/article/details/51981121
这里不讲这些, 也不分析init代码.
init rc 总体初始化顺序FirstStageMain()
|
v
SetupSelinux()
|
v
SecondStageMain()
|
v
+----------------------+
| SetupCgroups |
| SetKptrRestrict |
| TestPerfEventSelinux |
| early-init +--> mount_all fstab.persist --early // hardware/google/pixel/common/init.pixel.rc
|wait_for_coldboot_done|
| MixHwrngIntoLinuxRng |
| SetMmapRndBits |
| KeychordInit |
| init |
| MixHwrngIntoLinuxRng |
| | |
| bootmode == "charger"|
| / \ |
| + + |
| charger late-init +--> +--------trigger---------+
| \ / | | early-fs |
| + | | fs +--> mount_all fstab.firmware --early
| | | | late-fs +--> +--------------------------------+
|queue_property_triggers| | post-fs | |mount_all fstab.firmware --late +--> queue_fs_event --> trigger nonencrypted
+-----------------------+ | post-fs-data | | class_start early_hal | |
|load_persist_props_action| +--------------------------------+ +-class_start-+
| load_bpf_programs | | main |
| zygote-start | | late_start |
|firmware_mounts_complete| +-------------+
| early-boot | ^
| boot +--> +-class_start-+ |
+------------------------+ | hal | |
| | core | |
| + ------------+ |
+------------------------------------------执行完 o