Вызов execvp из драйвера Linux

В настоящее время я хочу вызвать 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 ответов

Другие вопросы по тегам