zoukankan      html  css  js  c++  java
  • 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.
    ");
        else
            printk(KERN_EMERG "Restarting system with command '%s'.
    ", 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
    }

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


  • 相关阅读:
    git使用
    Git常用命令梳理
    git fetch 更新远程代码到本地仓库
    理解RESTful架构
    漫谈五种IO模型(主讲IO多路复用)
    python 单下划线/双下划线使用总结
    闰秒导致MySQL服务器的CPU sys过高
    闰秒问题
    Java线上应用故障排查之一:高CPU占用
    ZooKeeper安装与配置
  • 原文地址:https://www.cnblogs.com/chorm590/p/11022561.html
Copyright © 2011-2022 走看看