Android 11开机流程记录
简单记录下系统开机流程,方便后面有问题时可以帮助分析
system/core/init/main.cpp
int main(int argc, char** argv)
return SecondStageMain(argc, argv);
system/core/init/init.cpp
int SecondStageMain(int argc, char** argv)
static void LoadBootScripts(ActionManager& action_manager, ServiceList& service_list)
parser.ParseConfig("/system/etc/init/hw/init.rc");
system/core/rootdir/init.rc
import /system/etc/init/hw/init.${ro.zygote}.rc
system/core/rootdir/init.zygote64.rc
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
frameworks/base/cmds/app_process/app_main.cpp
int main(int argc, char* const argv[])
args.add(String8("start-system-server"));
runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
public static void main(String argv[])
Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer);
String args[] = { "--setuid=1000", "--setgid=1000", "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023," + "1024,1032,1065,3001,3002,3003,3006,3007,3009,3010,3011", "--capabilities=" + capabilities + "," + capabilities, "--nice-name=system_server", "--runtime-args", "--target-sdk-version=" + VMRuntime.SDK_VERSION_CUR_DEVELOPMENT, "com.android.server.SystemServer", };
parsedArgs = new ZygoteArguments(args);
return handleSystemServerProcess(parsedArgs);
return ZygoteInit.zygoteInit(parsedArgs.mTargetSdkVersion, parsedArgs.mDisabledCompatChanges, parsedArgs.mRemainingArgs, cl);
return RuntimeInit.applicationInit(targetSdkVersion, disabledCompatChanges, argv, classLoader);
frameworks/base/core/java/com/android/internal/os/RuntimeInit.java
protected static Runnable applicationInit(int targetSdkVersion, long[] disabledCompatChanges, String[] argv, ClassLoader classLoader)
return findStaticMain(args.startClass, args.startArgs, classLoader)
cl = Class.forName(className, true, classLoader);
m = cl.getMethod("main", new Class[] { String[].class });
return new MethodAndArgsCaller(m, argv);
frameworks/base/core/java/com/android/internal/os/RuntimeInit.java: static class MethodAndArgsCaller implements Runnable
mMethod.invoke(null, new Object[] { mArgs });
frameworks/base/services/java/com/android/server/SystemServer.java
public static void main(String[] args)
new SystemServer().run()
startBootstrapServices(t);
startCoreServices(t);
startOtherServices(t);
mActivityManagerService = ActivityManagerService.Lifecycle.startService( mSystemServiceManager, atm);
mActivityManagerService.systemReady
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
public void systemReady(final Runnable goingCallback, @NonNull TimingsTraceAndSlog t)
mAtmInternal.startHomeOnAllDisplays(currentUserId, "systemReady");
frameworks/base/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
public boolean startHomeOnAllDisplays(int userId, String reason)
return mRootWindowContainer.startHomeOnAllDisplays(userId, reason);
frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
boolean startHomeOnAllDisplays(int userId, String reason)
homeStarted |= startHomeOnDisplay(userId, reason, displayId);
return startHomeOnDisplay(userId, reason, displayId, false /* allowInstrumenting */, false /* fromHomeKey */);
result |= startHomeOnTaskDisplayArea(userId, reason, taskDisplayArea, allowInstrumenting, fromHomeKey);
mService.getActivityStartController().startHomeActivity(homeIntent, aInfo, myReason, taskDisplayArea);
frameworks/base/services/core/java/com/android/server/wm/ActivityStartController.java
void startHomeActivity(Intent intent, ActivityInfo aInfo, String reason, TaskDisplayArea taskDisplayArea)
mLastHomeActivityStartResult = obtainStarter(intent, "startHomeActivity: " + reason) .setOutActivity(tmpOutRecord) .setCallingUid(0) .setActivityInfo(aInfo) .setActivityOptions(options.toBundle()) .execute();
ActivityStarter obtainStarter(Intent intent, String reason)
return mFactory.obtain().setIntent(intent).setReason(reason);
frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
int execute()
res = executeRequest(mRequest);
mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession, request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask, restrictedBgActivity, intentGrants);
result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor, startFlags, doResume, options, inTask, restrictedBgActivity, intentGrants);
mRootWindowContainer.resumeFocusedStacksTopActivities( mTargetStack, mStartActivity, mOptions);
frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
boolean resumeFocusedStacksTopActivities( ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions)
result = targetStack.resumeTopActivityUncheckedLocked(target, targetOptions);
frameworks/base/services/core/java/com/android/server/wm/ActivityStack.java
boolean resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options)
result = resumeTopActivityInnerLocked(prev, options);
pausing |= startPausingLocked(userLeaving, false /* uiSleeping */, next);
mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately));
frameworks/base/core/java/android/app/ClientTransactionHandler.java
void scheduleTransaction(ClientTransaction transaction)
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
frameworks/base/core/java/android/app/ActivityThread.java
void sendMessage(int what, Object obj)
sendMessage(what, obj, 0, 0, false);
mH.sendMessage(msg);
case EXECUTE_TRANSACTION:
mTransactionExecutor.execute(transaction);
frameworks/base/core/java/android/app/servertransaction/TransactionExecutor.java
public void execute(ClientTransaction transaction)
executeCallbacks(transaction);
cycleToPath(r, postExecutionState, shouldExcludeLastTransition, transaction);
performLifecycleSequence(r, path, transaction);
mTransactionHandler.handleLaunchActivity(r, mPendingActions, null /* customIntent */);
frameworks/base/core/java/android/app/ActivityThread.java
public Activity handleLaunchActivity(ActivityClientRecord r, PendingTransactionActions pendingActions, Intent customIntent)
final Activity a = performLaunchActivity(r, customIntent);
mInstrumentation.callActivityOnCreate(activity, r.state);
frameworks/base/core/java/android/app/Instrumentation.java
public void callActivityOnCreate(Activity activity, Bundle icicle)
activity.performCreate(icicle);
frameworks/base/core/java/android/app/Activity.java
final void performCreate(Bundle icicle)
onCreate(icicle);