小编mou*_*oul的帖子

如何从IRQ范围内的非单片内核模块进行软重启?

我需要重新启动处理内核中的IRQ.

我想调用/sbin/reboot二进制文件,但由于IRQ范围,我有限制.

代码如下:

#define MY_IRQ_ID       42

void __init             rebootmodule_init(void) {
    request_any_context_irq(MY_IRQ_ID, rebootmodule_irq_handler, IRQF_TRIGGER_FALLING, "irq-name", NULL);
}

irqreturn_t             rebootmodule_irq_handler(int irq, void *dev_id) {
    my_reboot();
    return IRQ_HANDLED;
}

void                    my_reboot(void) {
    int                 ret;
    char                *argv[2], *envp[4];

    argv[0] = "/sbin/reboot";
    argv[1] = NULL;
    envp[0] = "HOME=/";
    envp[1] = "PWD=/";
    envp[2] = "PATH=/sbin";
    envp[3] = NULL;
    ret = call_usermodehelper(argv[0], argv, envp, 0);
    printk(KERN_INFO "trying to reboot (ret = %d)", ret);
}
Run Code Online (Sandbox Code Playgroud)

我可以看到printk(...)IRQ被触发的时间,但是我有一些错误,即使我替换/sbin/reboot/bin/rm /tmp/its-not-working.

我测试了其他办法可以做到像重启mvBoardReset(), …

linux kernel reboot irq linux-kernel

2
推荐指数
1
解决办法
1497
查看次数

标签 统计

irq ×1

kernel ×1

linux ×1

linux-kernel ×1

reboot ×1