Вызов 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 работать в драйвере, аналогичном пользовательскому пространству.
Спасибо!