当前位置: 首页 > news >正文

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);

http://www.xdnf.cn/news/996625.html

相关文章:

  • gffread
  • 疏锦行Python打卡 DAY 27 函数专题2:装饰器
  • Java 大视界——Java大数据在智能安防视频监控中的异常事件快速响应与处理机制
  • Xsens动捕和Manus数据手套在元宇宙数字人制作中提供解决方案
  • vba学习系列(11)--批退率通过率等数据分析
  • 浅谈MapReduce--基本操作
  • 2025年渗透测试面试题总结-长亭科技[校招]安全服务工程师(题目+回答)
  • 大模型布署如何选择GPU资源?
  • JAVA:RabbitMQ 消息持久化机制的技术指南
  • jenkins流水线打包vue无权限
  • web3 资讯网址
  • 《C++ 多态》
  • 基于llamafactory微调千问大模型(实战)
  • 延时神经网络 vs CNN vs RNN:时空建模的三种武器对比
  • 已连接(connected)UDP和未连接(unconnected)UDP的区别
  • 27-Oracle 23 ai Automatic Rollback Quarantine(事务精准隔离)
  • 16、企业预算管理(Budget)全流程解析:从预算编制到预算控制
  • Python Docker 镜像构建完整指南:从基础到优化
  • 全面理解BUUCTF-rip1
  • 苍穹外卖Day11代码解析以及深入思考
  • node.js连接mysql写接口(一)
  • Go语言高并发爬虫程序源码
  • Objective-c protocol 练习
  • 华为云河图:数字孪生技术驱动城市管理智能化变革
  • android 之 CALL
  • 【Create my OS】从零编写一个操作系统
  • 解决鸿蒙开发修改实体类某个字段,页面不刷新的问题
  • Android自动化AirScript
  • Rust 学习笔记:关于通过异步实现并发的练习题
  • nginx配置gzip压缩