• 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
    }

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


  • 相关阅读:
    学习使用linux下tags文件
    uboot常用命令详解
    U-boot中TFTP 解释
    eth0: ERROR while getting interface flags: No such device 没有eth0 有其他的eth
    取消挂载 umount 时出现的 “Device is busy”
    Linux的log日志功能
    oracle的安装
    SOA架构设计分析
    立方体模型
    质量属性的六个常见属性场景(淘宝网)
  • 原文地址:https://www.cnblogs.com/chorm590/p/11022561.html
Copyright © 2020-2023  润新知