Android 在 kernel 中重启系统的接口

2019-06-14

关键字:kernel 重启函数、kernel reboot、kernel restart


 

Android 重启系统的方法可太多了。但大多数都需要我们在正常运行的 Android 之上才可以操作,甚至稍微偏底层一点的都需要我们的文件系统存在时才能使用。对于一些特定的场景,比如在 Android 的 kernel 进程里,想要直接发起一个重启命令要如何做呢?

 

方法其实很简单,kernel 中有现成的接口可以直接使用。

./kernel/kernel/sys.c

在上面这个源码中定义了一个函数

/**
 *    kernel_restart - reboot the system
 *    @cmd: pointer to buffer containing command to execute for restart
 *        or %NULL
 *
 *    Shutdown everything and perform a clean reboot.
 *    This is not safe to call in interrupt context.
 */
void kernel_restart(char *cmd)
{
    kernel_restart_prepare(cmd);
    migrate_to_reboot_cpu();
    syscore_shutdown();
    if (!cmd)
        printk(KERN_EMERG "Restarting system.\n");
    else
        printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
    kmsg_dump(KMSG_DUMP_RESTART);
    machine_restart(cmd);
}

 

这个函数很友好,只要是在 kernel 中的程序,你可以直接声明这个函数的 extern 函数形式,然后直接调用它。它的使用方式如下

extern void kernel_restart(char *cmd);

void main()
{
  kernel_restart(0);        //相当于 reboot
  kernel_restart("loader"); //相当于 reboot loader
}

函数的参数是一个重启命令参数。如果仅需要重启系统,直接传一个空指针进去就好。

 


 

转载于:https://www.cnblogs.com/chorm590/p/11022561.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值