android重启流程

本文详细介绍了Android系统重启的流程,从framework层的Power.java开始,深入到内核中的sys.c,再到arm平台的reset.c,讲解了如何通过__reboot函数触发不同操作,如halt、power off和restart。在restart流程中,着重分析了如何根据cmd参数执行machine_restart,以及在不同平台上的实现细节,特别是如何处理'command'参数以进入recovery模式。
摘要由CSDN通过智能技术生成
 

我这边主要是讲下android reboot走的流程以及所设计的代码,我这边直接从framework层开始。

framework会提供系统重启的接口:

代码路径:frameworks/base/core/java/android/os/Power.java

    public static void reboot(String reason) throws IOException
    {
        rebootNative(reason);
    }

而嵌套的rebootNative(reason);其实是个native接口,其实现是在frameworks/base/core/jni/android_os_Power.cpp

   { "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },

 

static void android_os_Power_reboot(JNIEnv *env, jobject clazz, jstring reason)
{
    sync();
#ifdef HAVE_ANDROID_OS
    if (reason == NULL) {
        reboot(RB_AUTOBOOT);
    } else {
        const char *chars = env->GetStringUTFChars(reason, NULL);
        __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
                 LINUX_REBOOT_CMD_RESTART2, (char*) chars);
        env->ReleaseStringUTFChars(reason, chars);  // In case it fails.
    }
    jniThrowIOException(env, errno);
#endif
}

重点关注__reboot这个函数,其带4个参数,具体函数定义是在内核里kernel/sys.c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值