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
    }

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


  • 相关阅读:
    素数
    超级素数
    SUMMARIZE 6.1
    广度优先搜索与八字码问题
    poj2352
    poj1198
    康托展开
    STL里的内存池实现
    构造函数,C++内存管理,内存泄漏定位
    内联函数,宏定义,内存对齐,类型转换
  • 原文地址:https://www.cnblogs.com/chorm590/p/11022561.html
Copyright © 2011-2022 走看看