从linux驱动程序调用execvp

时间:2018-01-03 08:56:25

标签: linux linux-kernel system-calls execvp

目前,我想从内核端调用execvp。 我的程序被编程为进入暂停模式。 所以我试着设置下面的代码:

char   *argv[] = { "/sbin/halt", "-f", NULL };
char * envp[] = {
            "SHELL=/bin/sh",
            "HOME=/",        
            "PATH=.:/sbin:/usr/sbin:/bin:/usr/bin",
            "PWD=/",
             NULL };
rc = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);

似乎代码可以很好地执行halt命令。 但它不符合电信号的要求。 当我从用户空间调用execvp时,我已经检查过了:

execvp ("halt", argv);

它按预期运作良好。

我知道execvp会用传递参数中指定的新编程替换当前正在运行的编程。当我使用call_usermodehelper时,这不会发生,我认为这可能是不同的。 谁知道我怎么能解决这个问题?如何使execvp在驱动程序中工作类似于用户空间。

谢谢!

0 个答案:

没有答案