reboot命令直接重启-sys.powerctl


参考另外一篇
android O 手机关机流程与时间
https://blog.csdn.net/lei7143/article/details/80499881

//开机动画

03-20 16:51:18.144364   222  2483 I boot    : BOOTPROF:BootAnimation:Start:9486833

//zygote 正常启动

03-20 16:51:21.637916   413   413 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<<

03-20 16:51:21.657699   413   413 D AndroidRuntime: CheckJNI is OFF

//重启结束

03-20 16:50:40.558134   804   804 D RunningBoosterService: reboot complete

以上log  说明kernel 重启了,但zygote 只启动一次,说明zygote正常。

//last_kemsg 信息

[ 1537.076033]  (0)[1:init]reboot: Restarting system with command 'deviceowner'

[ 1537.076060] -(0)[1:init]machine_restart, arm_pm_restart(  (null))

[ 1537.076074] -(0)[1:init]ARCH_RESET happen!!!

[ 1537.076087] -(0)[1:init]arch_reset: cmd = deviceowner

[ 1537.076106] -(0)[1:init]CPU: 0 PID: 1 Comm: init Tainted: G        W      3.18.35+ #2

[ 1537.076118] Backtrace: 

[ 1537.076157] -(0)[1:init][<c010badc>] (dump_backtrace) from [<c010bc7c>] (show_stack+0x18/0x1c)

由于重启log中没有任何关于16:51 左右关机log信息,说明手机没有关机突然重启,由于没有uart log ,唯一的log信息是last_kmsg.

[ 1537.076033]  (0)[1:init]reboot: Restarting system with command 'deviceowner'    说明命令deviceowner使得手机突然重启

 //之前last_kmsg

<< /proc/last_kmsg >>:
ram console header, hw_status: 0, fiq step 0.
Not Clear, old status is 0.

//16:51左右last_kmsg 
<< /proc/last_kmsg >>:
ram console header, hw_status: 2, fiq step 0.
Not Clear, old status is 2.

这一次的状态是2 说明手机异常重启。

frameworks\base\core\java\android\os\PowerManager.java

/**
 * The value to pass as the 'reason' argument to reboot() when device owner requests a reboot on
 * the device.
 * @hide
 */
public static final String REBOOT_REQUESTED_BY_DEVICE_OWNER = "deviceowner";

frameworks\base\services\devicepolicy\java\com\android\server\devicepolicy\DevicePolicyManagerService.java

public void reboot(ComponentName admin) {
    Preconditions.checkNotNull(admin);
    // Make sure caller has DO.
    synchronized (this) {
        getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
    }
    long ident = mInjector.binderClearCallingIdentity();
    try {
        // Make sure there are no ongoing calls on the device.
        if (mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
            throw new IllegalStateException("Cannot be called with ongoing call on the device");
        }
        mInjector.powerManagerReboot(PowerManager.REBOOT_REQUESTED_BY_DEVICE_OWNER);
    } finally {
        mInjector.binderRestoreCallingIdentity(ident);
    }
}

frameworks\native\services\powermanager\IPowerManager.cpp

  if (!property_setter_->SetProperty(ANDROID_RB_PROPERTY,

                                     kRebootPrefix + reason_str)) {

    return UNKNOWN_ERROR;

  }

\system\nativepower\...

init.rc

on property:sys.powerctl=*

powerctl ${sys.powerctl}

system/core/init/builtins.cpp 

system/core/init/builtins.cpp

static int do_powerctl(const std::vector<std::string>& args) {

system/core/libcutils/android_reboot.c

int android_reboot

Kernel/kernel/reboot.c

void kernel_restart(char *cmd)
{
 kernel_restart_prepare(cmd);
 migrate_to_reboot_cpu();
 syscore_shutdown();
 if (!cmd)
  pr_emerg("Restarting system\n");
 else
  pr_emerg("Restarting system with command '%s'\n", cmd);

参考:

linux reboot流程,从命令行到内核全解析_xh.wang的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值