首页 > 学院 > 开发设计 > 正文

reboot reason的客制化

2019-11-09 16:56:01
字体:
来源:转载
供稿:网友
kernel的reboot系统调用实现如下:SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,        void __user *, arg){    struct pid_namespace *pid_ns = task_active_pid_ns(current);    char buffer[256];    int ret = 0;    mutex_lock(&reboot_mutex);    switch (cmd) {    case linux_REBOOT_CMD_RESTART:        kernel_restart(NULL);        break;    case LINUX_REBOOT_CMD_RESTART2:        ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1);        if (ret < 0) {            ret = -EFAULT;            break;        }        buffer[sizeof(buffer) - 1] = '/0';        kernel_restart(buffer);        break;}可以看到reboot的restart command其实有两个,一个直接调用kernel_restart重启系统,一个LINUX_REBOOT_CMD_RESTART2,则可以带一个reason,也就是说这次是为什么重启,这就为客制化提供了机会,在真正reboot 实现的时候,可以把这个reason也就是buffer中的字符串存起来,这样就可以告诉driver是为什么重启了.driver 可以针对不通的reason做不同的处理.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表