个人学习笔记,勿喷!
如有错误请大佬留言纠错,感谢!
因为学习的是上层的开机流程,所以bootloader的就跳过了。
init.cpp(源码1)中调用了loadbootscripts()方法,在该方法中会调用init.rc文件。
init.rc(源码2)就会创建很多目录和文件,并且赋予权限。其中重要的是init.rc里面会启动zygote。
zygote(源码3)会fork出一个新的进程,来开启系统服务,启动systemserver、audioserver、cameraserver、media、netd、wifi等一系列重要服务。
systemserver(源码4)中,会启动各种各样的服务。
其中,startbootstrapservices()方法中,就会开启activitymangerservier/displaymanagerservice/powermanagerservice/等其他重要服务。
源码1
/system/core/init/init.cpp
static void loadbootscripts(actionmanager& action_manager, servicelist& service_list) {
parser parser = createparser(action_manager, service_list);
std::string bootscript = getproperty("ro.boot.init_rc", "");
if (bootscript.empty()) {
parser.parseconfig("/system/etc/init/hw/init.rc");
if (!parser.parseconfig("/system/etc/init")) {
late_import_paths.emplace_back("/system/etc/init");
}
// late_import is available only in q and earlier release. as we don't
// have system_ext in those versions, skip late_import for system_ext.
parser.parseconfig("/system_ext/etc/init");
if (!parser.parseconfig("/vendor/etc/init")) {
late_import_paths.emplace_back("/vendor/etc/init");
}
if (!parser.parseconfig("/odm/etc/init")) {
late_import_paths.emplace_back("/odm/etc/init");
}
if (!parser.parseconfig("/product/etc/init")) {
late_import_paths.emplace_back("/product/etc/init");
}
} else {
parser.parseconfig(bootscript);
}
}
源码2
/system/core/rootdir/init.rc
# now we can start zygote for devices with file based encryption
trigger zygote-start
源码3
/system/core/rootdir/init.zygote64.rc
service zygote /system/bin/app_process64 -xzygote /system/bin --zygote --start-system-server --socket-name=zygote
class main
priority -20
user root
group root readproc reserved_disk
socket zygote stream 660 root system
socket usap_pool_primary stream 660 root system
onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
onrestart write /sys/power/state on
# note: if the wakelock name here is changed, then also
# update it in systemsuspend.cpp
onrestart write /sys/power/wake_lock zygote_kwl
onrestart restart audioserver
onrestart restart cameraserver
onrestart restart media
onrestart restart media.tuner
onrestart restart netd
onrestart restart wificond
task_profiles processcapacityhigh maxperformance
critical window=${zygote.critical_window.minute:-off} target=zygote-fatal
源码4
/frameworks/base/services/java/com/android/server/systemserver.java
private void run() {
try {
t.tracebegin("startservices");
startbootstrapservices(t); //启动关键服务
startcoreservices(t); //启动必要服务
startotherservices(t); //启动其他服务
startapexservices(t);
}
}
浙公网安备 33010602011771号